Kubernetes中利用Kubectl set 讓Deployment更新映象
阿新 • • 發佈:2020-07-31
問題描述
我的deployment有單個pod,我的自定義docker映象如下:
containers:
- name: mycontainer
image: myimage:latest
在開發過程中,我想推送新的最新版本並更新Deployment。無法明確定義tag/version併為每個構建增加它,並且無法找到如何做到這一點:
kubectl set image deployment/my-deployment mycontainer=myimage:1.9.1
問題回答
配置標籤更新觸發Deployment更新
您可以使用grace period(例如30秒或更長時間,根據容器啟動時間和映象大小)配置您的pod,並設定“imagePullPolicy:”Always“。並使用kubectl delete pod pod_name。將建立一個新容器並且最新映象自動下載,然後舊容器終止。
例子:
spec:
terminationGracePeriodSeconds: 30
containers:
- name: my_container
image: my_image:latest
imagePullPolicy: "Always"
我目前正在使用Jenkins進行自動構建和打映象標籤,它看起來像這樣:
kubectl --user="kube-user" --server="https://kubemaster.example.com" --token=$ACCESS_TOKEN set image deployment/my-deployment mycontainer=myimage:"$BUILD_NUMBER-$SHORT_GIT_COMMIT"
Kubectl set 命令設定觸發Deployment更新
另一個技巧是最初執行:
kubectl set image deployment/my-deployment mycontainer=myimage:latest
然後:
kubectl set image deployment/my-deployment mycontainer=myimage
它實際上會觸發滾動更新,但請確保您還有imagePullPolicy:“Always”設定。
我發現的另一個技巧是,您不必更改映象名稱,更改將觸發滾動更新的欄位的值,例如terminationGracePeriodSeconds。您可以使用kubectl編輯部署your_deployment或kubectl apply -f your_deployment.yaml或使用如下補丁:
kubectl patch deployment your_deployment -p \ '{"spec":{"template":{"spec":{"terminationGracePeriodSeconds":31}}}}'
只需確保始終更改數值。