天天看點

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​​