You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

pcm_huawei.go 5.0 kB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. package main
  2. import (
  3. corev1 "code.gitlink.org.cn/JCCE/PCM.git/adaptor/pod/server/kubernetes/api/core/v1"
  4. "code.gitlink.org.cn/JCCE/PCM.git/adaptor/pod/server/kubernetes/client-go/kubernetes"
  5. "context"
  6. "fmt"
  7. "github.com/pkg/errors"
  8. "k8s.io/apimachinery/pkg/api/resource"
  9. metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
  10. "k8s.io/client-go/tools/clientcmd"
  11. "k8s.io/client-go/tools/clientcmd/api"
  12. )
  13. const (
  14. apiVersionPCM = "client.authentication.k8s.io/v1beta1"
  15. cciEndpointPCM = "https://cci.cn-east-3.myhuaweicloud.com"
  16. iamEndpointPCM = "https://iam.cn-east-3.myhuaweicloud.com"
  17. projectNamePCM = "cn-east-3"
  18. akPCM = ""
  19. skPCM = ""
  20. )
  21. // NewClient 通过AK/SK认证创建ClientSet
  22. func NewClient() (*kubernetes.Clientset, error) {
  23. config, err := clientcmd.BuildConfigFromFlags(cciEndpointPCM, "")
  24. if err != nil {
  25. return nil, err
  26. }
  27. var optionArgs []string
  28. optionArgs = append(optionArgs, fmt.Sprintf("--iam-endpoint=%s", iamEndpointPCM))
  29. optionArgs = append(optionArgs, fmt.Sprintf("--project-name=%s", projectNamePCM))
  30. optionArgs = append(optionArgs, fmt.Sprintf("--token-only=false"))
  31. optionArgs = append(optionArgs, fmt.Sprintf("--ak=%s", akPCM))
  32. optionArgs = append(optionArgs, fmt.Sprintf("--sk=%s", skPCM))
  33. config.ExecProvider = &api.ExecConfig{
  34. Command: "cci-iam-authenticator",
  35. APIVersion: apiVersionPCM,
  36. Args: append([]string{"token"}, optionArgs...),
  37. Env: make([]api.ExecEnvVar, 0),
  38. }
  39. return kubernetes.NewForConfig(config)
  40. }
  41. // CreatePod 创建Pod
  42. func CreatePod(client *kubernetes.Clientset) (*corev1.Pod, error) {
  43. pod := corev1.Pod{
  44. TypeMeta: metav1.TypeMeta{
  45. APIVersion: "core/V1",
  46. Kind: "Pod",
  47. },
  48. ObjectMeta: metav1.ObjectMeta{
  49. Name: "hw-sdk-hwk8s02",
  50. Namespace: "pcm",
  51. Labels: map[string]string{"name": "test_api"},
  52. },
  53. Spec: corev1.PodSpec{
  54. /****************PCM params******************/
  55. //0: ali, 1: tencent, 2: huawei,3: k8s
  56. ProviderId: 3,
  57. //ali:cn-hangzhou tc:ap-guangzhou hw: cn-east-3
  58. RegionId: "cn-east-3",
  59. /****************PCM params******************/
  60. RestartPolicy: corev1.RestartPolicyAlways,
  61. Containers: []corev1.Container{
  62. {
  63. Name: "sdk-hwk8s01-container",
  64. Image: "library/nginx:stable-alpine-perl",
  65. Resources: corev1.ResourceRequirements{
  66. Limits: map[corev1.ResourceName]resource.Quantity{
  67. corev1.ResourceCPU: resource.MustParse("1000m"),
  68. corev1.ResourceMemory: resource.MustParse("2Gi"),
  69. },
  70. },
  71. },
  72. },
  73. },
  74. Status: corev1.PodStatus{},
  75. }
  76. resp, err := client.CoreV1().Pods("pcm").Create(context.TODO(), &pod, metav1.CreateOptions{})
  77. if err != nil {
  78. return nil, errors.Wrap(err, "Huaweiyun CreatePod error")
  79. }
  80. return &corev1.Pod{
  81. TypeMeta: resp.TypeMeta,
  82. ObjectMeta: resp.ObjectMeta,
  83. Spec: resp.Spec,
  84. Status: resp.Status,
  85. }, nil
  86. }
  87. // ListPod 查询Pod
  88. func ListPod(client *kubernetes.Clientset) (*corev1.PodList, error) {
  89. pod := corev1.Pod{
  90. Spec: corev1.PodSpec{
  91. /****************PCM params******************/
  92. //0: ali, 1: tencent, 2: huawei,3: k8s
  93. ProviderId: 3,
  94. //ali:cn-hangzhou tc:ap-guangzhou hw: cn-east-3
  95. //RegionId: "cn-east-3",
  96. /****************PCM params******************/
  97. },
  98. }
  99. podList, _ := client.CoreV1().Pods("pcm").List(context.TODO(), &pod, metav1.ListOptions{})
  100. println(podList.Items[0].Spec.Containers[0].Name)
  101. return podList, nil
  102. }
  103. // UpdatePod 更新Pod
  104. func UpdatePod(client *kubernetes.Clientset) error {
  105. pod := corev1.Pod{
  106. TypeMeta: metav1.TypeMeta{
  107. APIVersion: "core/V1",
  108. Kind: "Pod",
  109. },
  110. ObjectMeta: metav1.ObjectMeta{
  111. Name: "hw-sdk-hwk8s01",
  112. Namespace: "pcm",
  113. UID: "hw-sdk-hwk8s01",
  114. Labels: map[string]string{"name": "test_api222"},
  115. },
  116. Spec: corev1.PodSpec{
  117. /****************PCM params******************/
  118. //0: ali, 1: tencent, 2: huawei,3: k8s
  119. ProviderId: 2,
  120. //ali:cn-hangzhou tc:ap-guangzhou hw: cn-east-3
  121. RegionId: "cn-east-3",
  122. /****************PCM params******************/
  123. RestartPolicy: corev1.RestartPolicyNever,
  124. Containers: []corev1.Container{
  125. {
  126. Name: "pcm-sdk-huawei-conta22i",
  127. Image: "nginx:latest",
  128. Resources: corev1.ResourceRequirements{
  129. Limits: map[corev1.ResourceName]resource.Quantity{
  130. corev1.ResourceCPU: resource.MustParse("500m"),
  131. corev1.ResourceMemory: resource.MustParse("1Gi"),
  132. },
  133. },
  134. },
  135. },
  136. },
  137. Status: corev1.PodStatus{},
  138. }
  139. _, err := client.CoreV1().Pods("pcm").Update(context.TODO(), &pod, metav1.UpdateOptions{})
  140. if err != nil {
  141. return err
  142. }
  143. return nil
  144. }
  145. // DeletePod 删除Pod
  146. func DeletePod(client *kubernetes.Clientset) error {
  147. //多出5个参数 namespace providerId regionName accountName pcmId
  148. return client.CoreV1().Pods("pcm").Delete(context.TODO(), "pcm", 3, "cn-east-3",
  149. "", "hw-sdk-hwk8s02", metav1.DeleteOptions{})
  150. }
  151. func main() {
  152. cs, _ := NewClient()
  153. //CreatePod(cs)
  154. //ListPod(cs)
  155. //UpdatePod(cs)
  156. DeletePod(cs)
  157. }

PCM is positioned as Software stack over Cloud, aiming to build the standards and ecology of heterogeneous cloud collaboration for JCC in a non intrusive and autonomous peer-to-peer manner.