2016-04-28 3 views
12

Ich habe eine Bereitstellung für meine Anwendung definiert:Wie kann ich eine Bereitstellung bearbeiten, ohne die Datei manuell zu ändern?

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 

Nun, wenn ich 2,0-3,0 meine App Bild aktualisieren will, muss ich dies tun:

  1. $ kubectl edit deployment/myapp-deployment
  2. vim geöffnet ist. Ich ändere die Bildversion von 2.0 zu 3.0 und speichere.

Wie kann es automatisiert werden? Gibt es eine Möglichkeit, einen Befehl einfach auszuführen? Etwas wie:

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

Ich dachte Kubernetes API REST verwenden, aber ich verstehe nicht, die documentation.

Antwort

13

Sie könnten es über die REST-API mit der PATCH verb tun. Ein einfacherer Weg ist jedoch die Verwendung von kubectl patch. Der folgende Befehl aktualisiert App-tag:

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

Nach the documentation sollte YAML-Format als auch akzeptiert werden. Siehe jedoch Kubernetes issue #458 (und insbesondere this comment), was auf ein Problem hinweisen könnte.

+0

Danke, ich erhalte einen Fehler, aber ich werde eine andere Frage stellen –

+1

Um ehrlich zu sein, hatte ich nicht die Zeit, den Befehl selbst noch auszuprobieren. Werde es später versuchen und zu dir zurückkommen! –

+0

Vielen Dank, D –

3

(ich würde dies als Kommentar geschrieben haben, wenn ich genug Ruf hatte)

Ja, pro http://kubernetes.io/docs/user-guide/kubectl/kubectl_patch/ beide JSON und YAML-Formate akzeptiert werden.

Aber ich sehe, dass alle Beispiele dort JSON-Format verwenden. Abgelegt in https://github.com/kubernetes/kubernetes.github.io/issues/458, um ein YAML-Formatbeispiel hinzuzufügen.

+1

Ich habe meine Antwort mit Links zur Dokumentation und dem von Ihnen erstellten Problem geändert. Vielen Dank! –

10

Es gibt einen set image Befehl, der in einfachen Fällen nützlich sein kann

aktualisieren vorhandenen Container Bild (er) von Ressourcen. Mögliche Ressourcen enthalten (Groß- und Kleinschreibung): pod (po), replicationcontroller (rc), Deployment (Bereitstellung), daemonset (ds), job, replicaset (rs)

kubectl set image (-f FILENAME | TYPE NAME) CONTAINER_NAME_1=CONTAINER_IMAGE_1 ... CONTAINER_NAME_N=CONTAINER_IMAGE_N

http://kubernetes.io/docs/user-guide/kubectl/kubectl_set_image/

$ kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1 
deployment "nginx-deployment" image updated 

http://kubernetes.io/docs/user-guide/deployments/

1

ich habe vor kurzem gebaut, ein Werkzeug Einsatz Updates zu automatisieren w Henne neue Bilder verfügbar sind, funktioniert es mit Kubernetes und Helm: aktivieren großen Versions-Updates, weitere Informationen in der Readme

https://github.com/rusenask/keel

Sie haben nur wie keel.sh/policy=major Ihre Einsätze mit Keel Politik beschriften. Funktioniert ähnlich mit Helm, keine zusätzliche CLI/UI erforderlich.

Verwandte Themen