198 lines
5.9 KiB
Go
198 lines
5.9 KiB
Go
package main
|
||
|
||
import (
|
||
corev1 "code.gitlink.org.cn/JCCE/PCM.git/adaptor/pod/server/kubernetes/api/core/v1"
|
||
"code.gitlink.org.cn/JCCE/PCM.git/adaptor/pod/server/kubernetes/client-go/kubernetes"
|
||
"context"
|
||
"fmt"
|
||
"github.com/pkg/errors"
|
||
"k8s.io/apimachinery/pkg/api/resource"
|
||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||
"k8s.io/client-go/tools/clientcmd"
|
||
"k8s.io/client-go/tools/clientcmd/api"
|
||
)
|
||
|
||
const (
|
||
apiVersion = "client.authentication.k8s.io/v1beta1"
|
||
// 云容器实例 CCI,参考https://developer.huaweicloud.com/endpoint
|
||
cciEndpoint = "https://cci.cn-east-3.myhuaweicloud.com"
|
||
// 统一身份认证服务 IAM,参考https://developer.huaweicloud.com/endpoint
|
||
iamEndpoint = "https://iam.cn-east-3.myhuaweicloud.com"
|
||
// 地区和终端节点,参考https://developer.huaweicloud.com/endpoint
|
||
projectName = "cn-east-3"
|
||
// 获取AK/SK参考: https://support.huaweicloud.com/devg-cci/cci_kubectl_01.html#cci_kubectl_01__section17023744719
|
||
ak = "ATQTIWUT9K66VRMMXKVY"
|
||
sk = "Wa0aixDVuhZOfDZGWvgIJQBHnyiDlGdgDn1Ai5Yy"
|
||
)
|
||
|
||
// NewClient 通过AK/SK认证创建Clientset
|
||
func NewClient() (*kubernetes.Clientset, error) {
|
||
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("--token-only=false"))
|
||
optionArgs = append(optionArgs, fmt.Sprintf("--ak=%s", ak))
|
||
optionArgs = append(optionArgs, fmt.Sprintf("--sk=%s", sk))
|
||
config.ExecProvider = &api.ExecConfig{
|
||
Command: "cci-iam-authenticator",
|
||
APIVersion: apiVersion,
|
||
Args: append([]string{"token"}, optionArgs...),
|
||
Env: make([]api.ExecEnvVar, 0),
|
||
}
|
||
return kubernetes.NewForConfig(config)
|
||
}
|
||
|
||
func CreatePod(client *kubernetes.Clientset) (*corev1.Pod, error) {
|
||
cli, _ := NewClient()
|
||
|
||
pod := corev1.Pod{
|
||
TypeMeta: metav1.TypeMeta{
|
||
APIVersion: "core/V1",
|
||
Kind: "Pod",
|
||
},
|
||
ObjectMeta: metav1.ObjectMeta{
|
||
Name: "hw-sdk-hwk8s01",
|
||
Namespace: "pcm",
|
||
Labels: map[string]string{"name": "test_api"},
|
||
},
|
||
Spec: corev1.PodSpec{
|
||
ProviderId: 0,
|
||
//ali:cn-hangzhou tc:ap-guangzhou hw: cn-east-3
|
||
RegionId: "cn-hangzhou",
|
||
RestartPolicy: corev1.RestartPolicyAlways,
|
||
Containers: []corev1.Container{
|
||
{
|
||
Name: "sdk-hwk8s01-container",
|
||
Image: "registry-vpc.cn-hangzhou.aliyuncs.com/eci_open/alpine:3.5",
|
||
Resources: corev1.ResourceRequirements{
|
||
Limits: map[corev1.ResourceName]resource.Quantity{
|
||
corev1.ResourceCPU: resource.MustParse("1000m"),
|
||
corev1.ResourceMemory: resource.MustParse("2Gi"),
|
||
},
|
||
},
|
||
},
|
||
},
|
||
},
|
||
Status: corev1.PodStatus{},
|
||
}
|
||
|
||
resp, err := cli.CoreV1().Pods("pcm").Create(context.TODO(), &pod, metav1.CreateOptions{})
|
||
if err != nil {
|
||
return nil, errors.Wrap(err, "Huaweiyun CreatePod error")
|
||
}
|
||
|
||
return &corev1.Pod{
|
||
TypeMeta: resp.TypeMeta,
|
||
ObjectMeta: resp.ObjectMeta,
|
||
Spec: resp.Spec,
|
||
Status: resp.Status,
|
||
}, nil
|
||
}
|
||
|
||
// UpdatePod 更新Pod
|
||
func UpdatePod(client *kubernetes.Clientset) error {
|
||
pod := corev1.Pod{
|
||
TypeMeta: metav1.TypeMeta{
|
||
APIVersion: "core/V1",
|
||
Kind: "Pod",
|
||
},
|
||
ObjectMeta: metav1.ObjectMeta{
|
||
Name: "hw-sdk-test002",
|
||
Namespace: "pcm",
|
||
UID: "eci-bp123wba1qv9xymntd24",
|
||
Labels: map[string]string{"name": "test_api222"},
|
||
},
|
||
Spec: corev1.PodSpec{
|
||
ProviderId: 0,
|
||
//ali:cn-hangzhou tc:ap-guangzhou hw: cn-east-3
|
||
RegionId: "cn-hangzhou",
|
||
RestartPolicy: corev1.RestartPolicyAlways,
|
||
Containers: []corev1.Container{
|
||
{
|
||
Name: "pcm-sdk-huawei-contai",
|
||
Image: "nginx:latest",
|
||
Resources: corev1.ResourceRequirements{
|
||
Limits: map[corev1.ResourceName]resource.Quantity{
|
||
corev1.ResourceCPU: resource.MustParse("2000m"),
|
||
corev1.ResourceMemory: resource.MustParse("1Gi"),
|
||
},
|
||
},
|
||
},
|
||
},
|
||
},
|
||
Status: corev1.PodStatus{},
|
||
}
|
||
|
||
client.CoreV1().Pods("pcm").Update(context.TODO(), &pod, metav1.UpdateOptions{})
|
||
return nil
|
||
}
|
||
|
||
// DeletePod 删除Pod
|
||
func DeletePod(client *kubernetes.Clientset) error {
|
||
return client.CoreV1().Pods("pcm").Delete(context.TODO(), "podName", metav1.DeleteOptions{})
|
||
}
|
||
|
||
// ListPod 查询Pod
|
||
func ListPod(client *kubernetes.Clientset) (*corev1.PodList, error) {
|
||
pod := corev1.Pod{
|
||
Spec: corev1.PodSpec{
|
||
ProviderId: 0,
|
||
//ali:cn-hangzhou tc:ap-guangzhou hw: cn-east-3
|
||
//RegionId: "ap-guangzhou",
|
||
},
|
||
}
|
||
|
||
podList, _ := client.CoreV1().Pods("pcm").List(context.TODO(), &pod, metav1.ListOptions{})
|
||
return podList, nil
|
||
}
|
||
func main() {
|
||
// 有多种认证方式,具体请参考
|
||
//《使用cci-iam-authenticator进行认证并创建client》,https://support.huaweicloud.com/sdkreference-cci/cci_09_0004.html
|
||
cciConfig, err := clientcmd.BuildConfigFromFlags(cciEndpoint, "")
|
||
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("--ak=%s", ak))
|
||
optionArgs = append(optionArgs, fmt.Sprintf("--sk=%s", sk))
|
||
cciConfig.ExecProvider = &api.ExecConfig{
|
||
Command: "cci-iam-authenticator",
|
||
APIVersion: apiVersion,
|
||
Args: append([]string{"token"}, optionArgs...),
|
||
Env: make([]api.ExecEnvVar, 0),
|
||
}
|
||
cs, err := kubernetes.NewForConfig(cciConfig)
|
||
|
||
//fmt.Println("start to create Pod")
|
||
//_, err = CreatePod(cs)
|
||
//if err != nil {
|
||
// panic(err)
|
||
//}
|
||
//fmt.Println("Pod created")
|
||
|
||
//fmt.Println("start to get Pod details")
|
||
//_, err = ListPod(cs)
|
||
//if err != nil {
|
||
// panic(err)
|
||
//}
|
||
//fmt.Println("Pod details got")
|
||
|
||
fmt.Println("start to update Pod")
|
||
err = UpdatePod(cs)
|
||
if err != nil {
|
||
panic(err)
|
||
}
|
||
fmt.Println("Pod updated")
|
||
//
|
||
//fmt.Println("start to delete Pod")
|
||
//err = DeletePod(cs)
|
||
//if err != nil {
|
||
// panic(err)
|
||
//}
|
||
//fmt.Println("Pod deleted")
|
||
|
||
}
|