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
}