web-dev-qa-db-fra.com

Mettez à jour k8s ConfigMap ou Secret sans supprimer celui qui existe

J'utilise K8S ConfigMap et Secret pour gérer nos propriétés. Ma conception est assez simple: elle conserve les fichiers de propriétés dans un dépôt Git et utilise un serveur de construction tel que Thoughtworks GO pour les déployer automatiquement en tant que ConfigMaps ou Secrets (à la condition de choix) sur mon cluster k8s.

Actuellement, j'ai trouvé que ce n'était pas vraiment efficace de devoir toujours supprimer les ConfigMap et Secret existants et créer le nouveau à mettre à jour comme ci-dessous:

  1. kubectl delete configmap foo

  2. kubectl create configmap foo --from-file foo.properties

Existe-t-il un moyen simple et agréable de faire plus d'une étape et plus efficace que de supprimer du courant? potentiellement, ce que je fais maintenant pourrait compromettre le conteneur qui utilise ces configmaps s'il tente de monter alors que l'ancien configmap est supprimé et que le nouveau n'a pas été créé.

Merci d'avance.

32
James Jiang

Vous pouvez obtenir yaml à partir de la commande kubectl create configmap et le rediriger vers kubectl replace, comme ceci:

kubectl create configmap foo --from-file foo.properties -o yaml --dry-run | kubectl replace -f -
67
Jordan Liggitt

kubectl replace est maintenant un moyen très pratique d’atteindre cet objectif.

kubectl replace -f some_spec.yaml Permet de mettre à jour une configMap complète (ou d'autres objets)

Voir la doc et les exemples directement dans https://kubernetes.io/docs/user-guide/kubectl/kubectl_replace/

Copié/collé depuis l'aide:

# Replace a pod using the data in pod.json.
kubectl replace -f ./pod.json

# Replace a pod based on the JSON passed into stdin.
cat pod.json | kubectl replace -f -

# Update a single-container pod's image version (tag) to v4
kubectl get pod mypod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | kubectl replace -f -

# Force replace, delete and then re-create the resource
kubectl replace --force -f ./pod.json
18

Pour de petits changements dans configMap, utilisez edit

kubectl edit configmap <cfg-name>

Ceci ouvrira configMap dans l'éditeur vi. Apportez les modifications et enregistrez-le.

0
deepdive