Sie können Ihren Pod mit einer Nachfrist konfigurieren (z. B. 30 Sekunden oder mehr, abhängig von der Startzeit des Containers und der Bildgröße) und festlegen "imagePullPolicy: "Always"
. Und verwenden kubectl delete pod pod_name
. Ein neuer Container wird erstellt und das neueste Bild automatisch heruntergeladen. Anschließend wird der alte Container beendet.
Beispiel:
spec:
terminationGracePeriodSeconds: 30
containers:
- name: my_container
image: my_image:latest
imagePullPolicy: "Always"
Ich verwende derzeit Jenkins für automatisierte Builds und Image-Tagging und es sieht ungefähr so aus:
kubectl --user="kube-user" --server="https://kubemaster.example.com" --token=$ACCESS_TOKEN set image deployment/my-deployment mycontainer=myimage:"$BUILD_NUMBER-$SHORT_GIT_COMMIT"
Ein weiterer Trick besteht darin, zunächst auszuführen:
kubectl set image deployment/my-deployment mycontainer=myimage:latest
und dann:
kubectl set image deployment/my-deployment mycontainer=myimage
Es wird tatsächlich das fortlaufende Update auslösen, aber stellen Sie sicher, dass Sie auch imagePullPolicy: "Always"
festgelegt haben.
Aktualisieren:
Ein weiterer Trick, den ich gefunden habe, bei dem Sie den Bildnamen nicht ändern müssen, besteht darin, den Wert eines Feldes zu ändern, das ein fortlaufendes Update auslöst, wie z terminationGracePeriodSeconds
. Sie können tun dies mit kubectl edit deployment your_deployment
oder kubectl apply -f your_deployment.yaml
oder einen Patch wie folgt aus:
kubectl patch deployment your_deployment -p \
'{"spec":{"template":{"spec":{"terminationGracePeriodSeconds":31}}}}'
Stellen Sie einfach sicher, dass Sie immer den Zahlenwert ändern.
kubectl set image
Befehl ausführen, führen kubernetes ein fortlaufendes Update durch. Angenommen, Sie haben "repo / myimage: latest" bereitgestellt. In der Zwischenzeit wurde Ihr Bild geändert und mit dem Tag "v0.2" in das Repo verschoben. Sie können ein Update durchführen, indem Sie ausführen.kubectl set image deployment/my-deployment mycontainer=myimage:v0.2
Dieses Image hat auch das "neueste" Tag.UPDATE 2019-06-24
Basierend auf dem @ Jodiug-Kommentar können Sie den folgenden Befehl verwenden, wenn Sie eine
1.15
Version haben :Lesen Sie mehr zu diesem Thema:
https://github.com/kubernetes/kubernetes/issues/13488
Nun, es gibt eine interessante Diskussion zu diesem Thema im kubernetes GitHub-Projekt. Siehe das Problem: https://github.com/kubernetes/kubernetes/issues/33664
Aus den dort beschriebenen Lösungen würde ich eine von zwei vorschlagen.
Zuerst
1. Bereiten Sie die Bereitstellung vor
2. Bereitstellen
Zweitens (ein Liner):
Natürlich
imagePullPolicy: Always
ist das in beiden Fällen erforderlich.quelle
Dies ist die aktuelle Methode, um ein fortlaufendes Update auszulösen und die alten Replikatsätze für andere Vorgänge zu belassen, die durch
kubectl rollout
ähnliche Rollbacks bereitgestellt werden .quelle
undo
Befehl oder ein Äquivalent.Ich verwende Gitlab-CI, um das Image zu erstellen und es dann direkt in GCK bereitzustellen. Wenn Sie einen kleinen Trick verwenden, um ein fortlaufendes Update zu erzielen, ohne die tatsächlichen Einstellungen des Containers zu ändern, wird ein Label in das aktuelle Commit-Short-Sha geändert.
Mein Befehl sieht folgendermaßen aus:
Hier können Sie einen beliebigen Namen und einen beliebigen Wert für das Label verwenden, solange sich dieser mit jedem Build ändert.
Habe Spaß!
quelle
Es scheint, dass k8s erwartet, dass wir für jede Bereitstellung ein anderes Image-Tag bereitstellen. Meine Standardstrategie wäre, das CI-System dazu zu bringen, die Docker-Images zu generieren und zu pushen und sie mit der Build-Nummer zu versehen :
xpmatteo/foobar:456
.Für die lokale Entwicklung kann es bequem sein, ein Skript oder ein Makefile wie folgt zu verwenden:
Der
sed
Befehl ersetzt einen Platzhalter im Bereitstellungsdokument durch das tatsächlich generierte Image-Tag.quelle
Ich verwende Azure DevOps zum Bereitstellen der Containeranwendungen. Ich kann dieses Problem mithilfe der Build-ID problemlos beheben
Jedes Mal, wenn Builds erstellt und die neue Build-ID generiert werden, verwende ich diese Build-ID als Tag für das Docker-Image
Bildname: buildID
Sobald Ihr Image erfolgreich erstellt wurde (CI), habe ich in der CD-Pipeline in der Bereitstellungs-XML-Datei den Image-Namen als angegeben
imagename: env: buildID
hier evn: buildid ist die Azure Devops-Variable mit dem Wert der Build-ID.
Jetzt muss ich jedes Mal neue Änderungen vornehmen (CI) und bereitstellen (CD).
Bitte kommentieren Sie, wenn Sie eine Build-Definition für CI / CD benötigen.
quelle