|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- 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)
-
- }
|