2016-11-01 16 views
18

mam instalację z pojedynczego kapsuły, z moim niestandardowym Döcker obrazu jak:Kubernetes jak zrobić Deployment zaktualizować obraz

containers: 
    - name: mycontainer 
    image: myimage:latest 

Podczas rozwoju chcę wcisnąć nową najnowszą wersję i zrobić Wdrożenie aktualizowana. nie mogę znaleźć jak to zrobić, bez wyraźnego zdefiniowania tag/wersję i zwiększyć ją do każdej budowy, a nie

kubectl set image deployment/my-deployment mycontainer=myimage:1.9.1 

Odpowiedz

19

Można skonfigurować swoją kapsułę z okresem karencji (na przykład 30 sekund lub więcej, w zależności od na czas uruchamiania kontenera i rozmiar obrazu) i ustaw "imagePullPolicy: "Always". I użyj kubectl delete pod pod_name. Nowy kontener zostanie utworzony, a najnowszy obraz automatycznie pobrany, a następnie stary pojemnik zakończony.

Przykład:

spec: 
    terminationGracePeriodSeconds: 30 
    containers: 
    - name: my_container 
    image: my_image:latest 
    imagePullPolicy: "Always" 

obecnie używam Jenkins dla zautomatyzowanego buduje i tagowanie obrazu 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 intially uruchomić:

kubectl set image deployment/my-deployment mycontainer=myimage:latest 

, a następnie:

kubectl set image deployment/my-deployment mycontainer=myimage 

To rzeczywiście spowoduje uruchomienie aktualizacji, ale upewnij się, że masz także zestaw imagePullPolicy: "Always".

Aktualizacja:

kolejna sztuczka znalazłem, gdzie nie trzeba zmienić nazwę obrazu, jest zmiana wartości pola, które wyzwoli kroczący aktualizację, jak terminationGracePeriodSeconds. Można to zrobić za pomocą kubectl edit deployment your_deployment lub kubectl apply -f your_deployment.yaml lub za pomocą plastra takiego:

kubectl patch deployment your_deployment -p \ 
    '{"spec":{"template":{"spec":{"terminationGracePeriodSeconds":31}}}}' 

Tylko upewnij się zawsze zmienić wartość liczbową.

+0

Właściwie to twoja sztuczka nie jest zła, biorąc pod uwagę mój image: lastet i myimage w zasadzie to samo, dzięki! – abovesun

+0

Ta sztuczka wydaje się bardziej podobna do błędu, nie wiem, dlaczego musimy ją podać dwa razy. – speedplane

+1

Jeśli chcesz, aby wdrożenie modelu kubernetes uruchomiło nowy moduł przy użyciu tego samego obrazu (i ta sztuczka działa tylko z tagiem "najnowszy"), musisz określić to bez tagu. Następnym razem dodaj "najnowszy" tag i uruchomi aktualizację. Zamówienie może zostać odwrócone, nie ma znaczenia. Nigdy nie używasz "najnowszego" tagu w produkcji, ale w celach programistycznych możesz z niego skorzystać. – Camil

Powiązane problemy