Kubernetes中如何讓Deployment更新鏡像


問題描述

我的deployment有單個pod,我的自定義docker鏡像如下:

1
2
3
containers:
- name: mycontainer
image: myimage:latest

在開發過程中,我想推送新的最新版本並更新Deployment。無法明確定義tag/version並為每個構建增加它,並且無法找到如何做到這一點:

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

高票回答

您可以使用grace period(例如30秒或更長時間,根據容器啟動時間和鏡像大小)配置您的pod,並設置“imagePullPolicy:”Always“。並使用kubectl delete pod pod_name。將創建一個新容器並且最新鏡像自動下載,然后舊容器終止。

例子:

1
2
3
4
5
6
spec:
terminationGracePeriodSeconds: 30
containers:
- name: my_container
image: my_image:latest
imagePullPolicy: "Always"

我目前正在使用Jenkins進行自動構建和打鏡像標簽,它看起來像這樣:

1
kubectl --user="kube-user" --server="https://kubemaster.example.com"  --token=$ACCESS_TOKEN set image deployment/my-deployment mycontainer=myimage:"$BUILD_NUMBER-$SHORT_GIT_COMMIT"

另一個技巧是最初運行:

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

然后:

1
kubectl set image deployment/my-deployment mycontainer=myimage

它實際上會觸發滾動更新,但請確保您還有imagePullPolicy:“Always”設置。

我發現的另一個技巧是,您不必更改鏡像名稱,更改將觸發滾動更新的字段的值,例如terminationGracePeriodSeconds。您可以使用kubectl編輯部署your_deployment或kubectl apply -f your_deployment.yaml或使用如下補丁:

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

只需確保始終更改數值。

原文鏈接

Kubernetes how to make Deployment to update image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM