8
votes

Kubectl Export est obsolète. Toute alternative

Je recherche un moyen d'exporter un fichier yaml à partir d'un composant déployé mais sans les informations spécifiques au cluster.

kubectl get MYOBJECT --export -o yaml > my.yaml

mais comme "export" est désormais obsolète (depuis la version 1.14 et devrait normalement disparaître en 1.18 (je ne l'ai pas trouvé dans le changelog), quelle serait une alternative?

Merci


0 commentaires

6 Réponses :


4
votes

Il n'y a pas de moyen cohérent de le faire car il n'y a pas de directives générales sur les valeurs par défaut et autres nettoyages de données en direct. C'est pourquoi il est obsolète. Vous devez conserver vos fichiers source dans git ou similaire.


0 commentaires

5
votes

Actuellement, la seule option est de faire -o yaml ou -o json et de supprimer les champs inutiles


1 commentaires

En effet, faire kubectl get MYOBJECT -o yaml > my.yaml au lieu de kubectl get MYOBJECT --export -o yaml > my.yaml semble produire presque le même résultat à l'exception de quelques champs supplémentaires qui ne devraient pas faire de mal.



4
votes

L'utilisation de JQ fait l'affaire.

kubectl get secret <secretname> -ojson --export

produit exactement le même JSON que

kubectl get secret <secretname> -ojson | jq 'del(.metadata.namespace,.metadata.resourceVersion,.metadata.uid) | .metadata.creationTimestamp=null'


0 commentaires

6
votes

Si vous souhaitez utiliser l'entrée / sortie YAML, vous pouvez utiliser yq .

Cela a fait l'affaire pour moi, ajoutez ou supprimez des filtres selon vos besoins:

kubectl get secret "my_secret" -n "my_namespace" --context "my_context" -o yaml \
    | yq d - 'metadata.resourceVersion' \
    | yq d - 'metadata.uid' \
    | yq d - 'metadata.annotations' \
    | yq d - 'metadata.creationTimestamp' \
    | yq d - 'metadata.selfLink'


2 commentaires

pourrait tout aussi bien supprimer toutes les métadonnées et écrire une nouvelle valeur


ajoutez cette ligne: `` `| yq d - 'metadata.managedFields' `` ``



3
votes

Une autre option consiste à utiliser le champ d'annotation kubectl.kubernetes.io/last-applied-configuration qui contient la configuration appliquée initiale de la ressource sans champs auto-générés.

Exemple:

kubectl get <resource kind> <resource name> -o yaml | \
yq r - 'metadata.annotations."kubectl.kubernetes.io/last-applied-configuration"'


0 commentaires

0
votes

Sur la base de l'entrée ci-dessus, j'ai créé un court-métrage sur notre projet fubectl: https://github.com/kubermatic/fubectl/pull/58

j'espère que cela aide aussi les autres:

kget-ex RESOURCE > export.yaml


0 commentaires