|
- package main
-
- import (
- "context"
- "fmt"
- "github.com/pkg/errors"
- corev1 "gitlink.org.cn/JCCE/PCM/adaptor/pod/server/kubernetes/api/core/v1"
- "gitlink.org.cn/JCCE/PCM/adaptor/pod/server/kubernetes/client-go/kubernetes"
- "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-hwk8s",
- Namespace: "pcm",
- Labels: map[string]string{"name": "test_api"},
- },
- Spec: corev1.PodSpec{
- ProviderId: 1,
- //ali:cn-hangzhou tc:ap-guangzhou hw: cn-east-3
- RegionId: "ap-guangzhou",
- RestartPolicy: corev1.RestartPolicyAlways,
- Containers: []corev1.Container{
- {
- Name: "sdk-hwk8s-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 := 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-test",
- Namespace: "pcm",
- Labels: map[string]string{"name": "test_api222"},
- },
- Spec: corev1.PodSpec{
- RestartPolicy: corev1.RestartPolicyAlways,
- Containers: []corev1.Container{
- {
- Name: "pcm-sdk-huawei-container2",
- 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{},
- }
-
- 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) {
-
- podList, _ := client.CoreV1().Pods("pcm").List(context.TODO(), metav1.ListOptions{})
- println(podList.Items[0].Name)
- 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")
-
- }
|