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]

Хорошо, это пояснительное сообщение об ошибке, но, глядя на мой шаблон JSON, нужно просто создать оба указанных контейнера, верно? Что мне не хватает? (простите, пожалуйста, мое невежество.)

Я использую стандартную команду kubectl create -f для создания файла 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"
                    }
                }]
            }
        }
    }
}

person IAspireToBeGladOS    schedule 06.11.2017    source источник
comment
Используйте 1_. В вашем случае kubectl -c apiserver ...   -  person ichbinblau    schedule 06.11.2017
comment
Обычно рекомендуется опубликовать команду, которая вызвала сообщение об ошибке.   -  person svenwltr    schedule 06.11.2017


Ответы (2)


Если в модуле более 1 контейнера, вам необходимо указать имя конкретного контейнера.

в вашем случае есть модуль (postgres-operator-49202276-bjtf4), который имеет 2 контейнера (apiserver и postgres-operator). следующие команды предоставят журналы для конкретных контейнеров

kubectl logs deployment/postgres-operator -c apiserver


kubectl logs deployment/postgres-operator -c postgres-operator
person Suresh Vishnoi    schedule 06.11.2017
comment
очень хорошо отметить, что проверка журналов контейнеров является здесь ключевым моментом. Сообщение об ошибке от многоконтейнерного модуля вводит в заблуждение. Когда я впервые столкнулся с этой ошибкой, я сосредоточился только на метаданных модуля и именах контейнеров, но проблема была в атрибуте команды контейнера. - person MichaelHuelsen; 22.01.2021

Имя контейнера должно быть указано, если модуль имеет более одного контейнера (как указано в ответах выше).

Чтобы узнать все контейнеры внутри контейнера, мы можем использовать:

kubectl -n get pods ‹POD_NAME› -o jsonpath = {.. image}

person sunil yaduvanshi    schedule 06.04.2021