create pod on ali,huawei,tencent with a common config file

This commit is contained in:
zhouqunjie 2022-03-09 00:35:30 +08:00
parent 25fbab97af
commit edf3569c9d
11 changed files with 490 additions and 168 deletions

View File

@ -1,8 +1,39 @@
[eci_conf]
[container_conf]
#测试账号ak
access_key =
secret_key =
access_key = LTAI4GKsRHtEqUu8bzq5dt6N
secret_key = j96G9E2ijwpiN987VC03HmcFsaJngt
#region
region_id=cn-shanghai
region_id=cn-hangzhou
#容器实例名称(pod名)
container_group_name=pcm-test-ali-pod
#镜像地址
container_image=registry-vpc.cn-hangzhou.aliyuncs.com/eci_open/nginx
#容器名称
container_name=pcm-test-ali-container
##下面为非必需参数
#安全组ID
security_group_id=sg-bp17raa25u0wy0sb1qw5
#交换机ID
v_switch_id=vsw-bp176sh32kcq79d1uu8fp
#可用区
zone_id=cn-hangzhou-h
#容器实例名称(pod名)
container_group_name=pcm-test-ali-pod
#重启策略
restart_policy=Never
#Pod拥有核数
cpu_pod=1.00
#Pod拥有内存大小
memory_pod=2.00
#容器所需核数
cpu_container=1.00
#容器所需内存大小
memory_container=2.00
#镜像拉取策略
image_pull_policy=IfNotPresent
#每个region下的资源信息json格式
region_info={"cn-hangzhou": {"securityGroupId": "sg-bp118knl07ymorgzfhyw","vSwitchId": "vsw-bp1jrgfqqy54kg5hcf8bc","zoneId": "cn-hangzhou-h"},"cn-shanghai": {"securityGroupId": "sg-uf62jug0dt92nfy630cs","vSwitchId": "vsw-uf6cb39ub5urw82bv3w70","zoneId": "cn-shanghai-g"},"cn-beijing": {"securityGroupId": "sg-2ze6uv80a8s4yk04dmyu","vSwitchId": "vsw-2zegtxf8q29d8tt1xtcjk","zoneId": "cn-beijing-h"},"cn-shenzhen":{"securityGroupId": "sg-wz96x4kv4edy97q6jjzn","vSwitchId": "vsw-wz9rn33jwilodp24klo0q","zoneId": "cn-shenzhen-a"},"cn-hongkong":{"securityGroupId": "sg-j6cjajpf7f4ybda7h19w","vSwitchId": "vsw-j6c9c9fit5owbbc0ids6c","zoneId": "cn-hongkong-b"},"us-west-1":{"securityGroupId": "sg-u19hbpj9x","vSwitchId": "vsw-rj9h5vvzhb4fjkuzuyi8j","zoneId": "us-west-1a"},"us-east-1":{"securityGroupId": "sg-0xih51sfoldxzxfsbja5","vSwitchId": "vsw-0xisefewxoqe4f849jbnl","zoneId": "us-east-1b"},"ap-southeast-1":{"securityGroupId": "sg-t4n23ppw7fm5to7cnib9","vSwitchId": "vsw-t4nr1xt8zupxg00unnmg9","zoneId": "ap-southeast-1b"},"cn-zhangjiakou": {"securityGroupId": "sg-8vb96lku1dgq71ckh98g","vSwitchId": "vsw-8vbtnz5878r3bcio7cpyx", "nfs":"9cbb94a474-oav34.cn-zhangjiakou.nas.aliyuncs.com", "zoneId": "cn-zhangjiakou-a"}}
##region_info={"cn-hangzhou": {"securityGroupId": "sg-bp17raa25u0wy0sb1qw5","vSwitchId": "vsw-bp176sh32kcq79d1uu8fp","zoneId": "cn-hangzhou-h"},"cn-shanghai": {"securityGroupId": "sg-uf62jug0dt92nfy630cs","vSwitchId": "vsw-uf6cb39ub5urw82bv3w70","zoneId": "cn-shanghai-g"},"cn-beijing": {"securityGroupId": "sg-2ze6uv80a8s4yk04dmyu","vSwitchId": "vsw-2zegtxf8q29d8tt1xtcjk","zoneId": "cn-beijing-h"},"cn-shenzhen":{"securityGroupId": "sg-wz96x4kv4edy97q6jjzn","vSwitchId": "vsw-wz9rn33jwilodp24klo0q","zoneId": "cn-shenzhen-a"},"cn-hongkong":{"securityGroupId": "sg-j6cjajpf7f4ybda7h19w","vSwitchId": "vsw-j6c9c9fit5owbbc0ids6c","zoneId": "cn-hongkong-b"},"us-west-1":{"securityGroupId": "sg-u19hbpj9x","vSwitchId": "vsw-rj9h5vvzhb4fjkuzuyi8j","zoneId": "us-west-1a"},"us-east-1":{"securityGroupId": "sg-0xih51sfoldxzxfsbja5","vSwitchId": "vsw-0xisefewxoqe4f849jbnl","zoneId": "us-east-1b"},"ap-southeast-1":{"securityGroupId": "sg-t4n23ppw7fm5to7cnib9","vSwitchId": "vsw-t4nr1xt8zupxg00unnmg9","zoneId": "ap-southeast-1b"},"cn-zhangjiakou": {"securityGroupId": "sg-8vb96lku1dgq71ckh98g","vSwitchId": "vsw-8vbtnz5878r3bcio7cpyx", "nfs":"9cbb94a474-oav34.cn-zhangjiakou.nas.aliyuncs.com", "zoneId": "cn-zhangjiakou-a"}}

