2

使用 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 错误:创建期间可能未设置空命名空间

4

2 回答 2

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

于 2019-07-19T11:25:46.997 回答
0

集群中是否存在命名空间:“my-namespace”?如果没有,请删除该条目。pod 在默认命名空间中创建

于 2019-07-19T11:20:12.883 回答