package main import ( corev1 "code.gitlink.org.cn/JCCE/PCM.git/adaptor/pcm_pod/server/kubernetes/api/core/v1" "code.gitlink.org.cn/JCCE/PCM.git/adaptor/pcm_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 ( apiVersionPCM = "client.authentication.k8s.io/v1beta1" cciEndpointPCM = "https://cci.cn-east-3.myhuaweicloud.com" iamEndpointPCM = "https://iam.cn-east-3.myhuaweicloud.com" projectNamePCM = "cn-east-3" akPCM = "" skPCM = "" ) // NewClient 通过AK/SK认证创建ClientSet func NewClient() (*kubernetes.Clientset, error) { config, err := clientcmd.BuildConfigFromFlags(cciEndpointPCM, "") if err != nil { return nil, err } var optionArgs []string optionArgs = append(optionArgs, fmt.Sprintf("--iam-endpoint=%s", iamEndpointPCM)) optionArgs = append(optionArgs, fmt.Sprintf("--project-name=%s", projectNamePCM)) optionArgs = append(optionArgs, fmt.Sprintf("--token-only=false")) optionArgs = append(optionArgs, fmt.Sprintf("--ak=%s", akPCM)) optionArgs = append(optionArgs, fmt.Sprintf("--sk=%s", skPCM)) config.ExecProvider = &api.ExecConfig{ Command: "cci-iam-authenticator", APIVersion: apiVersionPCM, Args: append([]string{"token"}, optionArgs...), Env: make([]api.ExecEnvVar, 0), } return kubernetes.NewForConfig(config) } // CreatePod 创建Pod func CreatePod(client *kubernetes.Clientset) (*corev1.Pod, error) { pod := corev1.Pod{ TypeMeta: metav1.TypeMeta{ APIVersion: "core/V1", Kind: "Pod", }, ObjectMeta: metav1.ObjectMeta{ Name: "hw-sdk-hwk8s02", Namespace: "pcm", Labels: map[string]string{"name": "test_api"}, }, Spec: corev1.PodSpec{ /****************PCM params******************/ //0: ali, 1: tencent, 2: huawei,3: k8s ProviderId: 3, //ali:cn-hangzhou tc:ap-guangzhou hw: cn-east-3 RegionId: "cn-east-3", /****************PCM params******************/ RestartPolicy: corev1.RestartPolicyAlways, Containers: []corev1.Container{ { Name: "sdk-hwk8s01-container", Image: "library/nginx:stable-alpine-perl", Resources: corev1.ResourceRequirements{ Limits: map[corev1.ResourceName]resource.Quantity{ corev1.ResourceCPU: resource.MustParse("1000m"), corev1.ResourceMemory: resource.MustParse("2Gi"), }, }, }, }, }, Status: corev1.PodStatus{}, } resp, err := client.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 } // ListPod 查询Pod func ListPod(client *kubernetes.Clientset) (*corev1.PodList, error) { pod := corev1.Pod{ Spec: corev1.PodSpec{ /****************PCM params******************/ //0: ali, 1: tencent, 2: huawei,3: k8s ProviderId: 3, //ali:cn-hangzhou tc:ap-guangzhou hw: cn-east-3 //RegionId: "cn-east-3", /****************PCM params******************/ }, } podList, _ := client.CoreV1().Pods("pcm").List(context.TODO(), &pod, metav1.ListOptions{}) println(podList.Items[0].Spec.Containers[0].Name) return podList, 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-hwk8s01", Namespace: "pcm", UID: "hw-sdk-hwk8s01", Labels: map[string]string{"name": "test_api222"}, }, Spec: corev1.PodSpec{ /****************PCM params******************/ //0: ali, 1: tencent, 2: huawei,3: k8s ProviderId: 2, //ali:cn-hangzhou tc:ap-guangzhou hw: cn-east-3 RegionId: "cn-east-3", /****************PCM params******************/ RestartPolicy: corev1.RestartPolicyNever, Containers: []corev1.Container{ { Name: "pcm-sdk-huawei-conta22i", Image: "nginx:latest", Resources: corev1.ResourceRequirements{ Limits: map[corev1.ResourceName]resource.Quantity{ corev1.ResourceCPU: resource.MustParse("500m"), corev1.ResourceMemory: resource.MustParse("1Gi"), }, }, }, }, }, Status: corev1.PodStatus{}, } _, err := client.CoreV1().Pods("pcm").Update(context.TODO(), &pod, metav1.UpdateOptions{}) if err != nil { return err } return nil } // DeletePod 删除Pod func DeletePod(client *kubernetes.Clientset) error { //多出5个参数 namespace providerId regionName accountName pcmId return client.CoreV1().Pods("pcm").Delete(context.TODO(), "pcm", 3, "cn-east-3", "", "hw-sdk-hwk8s02", metav1.DeleteOptions{}) } func main() { cs, _ := NewClient() //CreatePod(cs) //ListPod(cs) //UpdatePod(cs) DeletePod(cs) }