web-dev-qa-db-fra.com

Comment puis-je éditer un déploiement sans modifier le fichier manuellement?

J'ai défini un déploiement pour mon application:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: myapp-deployment
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: 172.20.34.206:5000/myapp_img:2.0
        ports:
        - containerPort: 8080

Maintenant, si je veux mettre à jour l'image de mon application 2.0 à 3.0, je fais ceci:

  1. $ kubectl edit deployment/myapp-deployment
  2. vim est ouvert. Je change la version de l'image de 2.0 à 3.0 et enregistre.

Comment peut-il être automatisé? Existe-t-il un moyen de le faire en exécutant une commande? Quelque chose comme:

$ kubectl edit deployment/myapp-deployment --image=172.20.34.206:5000/myapp:img:3.0

Je pensais utiliser l'API Kubernetes REST mais je ne comprends pas le documentation

20
Héctor

Vous pouvez le faire via l’API REST en utilisant le verbe PATCH . Cependant, un moyen plus simple consiste à utiliser kubectl patch . La commande suivante met à jour la balise de votre application:

kubectl patch deployment myapp-deployment -p \
  '{"spec":{"template":{"spec":{"containers":[{"name":"myapp","image":"172.20.34.206:5000/myapp:img:3.0"}]}}}}'

Selon la documentation , le format YAML devrait également être accepté. Voir Le numéro 458 de Kubernetes quoique (et en particulier ce commentaire ), ce qui peut laisser supposer un problème.

31
Timo Reimann

(J'aurais posté cela comme un commentaire si j'avais assez de réputation)

Oui, conformément à http://kubernetes.io/docs/user-guide/kubectl/kubectl_patch/ les formats JSON et YAML sont acceptés.

Mais je vois que tous les exemples utilisent le format JSON ……………. Filed https://github.com/kubernetes/kubernetes.github.io/issues/458 pour ajouter un exemple de format YAML.

4
Nikhil Jindal

J'ai récemment construit un outil pour automatiser les mises à jour de déploiement lorsque de nouvelles images sont disponibles. Il fonctionne avec Kubernetes et Helm:

https://github.com/rusenask/keel

Vous devez simplement étiqueter vos déploiements avec la stratégie Keel comme keel.sh/policy=major pour activer les mises à jour majeures de version, plus d'informations dans le fichier Lisez-moi. Fonctionne de la même manière avec Helm, aucune autre interface CLI/UI n’est requise. 

1
Deforciant