Получить YAML для развернутых сервисов Kubernetes?

Я пытаюсь развернуть свое приложение в Kubernetes, работающем в Google Container Engine.

Приложение можно найти по адресу: https://github.com/Industrial/docker-znc.

Dockerfile встроен в изображение в реестре контейнеров Google.

Я развернул приложение в Kubernetes через кнопку+. У меня нет YAML для этого.

Я вставил Секрет в Kubernetes для файла PEM, требуемого приложением.

  1. Как получить YAML для Deployment, Service и Pod, созданного Kubernetes, заполнив форму?
  2. Как я могу получить секрет в мой Pod для использования?

Ответ 1

Чтобы получить yaml для развертывания (service, pod, secret и т.д.):

kubectl get deploy deploymentname -o yaml --export

Ответ 2

для второго вопроса о секретности, это из документации k8s. см. https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets для получения дополнительной информации.

  • Создайте секрет или используйте существующий. Несколько контейнеров могут ссылаться на тот же секрет.
  • Измените свое определение Pod, чтобы добавить том в spec.volumes []. Назовите том что угодно и укажите поле spec.volumes []. Secret.secretName, равное имени секретного объекта.
  • Добавьте spec.containers []. volumeMounts [] в каждый контейнер, которому нужен секрет. Укажите spec.containers []. VolumeMounts []. ReadOnly = true и spec.containers []. VolumeMounts []. MountPath для имени неиспользуемого каталога, в котором вы хотели бы, чтобы секреты отображались.
  • Измените образ и/или командную строку, чтобы программа искала файлы в этом каталоге. Каждый ключ в секретной карте данных становится именем файла под mountPath.

Я использовал это, и он отлично работает.

Ответ 3

Как получить YAML для Deployment, Service и Pod, созданного Kubernetes, заполнив форму?

kubectl get deployment,service,pod yourapp -o yaml --export

Отвечая на вопрос @Sinaesthetic:

Любая идея, как это сделать для полного кластера (все развертывания)?

kubectl get deploy --all-namespaces -o yaml --export

Проблема этого метода в том, что экспорт не включает пространство имен. Поэтому, если вы хотите экспортировать много ресурсов одновременно, я рекомендую делать это для каждого пространства имен:

kubectl get deploy,sts,svc,configmap,secret -n default -o yaml --export > default.yaml

К сожалению, kubernetes по- прежнему не поддерживает команду get all, поэтому вам нужно вручную указать тип ресурсов, которые вы хотите экспортировать. Вы можете получить список типов ресурсов с

kubectl api-resources

Ответ 4

  • Как упомянуто выше, "--export" является одним из вариантов получения манифеста, соответствующего объектам kubeernetes.
  • Но "--export" считается ошибочным, и есть предложение отказаться от него
  • В настоящее время лучшим вариантом является сделать "-o yaml" или "-o json" и удалить ненужные поля
  • Ожидается, что основное отличие состоит в том, что "--export" удаляет специфичные для кластера настройки (например, IP-адрес службы кластера службы k8s). Но это оказалось противоречивым в этом отношении

Ответ 5

Используйте эту команду, чтобы получить формат yaml вашего сервиса

kubectl get service servicename -o yaml

Вы также можете поместить его в какой-нибудь файл

kubectl get service servicename -o yaml >service.yaml

Ответ 6

kubectl -n <namespace> get <resource type> <resource Name> -o yaml 

С помощью приведенной выше команды любой ресурс, определенный в Kubernetes, можно экспортировать в формате YAML.

Ответ 7

Если вам нужно просмотреть и отредактировать файл, используйте:

kubectl edit service servicename