150 votes

Obtenir YAML pour les services Kubernetes déployés ?

J'essaie de déployer mon application sur Kubernetes en cours d'exécution Google Container Moteur .

L'application est disponible à l'adresse suivante : https://github.com/Industrial/docker-znc .

El Dockerfile est intégré dans une image sur Registre des conteneurs de Google .

J'ai déployé l'application dans Kubernetes via le bouton +. Je n'ai pas le YAML pour cela.

J'ai inséré un Secret sur Kubernetes pour le fichier PEM requis par l'application.

  1. Comment puis-je obtenir le YAML pour le fichier Déploiement , Service y Pod créé par Kubernetes en remplissant le formulaire ?
  2. Comment puis-je obtenir le Secret dans mon Pod pour l'usage ?

0 votes

Vous pouvez suivre cette session de laboratoire sur la façon d'exporter le yaml des services k8s déployés. youtu.be/Wc9T4tdcsr0

192voto

ocsi Points 1

Pour obtenir le yaml d'un déploiement (service, pod, secret, etc) :

kubectl get deploy deploymentname -o yaml

3 votes

Une idée de comment le faire pour le cluster complet (tous les déploiements) ? L'idée étant, bien sûr, de créer des environnements miroirs avec exactement les mêmes services.

1 votes

@Sinaesthetic, les exportations de listes ne sont pas prises en charge jusqu'à présent et ne semblent pas être prévues pour bientôt. Vous aurez probablement besoin d'un script pour lister toutes les ressources, puis faire un cycle à travers ces ressources pour construire votre liste. github.com/kubernetes/kubernetes/issues/

29 votes

A partir de Kubernetes 1.14, --export est déprécié ; voir aquí . Vous pouvez utiliser get -o yaml sans --export mais qui comprend des informations sur l'état actuel de l'objet, ainsi que la configuration déclarative nécessaire pour (re)configurer l'objet.

21voto

Victor Val Points 612

Comment puis-je obtenir le YAML pour le déploiement, le service et le pod créés par Kubernetes en remplissant le formulaire ?

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

Je réponds à la question de @Sinaesthetic :

une idée de comment le faire pour le cluster complet (tous les déploiements) ?

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

Le problème avec cette méthode est que exporter n'inclut pas l'espace de nom. Donc si vous voulez exporter de nombreuses ressources en même temps, je recommande de le faire par espace de nom :

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

Malheureusement, Kubernetes ne supporte toujours pas un vrai obtenir tous Vous devez donc lister manuellement le type de ressources que vous souhaitez exporter. Vous pouvez obtenir une liste des types de ressources avec

kubectl api-resources

2 votes

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

14voto

thephper Points 254

La même question est abordée à la page des problèmes de kubernetes sur GitHub et l'utilisateur "alahijani" a fait un bash script qui exporte tous les yaml et les écrit dans des fichiers et dossiers uniques.

Comme cette question est bien classée sur Google et que j'ai trouvé cette solution très bonne, je la représente ici.

Bash script exportant yaml vers des sous-dossiers :

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

Un autre utilisateur "acondrat" a réalisé un script qui n'utilise pas les répertoires, ce qui rend facile la réalisation d'une kubectl apply -f plus tard.

Bash script exportant yaml dans le dossier courant :

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

Le dernier script ne comprend pas de compte de service.

13voto

Soumya Points 246

Syntaxe pour télécharger les yaml's de kubernetes

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

Créer le fichier yaml à partir du pod en cours d'exécution :

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

Créer un fichier yaml de réplication à partir d'un pod en cours d'exécution :

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

Créer le fichier yaml de déploiement à partir du pod en cours d'exécution :

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

6voto

Grant Points 361

Maintenant que --export est déprécié, pour obtenir la sortie de vos ressources dans le format "original" (juste nettoyé, sans aucune information sur l'état actuel de l'objet (métadonnées inutiles dans ce cas)) vous pouvez faire ce qui suit en utilisant yq v4.x :

kubectl get <resource> -n <namespace> <resource-name> -o yaml \
  | yq eval 'del(.metadata.resourceVersion, .metadata.uid, .metadata.annotations, .metadata.creationTimestamp, .metadata.selfLink, .metadata.managedFields)' -

0 votes

J'aime bien celui-ci, juste une note : yq n'est pas habituellement sur OS.

0 votes

C'est une bien meilleure solution.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X