使用Kubernetes client-go以编程方式创建pod会给我以下错误:
an empty namespace may not be set during creation
从此示例开始: https://github.com/feiskyer/go-examples/blob/master/kubernetes/pod-create/pod.go
#go
handler := clientset.CoreV1().Pods("").PodInterface
pod := apiv1.Pod{
TypeMeta: metav1.TypeMeta{
Kind: "Pod",
APIVersion: "v1",
},
ObjectMeta: metav1.ObjectMeta{
Name: "my-pod",
Namespace: "my-namespace",
},
Spec: apiv1.PodSpec{
Containers: []apiv1.Container{
{
Name: "my-container",
Image: "my-container",
},
},
},
}
result, err := handler.Create(pod)
期望:已创建Pod。
实际:创建失败并显示k8s错误:在创建过程中可能未设置空名称空间
答案 0 :(得分:2)
要解决上述问题,我必须在以下行中指定名称空间:
handler := clientset.CoreV1().Pods("my-namespace").PodInterface
此问题已解决,因为不允许在命名空间之外创建Pod。因此,即使在pod对象中提供了名称空间,也必须将其指定为“标记”。
因此,它应该类似于以下内容(请参见命令中的--namespace标志):
#my-pod-file-definition.yaml
----------------------------
apiVersion: v1
kind: Pod
metadata:
name: my-pod
namespace: my-namespace
spec:
containers:
- name: my-container
image: my-image
kubectl apply -f my-pod-file-definition.yaml --namespace=my-namespace
答案 1 :(得分:0)
集群中是否存在命名空间:“ my-namespace”?如果不是,请删除该条目。在默认名称空间中创建了pod