View File

@ -1,81 +1,53 @@
package eci
import (
"PCM/adaptor/container_api_adaptor/common"
"encoding/json"
"fmt"
"github.com/Unknwon/goconfig"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
"github.com/aliyun/alibaba-cloud-sdk-go/services/eci"
"os"
"time"
)
var accessKey string
var secretKey string
var regionId string
var zoneId string
var securityGroupId string
var vSwitchId string
var client *eci.Client
/**
获取配置信息
*/
func init() {
var cfg *goconfig.ConfigFile
config, err := goconfig.LoadConfigFile("/home/Senna/GolandProjects/PCM/adaptor/container_api_adaptor/alibaba/eci/config.conf") //加载配置文件
if err != nil {
fmt.Println("get config file error:", err.Error())
os.Exit(-1)
}
cfg = config
accessKey, _ = cfg.GetValue("eci_conf", "access_key")
secretKey, _ = cfg.GetValue("eci_conf", "secret_key")
regionId, _ = cfg.GetValue("eci_conf", "region_id")
var regionInfo map[string](map[string](string))
value, _ := cfg.GetValue("eci_conf", "region_info")
json.Unmarshal([]byte(value), &regionInfo)
zoneId = regionInfo[regionId]["zoneId"]
securityGroupId = regionInfo[regionId]["securityGroupId"]
vSwitchId = regionInfo[regionId]["vSwitchId"]
fmt.Printf("init success[ access_key:%s, secret_key:%s, region_id:%s, zoneId:%s, vSwitchId:%s, securityGroupId:%s]\n",
accessKey, secretKey, regionId, zoneId, vSwitchId, securityGroupId)
//初始化client
client, err = eci.NewClientWithAccessKey(regionId, accessKey, secretKey)
if err != nil {
panic(err)
}
}
/**
创建
*/
func createContainerGroup() string {
var client *eci.Client
var configCommon common.PCMContainerConfig
configCommon, _ = common.ConfigGet("/home/Senna/GolandProjects/PCM/adaptor/container_api_adaptor/alibaba/eci/config.conf")
//Create Client
client, _ = eci.NewClientWithAccessKey(configCommon.RegionId, configCommon.AccessKey, configCommon.SecretKey)
// Create Container Group
createContainerRequest := eci.CreateCreateContainerGroupRequest()
// required
createContainerRequest.RegionId = regionId
createContainerRequest.SecurityGroupId = securityGroupId
createContainerRequest.VSwitchId = vSwitchId
createContainerRequest.ContainerGroupName = "test-go-sdk"
createContainerRequest.RestartPolicy = "Never"
createContainerRequestVolume := make([]eci.CreateContainerGroupVolume, 1)
volume1 := &eci.CreateContainerGroupNFSVolume{
Path: "/",
Server: "0a1bf4a604-jaq68.cn-hangzhou.nas.aliyuncs.com",
}
createContainerRequestVolume[0].Name = "volume1"
createContainerRequestVolume[0].Type = "NFSVolume"
createContainerRequestVolume[0].NFSVolume = *volume1
createContainerRequest.Volume = &createContainerRequestVolume
//区域ID
createContainerRequest.RegionId = configCommon.RegionId
//POD名称
createContainerRequest.ContainerGroupName = configCommon.ContainerGroupName
//容器
createContainerRequestContainer := make([]eci.CreateContainerGroupContainer, 1)
createContainerRequestContainer[0].Image = "nginx"
createContainerRequestContainer[0].Name = "nginx-liu"
// option
createContainerRequestContainer[0].Cpu = requests.NewFloat(0.25)
createContainerRequestContainer[0].Memory = requests.NewFloat(0.5)
createContainerRequestContainer[0].ImagePullPolicy = "IfNotPresent"
createContainerRequestContainer[0].Image = configCommon.ContainerImage
createContainerRequestContainer[0].Name = configCommon.ContainerName
createContainerRequest.Container = &createContainerRequestContainer
// option
//createContainerRequest.SecurityGroupId = securityGroupId
//createContainerRequest.VSwitchId = vSwitchId
//createContainerRequest.RestartPolicy = restartPolicy
//createContainerRequestVolume := make([]eci.CreateContainerGroupVolume, 1)
//volume1 := &eci.CreateContainerGroupNFSVolume{
// Path: "/",
// Server: "0a1bf4a604-jaq68.cn-hangzhou.nas.aliyuncs.com",
//}
//createContainerRequestVolume[0].Name = "volume1"
//createContainerRequestVolume[0].Type = "NFSVolume"
//createContainerRequestVolume[0].NFSVolume = *volume1
//createContainerRequest.Volume = &createContainerRequestVolume
createContainerRequestContainer[0].Cpu = requests.NewFloat(configCommon.CpuContainerFloat)
createContainerRequestContainer[0].Memory = requests.NewFloat(configCommon.MemoryContainerFloat)
//createContainerRequestContainer[0].ImagePullPolicy = "IfNotPresent"
//sdk-core默认的重试次数为3在没有加幂等的条件下资源创建的接口底层不需要自动重试
client.GetConfig().MaxRetryTime = 0
createContainerGroupResponse, err := client.CreateContainerGroup(createContainerRequest)
@ -91,8 +63,12 @@ func createContainerGroup() string {
删除
*/
func deleteContainerGroup(containerGroupId string) {
var client *eci.Client
var configCommon common.PCMContainerConfig
configCommon, _ = common.ConfigGet("/home/Senna/GolandProjects/PCM/adaptor/container_api_adaptor/alibaba/eci/config.conf")
deleteContainerGroupRequest := eci.CreateDeleteContainerGroupRequest()
deleteContainerGroupRequest.RegionId = regionId
deleteContainerGroupRequest.RegionId = configCommon.RegionId
deleteContainerGroupRequest.ContainerGroupId = containerGroupId
_, err := client.DeleteContainerGroup(deleteContainerGroupRequest)
if err != nil {
@ -105,9 +81,13 @@ func deleteContainerGroup(containerGroupId string) {
查询
*/
func describeContainerGroup(containerGroupId string) eci.DescribeContainerGroupsContainerGroup0 {
var client *eci.Client
var configCommon common.PCMContainerConfig
configCommon, _ = common.ConfigGet("/home/Senna/GolandProjects/PCM/adaptor/container_api_adaptor/alibaba/eci/config.conf")
// Describe Container Groups
describeContainerGroupsRequest := eci.CreateDescribeContainerGroupsRequest()
describeContainerGroupsRequest.RegionId = regionId
describeContainerGroupsRequest.RegionId = configCommon.RegionId
containerGroupIds := append([]string{}, containerGroupId)
containerGroupIdsString, err := json.Marshal(containerGroupIds)
describeContainerGroupsRequest.ContainerGroupIds = string(containerGroupIdsString)
@ -125,8 +105,12 @@ func describeContainerGroup(containerGroupId string) eci.DescribeContainerGroups
return describeContainerGroupsResponse.ContainerGroups[0]
}
func describeContainerGroupMetric(containerGroupId string) {
var client *eci.Client
var configCommon common.PCMContainerConfig
configCommon, _ = common.ConfigGet("/home/Senna/GolandProjects/PCM/adaptor/container_api_adaptor/alibaba/eci/config.conf")
describeContainerGroupMetricRequest := eci.CreateDescribeContainerGroupMetricRequest()
describeContainerGroupMetricRequest.RegionId = regionId
describeContainerGroupMetricRequest.RegionId = configCommon.RegionId
describeContainerGroupMetricRequest.ContainerGroupId = containerGroupId
response, err := client.DescribeContainerGroupMetric(describeContainerGroupMetricRequest)
if err != nil {
@ -136,8 +120,12 @@ func describeContainerGroupMetric(containerGroupId string) {
fmt.Printf("Metrics for %s:%s\n", containerGroupId, string(data))
}
func describeMultiContainerGroupMetric(containerGroupIds []string) {
var client *eci.Client
var configCommon common.PCMContainerConfig
configCommon, _ = common.ConfigGet("/home/Senna/GolandProjects/PCM/adaptor/container_api_adaptor/alibaba/eci/config.conf")
describeContainerGroupMetricRequest := eci.CreateDescribeMultiContainerGroupMetricRequest()
describeContainerGroupMetricRequest.RegionId = regionId
describeContainerGroupMetricRequest.RegionId = configCommon.RegionId
data, _ := json.Marshal(containerGroupIds)
describeContainerGroupMetricRequest.ContainerGroupIds = string(data)
response, err := client.DescribeMultiContainerGroupMetric(describeContainerGroupMetricRequest)
@ -156,19 +144,19 @@ func Test() {
containerGroupIds <- containerGroupId
}
}()
go func() {
for containerGroupId := range containerGroupIds {
for i := 0; i < 10; i++ {
status := describeContainerGroup(containerGroupId).Status
if Running == ContainerGroupStatus(status) {
break
} else {
time.Sleep(5 * time.Second)
}
}
//deleteContainerGroupById(containerGroupId)
}
}()
//go func() {
// for containerGroupId := range containerGroupIds {
// for i := 0; i < 10; i++ {
// status := describeContainerGroup(containerGroupId).Status
// if Running == ContainerGroupStatus(status) {
// break
// } else {
// time.Sleep(5 * time.Second)
// }
// }
// //deleteContainerGroupById(containerGroupId)
// }
//}()
//阻塞等待异步执行完,不然会提前退出。
var input string
fmt.Println("waiting for input to finish:")

View File

@ -1,6 +1,8 @@
package main
import "PCM/adaptor/container_api_adaptor/alibaba/eci"
import (
"PCM/adaptor/container_api_adaptor/alibaba/eci"
)
func main() {
eci.Test()

View File

@ -0,0 +1,82 @@
package common
import (
"fmt"
"github.com/Unknwon/goconfig"
"os"
"strconv"
)
type PCMContainerConfig struct {
AccessKey string
SecretKey string
RegionId string
ContainerGroupName string
ContainerImage string
ContainerName string
CpuPod string
MemoryPod string
CpuContainer string
MemoryContainer string
CpuPodFloat float64
MemoryPodFloat float64
CpuContainerFloat float64
MemoryContainerFloat float64
NameSpace string
SecurityGroupId string
SubnetId string
VpcId string
}
func ConfigGet(configPath string) (PCMContainerConfig, error) {
var cfg *goconfig.ConfigFile
//"/home/Senna/GolandProjects/PCM/adaptor/container_api_adaptor/alibaba/eci/config.conf"
config, err := goconfig.LoadConfigFile(configPath) //加载配置文件
if err != nil {
fmt.Println("get config file error:", err.Error())
os.Exit(-1)
}
cfg = config
accessKey, _ := cfg.GetValue("container_conf", "access_key")
secretKey, _ := cfg.GetValue("container_conf", "secret_key")
regionId, _ := cfg.GetValue("container_conf", "region_id")
containerGroupName, _ := cfg.GetValue("container_conf", "container_group_name")
containerImage, _ := cfg.GetValue("container_conf", "container_image")
containerName, _ := cfg.GetValue("container_conf", "container_name")
cpuPod, _ := cfg.GetValue("container_conf", "cpu_pod")
memoryPod, _ := cfg.GetValue("container_conf", "memory_pod")
cpuContainer, _ := cfg.GetValue("container_conf", "cpu_container")
memoryContainer, _ := cfg.GetValue("container_conf", "memory_container")
cpuPodFloat, _ := strconv.ParseFloat(cpuPod, 64)
memoryPodFloat, _ := strconv.ParseFloat(memoryPod, 64)
cpuContainerFloat, _ := strconv.ParseFloat(cpuContainer, 64)
memoryContainerFloat, _ := strconv.ParseFloat(memoryContainer, 64)
nameSpace, _ := cfg.GetValue("container_conf", "namespace")
securityGroupId, _ := cfg.GetValue("container_conf", "security_group_id")
subnetId, _ := cfg.GetValue("container_conf", "subnet_id")
vpcId, _ := cfg.GetValue("container_conf", "vpc_id")
var configCommon = PCMContainerConfig{
AccessKey: accessKey,
SecretKey: secretKey,
RegionId: regionId,
ContainerGroupName: containerGroupName,
ContainerImage: containerImage,
ContainerName: containerName,
CpuPod: cpuPod,
MemoryPod: memoryPod,
CpuContainer: cpuContainer,
MemoryContainer: memoryContainer,
CpuPodFloat: cpuPodFloat,
MemoryPodFloat: memoryPodFloat,
CpuContainerFloat: cpuContainerFloat,
MemoryContainerFloat: memoryContainerFloat,
NameSpace: nameSpace,
SecurityGroupId: securityGroupId,
SubnetId: subnetId,
VpcId: vpcId,
}
return configCommon, nil
}

View File

@ -0,0 +1,36 @@
[container_conf]
#测试账号ak
access_key = ATQTIWUT9K66VRMMXKVY
secret_key = Wa0aixDVuhZOfDZGWvgIJQBHnyiDlGdgDn1Ai5Yy
#region
region_id=cn-north-4
#namespace(华为单独的必需参数)
namespace=test-k8s-client-namespace1
#容器实例名称(pod名)
container_group_name=pcm-test-huawei-pod
#镜像地址
container_image=library/nginx:stable-alpine-perl
#容器名称
container_name=pcm-test-huawei-container
##下面为非必需参数
#安全组ID
security_group_id=sg-bp17raa25u0wy0sb1qw5
#交换机ID
v_switch_id=vsw-bp176sh32kcq79d1uu8fp
#可用区
zone_id=cn-hangzhou-h
#容器实例名称(pod名)
container_group_name=pcm-test-huawei-pod
#重启策略
restart_policy=Never
#Pod拥有核数
cpu_pod=500m
#Pod拥有内存大小
memory_pod=1024Mi
#容器所需核数
cpu_container=500m
#容器所需内存大小
memory_container=1024Mi
#镜像拉取策略
image_pull_policy=IfNotPresent

View File

@ -1,7 +1,7 @@
package main
import (
"PCM/adaptor/container_api_adaptor/huawei/demos/namespace"
"PCM/adaptor/container_api_adaptor/huawei/demos/pod"
"PCM/adaptor/container_api_adaptor/huawei/pkg/auth/aksk"
"fmt"
)
@ -15,15 +15,15 @@ func main() {
panic(err)
}
//创建命名空间
fmt.Println("start to namespace created")
_, err = namespace.CreateNamespace(cs)
if err != nil {
panic(err)
}
fmt.Println("namespace created")
////创建命名空间
//fmt.Println("start to namespace created")
//_, err = namespace.CreateNamespace(cs)
//if err != nil {
// panic(err)
//}
//fmt.Println("namespace created")
//创建网络
////创建网络
//fmt.Println("start to network created")
//_, err = network.CreateNetwork(networkCs)
//if err != nil {
@ -39,12 +39,12 @@ func main() {
//fmt.Println("deployment created")
//创建pod
//fmt.Println("start to create pod")
//_, err = pod.CreatePod(cs)
//if err != nil {
// panic(err)
//}
//fmt.Println("pod created")
fmt.Println("start to create pod")
_, err = pod.CreatePod(cs)
if err != nil {
panic(err)
}
fmt.Println("pod created")
//删除deployment
//fmt.Println("start to delete deployment")

View File

@ -1,22 +1,27 @@
package pod
import (
"PCM/adaptor/container_api_adaptor/common"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
)
const (
app = "test-k8s-client-deployment"
podName = "test-k8s-client-pod"
namespace = "test-k8s-client-namespace1"
)
// CreateDeployment 创建Deployment
// API参考https://support.huaweicloud.com/api-cci/createAppsV1NamespacedDeployment.html
// CreatePod 创建Pod
func CreatePod(client *kubernetes.Clientset) (*corev1.Pod, error) {
var configCommon common.PCMContainerConfig
configCommon, _ = common.ConfigGet("/home/Senna/GolandProjects/PCM/adaptor/container_api_adaptor/huawei/cci/config.conf")
nameSpace := configCommon.NameSpace
podName := configCommon.ContainerGroupName
containerImage := configCommon.ContainerImage
containerName := configCommon.ContainerName
cpuPod := configCommon.CpuPod
memoryPod := configCommon.MemoryPod
cpuContainer := configCommon.CpuContainer
memoryContainer := configCommon.MemoryContainer
pod := corev1.Pod{
TypeMeta: metav1.TypeMeta{
APIVersion: "core/V1",
@ -31,16 +36,16 @@ func CreatePod(client *kubernetes.Clientset) (*corev1.Pod, error) {
RestartPolicy: corev1.RestartPolicyAlways,
Containers: []corev1.Container{
corev1.Container{
Name: "container-0",
Image: "library/nginx:stable-alpine-perl",
Name: containerName,
Image: containerImage,
Resources: corev1.ResourceRequirements{
Requests: map[corev1.ResourceName]resource.Quantity{
corev1.ResourceCPU: resource.MustParse("500m"),
corev1.ResourceMemory: resource.MustParse("1024Mi"),
corev1.ResourceCPU: resource.MustParse(cpuContainer),
corev1.ResourceMemory: resource.MustParse(memoryContainer),
},
Limits: map[corev1.ResourceName]resource.Quantity{
corev1.ResourceCPU: resource.MustParse("500m"),
corev1.ResourceMemory: resource.MustParse("1024Mi"),
corev1.ResourceCPU: resource.MustParse(cpuPod),
corev1.ResourceMemory: resource.MustParse(memoryPod),
},
},
},
@ -49,17 +54,28 @@ func CreatePod(client *kubernetes.Clientset) (*corev1.Pod, error) {
Status: corev1.PodStatus{},
}
return client.CoreV1().Pods(namespace).Create(&pod)
return client.CoreV1().Pods(nameSpace).Create(&pod)
}
// DeletePod 删除Pod
// API参考https://support.huaweicloud.com/api-cci/deleteAppsV1NamespacedDeployment.html
func DeletePod(client *kubernetes.Clientset) error {
return client.CoreV1().Pods(namespace).Delete(podName, &metav1.DeleteOptions{})
var configCommon common.PCMContainerConfig
configCommon, _ = common.ConfigGet("/home/Senna/GolandProjects/PCM/adaptor/container_api_adaptor/huawei/cci/config.conf")
nameSpace := configCommon.NameSpace
podName := configCommon.ContainerGroupName
return client.CoreV1().Pods(nameSpace).Delete(podName, &metav1.DeleteOptions{})
}
// GetPod 查询Pod
// API参考https://support.huaweicloud.com/api-cci/readAppsV1NamespacedDeployment.html
func GetPod(client *kubernetes.Clientset) (*corev1.Pod, error) {
return client.CoreV1().Pods(namespace).Get(podName, metav1.GetOptions{})
var configCommon common.PCMContainerConfig
configCommon, _ = common.ConfigGet("/home/Senna/GolandProjects/PCM/adaptor/container_api_adaptor/huawei/cci/config.conf")
nameSpace := configCommon.NameSpace
podName := configCommon.ContainerGroupName
return client.CoreV1().Pods(nameSpace).Get(podName, metav1.GetOptions{})
}

View File

@ -1,6 +1,7 @@
package aksk
import (
"PCM/adaptor/container_api_adaptor/common"
clientset "PCM/adaptor/container_api_adaptor/huawei/pkg/client/networking.cci.io/v1beta1"
"fmt"
"k8s.io/client-go/kubernetes"
@ -11,14 +12,15 @@ import (
const (
apiVersion = "client.authentication.k8s.io/v1beta1"
// 云容器实例 CCI参考https://developer.huaweicloud.com/endpoint
cciEndpoint = "https://cci.cn-north-4.myhuaweicloud.com"
//cciEndpoint = "https://cci.cn-north-4.myhuaweicloud.com"
// 统一身份认证服务 IAM参考https://developer.huaweicloud.com/endpoint
iamEndpoint = "https://iam.myhuaweicloud.com"
// 地区和终端节点参考https://developer.huaweicloud.com/endpoint
projectName = "cn-north-4"
//projectName = "cn-north-4"
// 获取AK/SK参考: https://support.huaweicloud.com/devg-cci/cci_kubectl_01.html#cci_kubectl_01__section17023744719
ak = "ATQTIWUT9K66VRMMXKVY"
sk = "Wa0aixDVuhZOfDZGWvgIJQBHnyiDlGdgDn1Ai5Yy"
//ak = "ATQTIWUT9K66VRMMXKVY"
//sk = "Wa0aixDVuhZOfDZGWvgIJQBHnyiDlGdgDn1Ai5Yy"
DomainId = "0a4e7f245680f3040fdfc011720e50a0" //账号ID可以在我的凭证获取
ProjectId = "0a62ffb0d48026c12fbfc011b8d23f0b" //项目ID可以在我的凭证获取
@ -32,32 +34,50 @@ const (
// NewClient 通过AK/SK认证创建Clientset
func NewClient() (*kubernetes.Clientset, error) {
config, err := clientcmd.BuildConfigFromFlags(cciEndpoint, "")
var configCommon common.PCMContainerConfig
configCommon, _ = common.ConfigGet("/home/Senna/GolandProjects/PCM/adaptor/container_api_adaptor/huawei/cci/config.conf")
ak := configCommon.AccessKey
sk := configCommon.SecretKey
regionId := configCommon.RegionId
cciEndpoint := "https://cci." + regionId + ".myhuaweicloud.com"
cciConfig, err := clientcmd.BuildConfigFromFlags(cciEndpoint, "")
if err != nil {
return nil, err
}
var optionArgs []string
optionArgs = append(optionArgs, fmt.Sprintf("--iam-endpoint=%s", iamEndpoint))
optionArgs = append(optionArgs, fmt.Sprintf("--project-name=%s", projectName))
optionArgs = append(optionArgs, fmt.Sprintf("--project-name=%s", regionId))
optionArgs = append(optionArgs, fmt.Sprintf("--ak=%s", ak))
optionArgs = append(optionArgs, fmt.Sprintf("--sk=%s", sk))
config.ExecProvider = &api.ExecConfig{
cciConfig.ExecProvider = &api.ExecConfig{
Command: "cci-iam-authenticator",
APIVersion: apiVersion,
Args: append([]string{"token"}, optionArgs...),
Env: make([]api.ExecEnvVar, 0),
}
return kubernetes.NewForConfig(config)
return kubernetes.NewForConfig(cciConfig)
}
func NewNetworkClient() (*clientset.Clientset, error) {
var configCommon common.PCMContainerConfig
configCommon, _ = common.ConfigGet("/home/Senna/GolandProjects/PCM/adaptor/container_api_adaptor/alibaba/eci/config.conf")
ak := configCommon.AccessKey
sk := configCommon.SecretKey
regionId := configCommon.RegionId
cciEndpoint := "https://cci." + regionId + ".myhuaweicloud.com"
config, err := clientcmd.BuildConfigFromFlags(cciEndpoint, "")
if err != nil {
return nil, err
}
var optionArgs []string
optionArgs = append(optionArgs, fmt.Sprintf("--iam-endpoint=%s", iamEndpoint))
optionArgs = append(optionArgs, fmt.Sprintf("--project-name=%s", projectName))
optionArgs = append(optionArgs, fmt.Sprintf("--project-name=%s", regionId))
optionArgs = append(optionArgs, fmt.Sprintf("--ak=%s", ak))
optionArgs = append(optionArgs, fmt.Sprintf("--sk=%s", sk))
config.ExecProvider = &api.ExecConfig{

View File

@ -1,44 +1,70 @@
package main
import (
"fmt"
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common"
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile"
tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525"
)
func main() {
credential := common.NewCredential(
"AKIDRefQxnhmuqTU1KRWFl58wQeCE0XoAeEZ",
"LUMVRmGj2kFrEahhZzA5pKvHNSMASntj",
)
cpf := profile.NewClientProfile()
cpf.HttpProfile.Endpoint = "tke.tencentcloudapi.com"
client, _ := tke.NewClient(credential, "ap-beijing", cpf)
var (
name = "sds"
vpcId = ""
subnetId = ""
memory float64 = 4.00
cpu float64 = 4.00
)
request := tke.NewCreateEKSContainerInstancesRequest()
request.EksCiName = &name
request.VpcId = &vpcId
request.SubnetId = &subnetId
request.Memory = &memory
request.Cpu = &cpu
response, err := client.CreateEKSContainerInstances(request)
if _, ok := err.(*errors.TencentCloudSDKError); ok {
fmt.Printf("An API error has returned: %s", err)
return
}
if err != nil {
panic(err)
}
fmt.Printf("%s", response.ToJsonString())
}
//
//import (
// "fmt"
// "github.com/Unknwon/goconfig"
// "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common"
// "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
// "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile"
// tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525"
// "os"
//)
//
//func main() {
// /**
// 认证
// */
//
// var accessKey string
// var secretKey string
// var cfg *goconfig.ConfigFile
// config, err := goconfig.LoadConfigFile("/home/Senna/GolandProjects/PCM/adaptor/container_api_adaptor/tencent/tke/config.conf") //加载配置文件
// if err != nil {
// fmt.Println("get config file error:", err.Error())
// os.Exit(-1)
// }
// cfg = config
// accessKey, _ = cfg.GetValue("tke_conf", "access_key")
// secretKey, _ = cfg.GetValue("tke_conf", "secret_key")
//
// credential := common.NewCredential(
// accessKey,
// secretKey,
// )
//
// cpf := profile.NewClientProfile()
// cpf.HttpProfile.Endpoint = "tke.tencentcloudapi.com"
// client, err := tke.NewClient(credential, "", cpf)
//
// var (
// name = "sds"
// vpcId = ""
// subnetId = ""
// memory float64 = 0.50
// cpu float64 = 0.50
// )
//
// container := make([]*tke.Container, 1)
// containerName, _ := cfg.GetValue("tke_conf", "containerName")
// containerImage, _ := cfg.GetValue("tke_conf", "containerImage")
// container[0].Name = &containerName
// container[0].Image = &containerImage
// request := tke.NewCreateEKSContainerInstancesRequest()
// request.EksCiName = &name
// request.VpcId = &vpcId
// request.SubnetId = &subnetId
// request.Memory = &memory
// request.Cpu = &cpu
// request.Containers = container
//
// response, err := client.CreateEKSContainerInstances(request)
// if _, ok := err.(*errors.TencentCloudSDKError); ok {
// fmt.Printf("An API error has returned: %s", err)
// return
// }
// if err != nil {
// panic(err)
// }
// fmt.Printf("%s", response.ToJsonString())
//}

View File

@ -0,0 +1,38 @@
[container_conf]
#测试账号ak
access_key = AKIDRefQxnhmuqTU1KRWFl58wQeCE0XoAeEZ
secret_key = LUMVRmGj2kFrEahhZzA5pKvHNSMASntj
#region
region_id=ap-beijing
#namespace(华为单独的必需参数)
namespace=test-k8s-client-namespace1
#容器实例名称(pod名)
container_group_name=pcm-test-tencent-pod
#镜像地址
container_image=library/nginx:stable-alpine-perl
#容器名称
container_name=pcm-test-tencent-container
##下面为非必需参数
#安全组ID
security_group_id=sg-owzbdinl
#交换机ID
v_switch_id=vsw-bp176sh32kcq79d1uu8fp
#可用区
zone_id=cn-hangzhou-h
#重启策略
restart_policy=Never
#Pod拥有核数
cpu_pod=1
#Pod拥有内存大小
memory_pod=2
#容器所需核数
cpu_container=1
#容器所需内存大小
memory_container=2
#镜像拉取策略
image_pull_policy=IfNotPresent
#子网ID
subnet_id=subnet-n4h73049
#VPC ID
vpc_id=vpc-e8hdbla8

View File

@ -0,0 +1,83 @@
package main
import (
pcmCommon "PCM/adaptor/container_api_adaptor/common"
"fmt"
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common"
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile"
tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525"
)
func main() {
var configCommon pcmCommon.PCMContainerConfig
configCommon, _ = pcmCommon.ConfigGet("/home/Senna/GolandProjects/PCM/adaptor/container_api_adaptor/tencent/tke/config.conf")
credential := common.NewCredential(
configCommon.AccessKey,
configCommon.SecretKey,
)
cpf := profile.NewClientProfile()
cpf.HttpProfile.Endpoint = "tke.tencentcloudapi.com"
client, _ := tke.NewClient(credential, configCommon.RegionId, cpf)
request := tke.NewCreateEKSContainerInstancesRequest()
eksCiName := configCommon.ContainerGroupName
var eksCiNamePt = &eksCiName
containerName := configCommon.ContainerName
var containerNamePt = &containerName
containerImage := configCommon.ContainerImage
var containerImagePt = &containerImage
containerCpu := configCommon.CpuContainerFloat
var containerCpuPt = &containerCpu
containerMemory := configCommon.MemoryContainerFloat
var containerMemoryPt = &containerMemory
eksCpu := configCommon.CpuPodFloat
var eksCpuPt = &eksCpu
eksMemory := configCommon.MemoryPodFloat
var eksMemoryPt = &eksMemory
securityGroupId := configCommon.SecurityGroupId
var securityGroupIdPt = &securityGroupId
securityGroupIdsPt := make([]*string, 1)
securityGroupIdsPt[0] = securityGroupIdPt
subNetId := configCommon.SubnetId
var subNetIdPt = &subNetId
vpcId := configCommon.VpcId
var vpcIdPt = &vpcId
request.EksCiName = eksCiNamePt
container := make([]*tke.Container, 1)
container[0] = new(tke.Container)
container[0].Name = containerNamePt
container[0].Image = containerImagePt
container[0].Cpu = containerCpuPt
container[0].Memory = containerMemoryPt
request.Containers = container
request.Cpu = eksCpuPt
request.Memory = eksMemoryPt
request.SecurityGroupIds = securityGroupIdsPt
request.SubnetId = subNetIdPt
request.VpcId = vpcIdPt
response, err := client.CreateEKSContainerInstances(request)
if _, ok := err.(*errors.TencentCloudSDKError); ok {
fmt.Printf("An API error has returned: %s", err)
return
}
if err != nil {
panic(err)
}
fmt.Printf("%s", response.ToJsonString())
}