PCM/examples/pcm_huawei.go

198 lines
5.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package main
import (
corev1 "code.gitlink.org.cn/JCCE/PCM.git/adaptor/pod/server/kubernetes/api/core/v1"
"code.gitlink.org.cn/JCCE/PCM.git/adaptor/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 (
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-hwk8s01",
Namespace: "pcm",
Labels: map[string]string{"name": "test_api"},
},
Spec: corev1.PodSpec{
ProviderId: 0,
//ali:cn-hangzhou tc:ap-guangzhou hw: cn-east-3
RegionId: "cn-hangzhou",
RestartPolicy: corev1.RestartPolicyAlways,
Containers: []corev1.Container{
{
Name: "sdk-hwk8s01-container",
Image: "registry-vpc.cn-hangzhou.aliyuncs.com/eci_open/alpine:3.5",
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-test002",
Namespace: "pcm",
UID: "eci-bp123wba1qv9xymntd24",
Labels: map[string]string{"name": "test_api222"},
},
Spec: corev1.PodSpec{
ProviderId: 0,
//ali:cn-hangzhou tc:ap-guangzhou hw: cn-east-3
RegionId: "cn-hangzhou",
RestartPolicy: corev1.RestartPolicyAlways,
Containers: []corev1.Container{
{
Name: "pcm-sdk-huawei-contai",
Image: "nginx:latest",
Resources: corev1.ResourceRequirements{
Limits: map[corev1.ResourceName]resource.Quantity{
corev1.ResourceCPU: resource.MustParse("2000m"),
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) {
pod := corev1.Pod{
Spec: corev1.PodSpec{
ProviderId: 0,
//ali:cn-hangzhou tc:ap-guangzhou hw: cn-east-3
//RegionId: "ap-guangzhou",
},
}
podList, _ := client.CoreV1().Pods("pcm").List(context.TODO(), &pod, metav1.ListOptions{})
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")
}