問題描述
我的deployment有單個pod,我的自定義docker鏡像如下:
1 |
containers: |
在開發過程中,我想推送新的最新版本並更新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 |
spec: |
我目前正在使用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 |
kubectl patch deployment your_deployment -p \ |
只需確保始終更改數值。