希曼日记

k8s.io

到集群查看kubeconfig # K8s生成kubeconfig访问集群

示例, 获取k8s命名空间

package main

import (
	"context"
	"fmt"
	v1 "k8s.io/api/core/v1"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/client-go/kubernetes"
	"k8s.io/client-go/tools/clientcmd"
	"time"
)

func main() {
	// 创建一个具有超时的上下文
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel() // 确保在不再需要时取消上下文,以释放资源

	// 使用kubeconfig文件初始化client
	config, err := clientcmd.BuildConfigFromFlags("https://www.abc.cn", "./kubeconfig")
	if err != nil {
		panic(err.Error())

	}
	client, err := kubernetes.NewForConfig(config)
	if err != nil {
		panic(err.Error())
	}

	// 获取指定命名空间
	namespaces, err := GetNamespace(client, ctx, "default")
	if err != nil {
		panic(err)
	}
	fmt.Println("namespaces", namespaces)

	pod := &v1.Pod{
		ObjectMeta: metav1.ObjectMeta{
			Name: "mypod",
		},
		Spec: v1.PodSpec{
			Containers: []v1.Container{
				{
					Name:  "nginx",
					Image: "nginx:1.14.2",
				},
			},
		},
	}
	_, err = client.CoreV1().Pods("default").Create(context.TODO(), pod, metav1.CreateOptions{})

}

func GetNamespace(client *kubernetes.Clientset, ctx context.Context, namespace string) ([]string, error) {
	var namespaces []string
	pods, err := client.CoreV1().Pods(namespace).List(ctx, metav1.ListOptions{})
	if err != nil {
		return nil, err
	}
	for _, pod := range pods.Items {
		namespaces = append(namespaces, pod.Name)
	}

	return namespaces, nil
}