Ответ 1
Я сам столкнулся с этой проблемой сегодня, когда пытался создать секреты и использовать их в своем файле yaml для определения модуля. Было бы kubectl get secrets
если вы проверяете выходные данные kubectl get secrets
и kubectl get configmaps
если используете какой-либо из них, и проверяете, правильно ли указано количество требуемых элементов данных.
Я понял, что в моем случае проблема заключалась в том, что когда мы создавали секреты с несколькими элементами данных: выходные данные kubectl get secrets <secret_name>
содержали только 1 элемент данных, в то время как я указал 2 элемента в моем secret_name_definition.yaml
. Это из-за разницы между использованием kubectl create -f secret_name_definition.yaml
против kubectl create secret <secret_name> --from-file=secret_name_definition.yaml
Разница в том, что в случае с первым все все элементы перечисленные в разделе данных yaml будут рассматриваться как пары ключ-значение, и, следовательно, количество элементов будет отображаться как правильный вывод при выполнении запроса с использованием kubectl get secrets secret_name
но в случае последнего только первый элемент данных в secret_name_definition.yaml
будет оцениваться для пар ключ-значение, и, следовательно, выходные данные kubectl get secrets secret_name
будут показывать только 1 элемент данных, и это происходит, когда мы видим ошибку "CreateContainerConfigError".
Обратите внимание, что эта проблема не возникнет, если мы используем kubectl create secret <secret_name>
с параметрами --from-literal=
потому что тогда нам придется использовать префикс --from-literal=
для каждого значения ключа пара, которую мы хотим определить.
Аналогично, если мы используем --from-file=
, нам все равно придется указывать префикс несколько раз, по одному для каждой пары ключ-значение, но только для того, чтобы мы могли передать необработанное значение ключа, когда мы use --from-literal
и закодированная форма (т.е. значением ключа теперь будет echo raw_value | base64
этого значения в качестве значения при использовании --from-file
.
Например, допустим, что ключами являются "имя пользователя" и "пароль", если при создании секрета с помощью команды kubectl create -f secret_definition.yaml
нам необходимо иметь значения для "имени пользователя" и "пароля", закодированные, как указано в Раздел "Создать секрет" https://kubernetes.io/docs/tasks/inject-data-application/distribute-credentials-secure/
Я хотел бы выделить раздел " Примечание: " в https://kubernetes.io/docs/tasks/inject-data-application/distribute-credentials-secure/ Также https://kubernetes.io/docs/понятия/конфигурация/секрет/ имеет очень четкое объяснение создания секретов
Также убедитесь, что для deploy.yaml теперь есть правильное определение для этого контейнера:
env:
- name: DB_HOST
value: 127.0.0.1
# These secrets are required to start the pod.
# [START cloudsql_secrets]
- name: DB_USER
valueFrom:
secretKeyRef:
name: cloudsql-db-credentials
key: username
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: cloudsql-db-credentials
key: password
# [END cloudsql_secrets]
Как цитировали другие, " kubectl describe pods pod_name
" помогло бы, но в моем случае я только понял, что контейнер не создавался в первую очередь, и вывод " kubectl logs pod_name -c container_name
" не сильно помог.