Możesz skonfigurować swój pod z okresem karencji (na przykład 30 sekund lub więcej, w zależności od czasu uruchamiania kontenera i rozmiaru obrazu) i ustawić "imagePullPolicy: "Always"
. I użyj kubectl delete pod pod_name
. Zostanie utworzony nowy kontener, a najnowszy obraz zostanie automatycznie pobrany, a stary kontener zostanie zamknięty.
Przykład:
spec:
terminationGracePeriodSeconds: 30
containers:
- name: my_container
image: my_image:latest
imagePullPolicy: "Always"
Obecnie używam Jenkinsa do automatycznych kompilacji i tagowania obrazów i wygląda to mniej więcej tak:
kubectl --user="kube-user" --server="https://kubemaster.example.com" --token=$ACCESS_TOKEN set image deployment/my-deployment mycontainer=myimage:"$BUILD_NUMBER-$SHORT_GIT_COMMIT"
Inną sztuczką jest uruchomienie:
kubectl set image deployment/my-deployment mycontainer=myimage:latest
i wtedy:
kubectl set image deployment/my-deployment mycontainer=myimage
W rzeczywistości będzie wyzwalać aktualizację kroczącą, ale upewnij się, że również imagePullPolicy: "Always"
ustawiłeś.
Aktualizacja:
Kolejną sztuczką, którą znalazłem, w której nie musisz zmieniać nazwy obrazu, jest zmiana wartości pola, które wyzwoli aktualizację kroczącą, na przykład terminationGracePeriodSeconds
. Możesz to zrobić za pomocą kubectl edit deployment your_deployment
lub kubectl apply -f your_deployment.yaml
lub używając takiej łatki:
kubectl patch deployment your_deployment -p \
'{"spec":{"template":{"spec":{"terminationGracePeriodSeconds":31}}}}'
Upewnij się tylko, że zawsze zmieniasz wartość liczbową.