PCM/examples/pod/huawei.go

144 lines
3.9 KiB
Go

package main
import (
"context"
"fmt"
"github.com/pkg/errors"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/clientcmd"
"k8s.io/client-go/tools/clientcmd/api"
)
const (
apiVersion = "client.authentication.k8s.io/v1beta1"
cciEndpoint = "https://cci.cn-east-3.myhuaweicloud.com"
iamEndpoint = "https://iam.cn-east-3.myhuaweicloud.com"
projectName = "cn-east-3"
ak = ""
sk = ""
)
// NewClientOrigin 通过AK/SK认证创建ClientSet
func NewClientOrigin() (*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 CreatePodOrigin(client *kubernetes.Clientset) (*corev1.Pod, 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_api"},
},
Spec: corev1.PodSpec{
RestartPolicy: corev1.RestartPolicyAlways,
Containers: []corev1.Container{
{
Name: "pcm-sdk-huawei-container",
Image: "library/nginx:stable-alpine-perl",
Resources: corev1.ResourceRequirements{
Limits: map[corev1.ResourceName]resource.Quantity{
corev1.ResourceCPU: resource.MustParse("500m"),
corev1.ResourceMemory: resource.MustParse("1Gi"),
},
},
},
},
},
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
}
// UpdatePodOrigin 删除Pod
func UpdatePodOrigin(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: "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{},
}
client.CoreV1().Pods("pcm").Update(context.TODO(), &pod, metav1.UpdateOptions{})
return nil
}
// DeletePodOrigin 删除Pod
func DeletePodOrigin(client *kubernetes.Clientset) error {
return client.CoreV1().Pods("pcm").Delete(context.TODO(), "hw-sdk-test", metav1.DeleteOptions{})
}
// ListPodOrigin 查询Pod
func ListPodOrigin(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() {
cs, _ := NewClientOrigin()
//CreatePodOrigin(cs)
//ListPodOrigin(cs)
//UpdatePodOrigin(cs)
DeletePodOrigin(cs)
}