144 lines
3.9 KiB
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)
|
|
|
|
}
|