Kubernetes/kubectl - "必须指定容器名称"但似乎是这样吗?

IAs*_*dOS 20 json kubernetes kubectl

我正在调试来自kubectl的日志输出,该输出指出:

Error from server (BadRequest): a container name must be specified for pod postgres-operator-49202276-bjtf4, choose one of: [apiserver postgres-operator]
Run Code Online (Sandbox Code Playgroud)

好的,这是一个解释性的错误消息,但是看看我的JSON模板,它应该只创建指定的两个容器,对吗?我错过了什么?(请原谅我的无知.)

我只使用标准的kubectl create -f命令在shell脚本中创建JSON文件.JSON部署文件如下:

{
    "apiVersion": "extensions/v1beta1",
    "kind": "Deployment",
    "metadata": {
        "name": "postgres-operator"
    },
    "spec": {
        "replicas": 1,
        "template": {
            "metadata": {
                "labels": {
                    "name": "postgres-operator"
                }
            },
            "spec": {
                "containers": [{
                    "name": "apiserver",
                    "image": "$CCP_IMAGE_PREFIX/apiserver:$CO_IMAGE_TAG",
                    "imagePullPolicy": "IfNotPresent",
                    "env": [{
                        "name": "DEBUG",
                        "value": "true"
                    }],
                    "volumeMounts": [{
                        "mountPath": "/config",
                        "name": "apiserver-conf",
                        "readOnly": true
                    }, {
                        "mountPath": "/operator-conf",
                        "name": "operator-conf",
                        "readOnly": true
                    }]
                }, {
                    "name": "postgres-operator",
                    "image": "$CCP_IMAGE_PREFIX/postgres-operator:$CO_IMAGE_TAG",
                    "imagePullPolicy": "IfNotPresent",
                    "env": [{
                        "name": "DEBUG",
                        "value": "true"
                    }, {
                        "name": "NAMESPACE",
                        "valueFrom": {
                            "fieldRef": {
                                "fieldPath": "metadata.namespace"
                            }
                        }
                    }, {
                        "name": "MY_POD_NAME",
                        "valueFrom": {
                            "fieldRef": {
                                "fieldPath": "metadata.name"
                            }
                        }
                    }],
                    "volumeMounts": [{
                        "mountPath": "/operator-conf",
                        "name": "operator-conf",
                        "readOnly": true
                    }]
                }],
                "volumes": [{
                    "name": "operator-conf",
                    "configMap": {
                        "name": "operator-conf"
                    }
                }, {
                    "name": "apiserver-conf",
                    "configMap": {
                        "name": "apiserver-conf"
                    }
                }]
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Sur*_*noi 29

如果pod有超过1个容器,则需要提供特定容器的名称.

在你的情况下,有一个pod(postgres-operator-49202276-bjtf4)有2个容器(apiserver和postgres-operator).以下命令将提供特定容器的日志

Kubectl记录部署/ postgres-operator -c apiserver

Kubectl记录部署/ postgres-operator -c postgres-operator


小智 5

如果 Pod 有多个容器(如上面的答案中所述),则必须给出容器名称。

要了解 pod 内的所有容器,我们可以使用:

kubectl -n <NAMESPACE> get pods <POD_NAME> -o jsonpath="{..image}"
Run Code Online (Sandbox Code Playgroud)

  • 您还可以使用“kubectl logs pod/XXXX --all-containers”查看此 pod 中**所有容器**的日志。 (5认同)