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


104

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

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

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

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

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

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

Ответы:


155

Чтобы получить yaml для развертывания (службы, модуля, секрета и т. Д.):

kubectl get deploy deploymentname -o yaml --export

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

1
@Sinaesthetic, Экспорт списков пока не поддерживается и, похоже, не скоро появится. Вам, вероятно, понадобится скрипт, чтобы перечислить все ресурсы, а затем циклически просмотреть эти ресурсы, чтобы создать свой список. github.com/kubernetes/kubernetes/issues/…
mababin

17
Начиная с Kubernetes 1.14, --exportне рекомендуется; см. здесь . Вы можете использовать get -o yamlбез него --export, хотя это включает информацию о текущем состоянии объекта, а также декларативную конфигурацию, необходимую для (повторной) настройки объекта.
Джош Келли

Тем не менее необходимо удалить некоторое текущее состояние из YAML , порожденного «-o YAML», например, spec.clusterIPи metadata.resourceVersionв обслуживании.
Тони Ли

16

Как получить 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

2
kubectl get $(kubectl api-resources | awk '{print $1}' | tail -n +2 | tr '\n' ',' | sed s/,\$//) -o yaml > manifest.yaml
mkingston,

9

Та же проблема обсуждается на странице проблем GitHub kubernetes. и пользователь «alahijani» создал сценарий bash, который экспортирует весь yaml и записывает их в отдельные файлы и папки.

Поскольку этот вопрос хорошо оценивается в Google и поскольку я нашел это решение очень хорошим, я представляю его здесь.

Bash-скрипт, экспортирующий yaml в подпапки:

for n in $(kubectl get -o=name pvc,configmap,serviceaccount,secret,ingress,service,deployment,statefulset,hpa,job,cronjob)
do
    mkdir -p $(dirname $n)
    kubectl get -o=yaml --export $n > $n.yaml
done

Другой пользователь acondrat сделал сценарий, который не использует каталоги, что позволяет легко сделать его kubectl apply -fпозже.

Bash-скрипт, экспортирующий yaml в текущую папку:

for n in $(kubectl get -o=name pvc,configmap,ingress,service,secret,deployment,statefulset,hpa,job,cronjob | grep -v 'secret/default-token')
do
    kubectl get -o=yaml --export $n > $(dirname $n)_$(basename $n).yaml
done

Последний сценарий не включает учетную запись службы.


5

Синтаксис для загрузки yaml'ов из kubernetes

kubectl get [тип ресурса] -n [пространство имен] [имя ресурса] -o yaml> [новое имя файла]

Создайте файл yaml из запущенного модуля:

  1. kubectl get po -n nginx nginx-deployment-755cfc7dcf-5s7j8 -o yaml> podDetail.yaml

Создайте yaml-файл репликации из запущенного модуля:

  1. kubectl получить rs -n nginx -o yaml> latestReplicaSet.yaml

Создайте yaml-файл развертывания из запущенного модуля:

  1. kubectl получить развертывание -n nginx -o yaml> latestDeployement.yaml

4

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

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

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


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

2

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

kubectl get service servicename -n <namespace> -o yaml

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

kubectl get service servicename -n <namespace> -o yaml > service.yaml


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

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


0

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

kubectl edit service servicename


0
  1. Вы можете получить yaml-файлы ресурсов с помощью этой команды

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

  2. Чтобы сохранить секрет в своей капсуле,

используйте что-то вроде этого

env
- valueFrom
    secretKeyRef:
      name: secret_name
      key: key_name

или

envFrom
- secretRef:
    name: secret_name

 

0

Я знаю, что это слишком старо, чтобы отвечать, но, надеюсь, кому-то это поможет.

Мы можем попробовать команду ниже, чтобы получить вид экспорта из всего пространства имен -

kubectl get <kind> --all-namespaces --export -o yaml
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.