如何在 Kubernetes Go-Client 中从运行的容器内部创建命名空间

8

我有一个Kubernetes集群并且有一个正在运行的容器(X)。我想从这个容器创建一个新的名称空间,在这个名称空间中部署一个pod并生成容器(Y)。我知道Kubernetes提供REST API。然而,我正在探索使用goClient来执行相同的操作,但不确定如何使用名称空间创建API。

2个回答

10
import (
    "github.com/golang/glog"
    "k8s.io/client-go/kubernetes"
    "k8s.io/kubernetes/pkg/api/v1"
    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

clientConfig, err := config.createClientConfigFromFile()
if err != nil {
        glog.Fatalf("Failed to create a ClientConfig: %v. Exiting.", err)
}

clientset, err := clientset.NewForConfig(clientConfig)
if err != nil {
        glog.Fatalf("Failed to create a ClientSet: %v. Exiting.", err)
}

nsSpec := &v1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: ns}}

_, err := clientset.Core().Namespaces().Create(nsSpec)
}

createClientConfigFromFile() 应该在 Pod 中运行时查找服务帐户令牌。如果您已启用授权,则需要确保 Pod 的服务帐户被授权创建命名空间。 - Eric Tune
5
Core已经被弃用,请更新为在回答中使用CoreV1 - Kosy Anyanwu

8
这个对我来说可行:
clientset, err := kubernetes.NewForConfig(config)
if err != nil {
    panic(err)
}

nsName := &corev1.Namespace{
    ObjectMeta: metav1.ObjectMeta{
        Name: "my-new-namespace",
    },
}

clientset.CoreV1().Namespaces().Create(context.Background(), nsName, metav1.CreateOptions{})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接