it-swarm.com.de

Wie kann ich eine Bereitstellung bearbeiten, ohne die Datei manuell zu ändern?

Ich habe eine Bereitstellung für meine App definiert:

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

Wenn ich jetzt das Image 2.0 Ihrer App auf 3.0 aktualisieren möchte, mache ich Folgendes:

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

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

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

Ich dachte an die Verwendung der Kubernetes-API REST, aber ich verstehe die Dokumentation nicht

20
Héctor

Sie können dies über die API REST mit dem PATCH-Verb tun. Der einfachere Weg ist jedoch die Verwendung von kubectl patch . Der folgende Befehl aktualisiert das Tag Ihrer App:

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

Laut der Dokumentation sollte auch das YAML-Format akzeptiert werden. Siehe Kubernetes Ausgabe # 458 (und insbesondere diesen Kommentar ), was auf ein Problem hindeuten kann.

31
Timo Reimann

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

Aktualisieren Sie vorhandene Containerabbilder von Ressourcen. Mögliche Ressourcen sind (Groß- und Kleinschreibung wird nicht berücksichtigt): pod (po), Replikationscontroller (rc), Deployment (deploy), 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/

18
KCD

(Ich hätte dies als Kommentar gepostet, wenn ich genug Ruf hätte.)

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

Ich sehe jedoch, dass alle Beispiele dort das JSON-Format verwenden . Filed https://github.com/kubernetes/kubernetes.github.io/issues/458 , um ein YAML-Formatbeispiel hinzuzufügen.

4
Nikhil Jindal

Ich habe vor kurzem ein Tool entwickelt, um Bereitstellungsupdates zu automatisieren, wenn neue Images verfügbar sind. Es funktioniert mit Kubernetes und Helm:

https://github.com/rusenask/keel

Sie müssen Ihre Implementierungen nur mit Keel-Richtlinien wie keel.sh/policy=major kennzeichnen, um die Aktualisierung der Hauptversionen zu aktivieren. Weitere Informationen finden Sie in der Readme-Datei. Funktioniert ähnlich mit Helm, keine zusätzliche CLI/UI erforderlich. 

1
Deforciant