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.

huawei.go 4.0 kB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. package main
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/pkg/errors"
  6. corev1 "k8s.io/api/core/v1"
  7. "k8s.io/apimachinery/pkg/api/resource"
  8. metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
  9. "k8s.io/client-go/kubernetes"
  10. "k8s.io/client-go/tools/clientcmd"
  11. "k8s.io/client-go/tools/clientcmd/api"
  12. )
  13. const (
  14. apiVersion = "client.authentication.k8s.io/v1beta1"
  15. cciEndpoint = "https://cci.cn-east-3.myhuaweicloud.com"
  16. iamEndpoint = "https://iam.cn-east-3.myhuaweicloud.com"
  17. projectName = "cn-east-3"
  18. ak = ""
  19. sk = ""
  20. )
  21. // NewClientOrigin 通过AK/SK认证创建ClientSet
  22. func NewClientOrigin() (*kubernetes.Clientset, error) {
  23. config, err := clientcmd.BuildConfigFromFlags(cciEndpoint, "")
  24. if err != nil {
  25. return nil, err
  26. }
  27. var optionArgs []string
  28. optionArgs = append(optionArgs, fmt.Sprintf("--iam-endpoint=%s", iamEndpoint))
  29. optionArgs = append(optionArgs, fmt.Sprintf("--project-name=%s", projectName))
  30. optionArgs = append(optionArgs, fmt.Sprintf("--token-only=false"))
  31. optionArgs = append(optionArgs, fmt.Sprintf("--ak=%s", ak))
  32. optionArgs = append(optionArgs, fmt.Sprintf("--sk=%s", sk))
  33. config.ExecProvider = &api.ExecConfig{
  34. Command: "cci-iam-authenticator",
  35. APIVersion: apiVersion,
  36. Args: append([]string{"token"}, optionArgs...),
  37. Env: make([]api.ExecEnvVar, 0),
  38. }
  39. return kubernetes.NewForConfig(config)
  40. }
  41. func CreatePodOrigin(client *kubernetes.Clientset) (*corev1.Pod, error) {
  42. pod := corev1.Pod{
  43. TypeMeta: metav1.TypeMeta{
  44. APIVersion: "core/V1",
  45. Kind: "Pod",
  46. },
  47. ObjectMeta: metav1.ObjectMeta{
  48. Name: "hw-sdk-test",
  49. Namespace: "pcm",
  50. Labels: map[string]string{"name": "test_api"},
  51. },
  52. Spec: corev1.PodSpec{
  53. RestartPolicy: corev1.RestartPolicyAlways,
  54. Containers: []corev1.Container{
  55. {
  56. Name: "pcm-sdk-huawei-container",
  57. Image: "library/nginx:stable-alpine-perl",
  58. Resources: corev1.ResourceRequirements{
  59. Limits: map[corev1.ResourceName]resource.Quantity{
  60. corev1.ResourceCPU: resource.MustParse("500m"),
  61. corev1.ResourceMemory: resource.MustParse("1Gi"),
  62. },
  63. },
  64. },
  65. },
  66. },
  67. Status: corev1.PodStatus{},
  68. }
  69. resp, err := client.CoreV1().Pods("pcm").Create(context.TODO(), &pod, metav1.CreateOptions{})
  70. if err != nil {
  71. return nil, errors.Wrap(err, "Huaweiyun CreatePod error")
  72. }
  73. return &corev1.Pod{
  74. TypeMeta: resp.TypeMeta,
  75. ObjectMeta: resp.ObjectMeta,
  76. Spec: resp.Spec,
  77. Status: resp.Status,
  78. }, nil
  79. }
  80. // UpdatePodOrigin 删除Pod
  81. func UpdatePodOrigin(client *kubernetes.Clientset) error {
  82. pod := corev1.Pod{
  83. TypeMeta: metav1.TypeMeta{
  84. APIVersion: "core/V1",
  85. Kind: "Pod",
  86. },
  87. ObjectMeta: metav1.ObjectMeta{
  88. Name: "hw-sdk-test",
  89. Namespace: "pcm",
  90. Labels: map[string]string{"name": "test_api222"},
  91. },
  92. Spec: corev1.PodSpec{
  93. RestartPolicy: corev1.RestartPolicyAlways,
  94. Containers: []corev1.Container{
  95. {
  96. Name: "pcm-sdk-huawei-container2",
  97. Image: "library/nginx:stable-alpine-perl",
  98. Resources: corev1.ResourceRequirements{
  99. Limits: map[corev1.ResourceName]resource.Quantity{
  100. corev1.ResourceCPU: resource.MustParse("1000m"),
  101. corev1.ResourceMemory: resource.MustParse("2Gi"),
  102. },
  103. },
  104. },
  105. },
  106. },
  107. Status: corev1.PodStatus{},
  108. }
  109. client.CoreV1().Pods("pcm").Update(context.TODO(), &pod, metav1.UpdateOptions{})
  110. return nil
  111. }
  112. // DeletePodOrigin 删除Pod
  113. func DeletePodOrigin(client *kubernetes.Clientset) error {
  114. return client.CoreV1().Pods("pcm").Delete(context.TODO(), "hw-sdk-test", metav1.DeleteOptions{})
  115. }
  116. // ListPodOrigin 查询Pod
  117. func ListPodOrigin(client *kubernetes.Clientset) (*corev1.PodList, error) {
  118. podList, _ := client.CoreV1().Pods("pcm").List(context.TODO(), metav1.ListOptions{})
  119. println(podList.Items[0].Name)
  120. return podList, nil
  121. }
  122. func main() {
  123. cs, _ := NewClientOrigin()
  124. //CreatePodOrigin(cs)
  125. //ListPodOrigin(cs)
  126. //UpdatePodOrigin(cs)
  127. DeletePodOrigin(cs)
  128. }

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.