1. 程式人生 > 實用技巧 >Kubernetes中利用Kubectl set 讓Deployment更新映象

Kubernetes中利用Kubectl set 讓Deployment更新映象

問題描述

我的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}}}}'

只需確保始終更改數值。