forked from JointCloud/pcm-coordinator
create pod on ali,huawei,tencent with a common config file
This commit is contained in:
parent
25fbab97af
commit
edf3569c9d
|
@ -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"}}
|
|
@ -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), ®ionInfo)
|
||||
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:")
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
}
|
|
@ -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
|
|
@ -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")
|
||||
|
|
|
@ -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{})
|
||||
}
|
||||
|
|
|
@ -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{
|
||||
|
|
|
@ -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())
|
||||
//}
|
||||
|
|
|
@ -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
|
|
@ -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())
|
||||
}
|
Loading…
Reference in New Issue