Отримати YAML для розгорнутих послуг Kubernetes?


116

Я намагаюся розгорнути свою програму на Kubernetes, що працює в Google Container Engine .

Додаток можна знайти за адресою: https://github.com/Industrial/docker-znc .

Файл Docker вбудований у зображення в реєстрі контейнерів Google .

Я розгорнув програму в Kubernetes за допомогою кнопки +. У мене немає YAML для цього.

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

  1. Як я можу отримати YAML для розгортання , Обслуговування і Pod , створений Kubernetes шляхом заповнення в формі?
  2. Як отримати секрет у свій Pod для використання?

Відповіді:


163

Щоб отримати yaml для розгортання (служба, під, секрет тощо):

kubectl get deploy deploymentname -o yaml --export

3
будь-яка ідея, як це зробити для повного кластера (усі розгортання)? Ідея полягає, звичайно, в тому, щоб створити дзеркальне середовище з точно такими ж послугами.
Сінестетичний

1
@Sinaesthetic, експорт списків поки що не підтримується і, здається, не скоро. Ймовірно, вам знадобиться сценарій, щоб перерахувати всі джерела, а потім прокрутити ці ресурси, щоб створити свій список. github.com/kubernetes/kubernetes/issues/…
mababin

23
Станом на Kubernetes 1.14 --exportзастарілий; дивіться тут . Ви можете використовувати get -o yamlбез --export, хоча це включає інформацію про поточний стан об'єкта, а також декларативну конфігурацію, необхідну для (повторної) конфігурації об'єкта.
Джош Келлі,

Ще потрібно видалити деякий поточний стан із yaml, згенерованого "-o yaml", наприклад, spec.clusterIPі metadata.resourceVersionв службі.
Тоні Лі,

18

Як отримати YAML для розгортання, обслуговування та підсистеми, створеного 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 все ще не підтримує команду true 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

10

Те саме питання обговорюється на сторінці випусків kubernetes GitHub і користувач "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

Останній сценарій не включає обліковий запис служби.


6

Синтаксис для завантаження ямлів із кубернетів

kubectl get [resource type] -n [namespace] [resource Name] -o yaml > [New file name]

Створіть файл yaml із запущеного pod:

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

Створіть файл реплік yaml із запущеного pod:

  1. kubectl get rs -n nginx -o yaml > latestReplicaSet.yaml

Створіть файл розгортання yaml із запущеного pod:

  1. kubectl get deploy -n nginx -o yaml > latestDeployement.yaml

4

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

  1. Створіть секрет або скористайтеся наявним. Кілька стручків можуть посилатися на один і той же секрет.
  2. Змініть визначення Pod, щоб додати том у спек. Томи []. Назвіть том будь-яким чином, і мати 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). Але це виявляється суперечливим у цьому відношенні

4

Використовуйте цю команду, щоб отримати формат 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

0

Є лише незначна відмінність від відповіді @Janos Lenart!

kubectl get deploy deploymentname -o yaml > outputFile.yaml зроблю

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.