Kubernetes如何使部署更新图像

我确实使用单个pod进行部署,使用我自定义的docker映像:

containers: - name: mycontainer image: myimage:latest 

在开发过程中,我想推送最新的最新版本并更新部署。 找不到如何做到这一点,没有明确定义标签/版本,并为每个版本增加,做

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

您可以使用宽限期(例如30秒或更长时间,取决于容器启动时间和映像大小)来configuration您的窗格,并设置"imagePullPolicy: "Always" ,并使用kubectl delete pod pod_name 。将创build一个新的容器,最新的图像自动下载,然后旧的容器终止。

例:

 spec: terminationGracePeriodSeconds: 30 containers: - name: my_container image: my_image:latest imagePullPolicy: "Always" 

我目前正在使用Jenkins进行自动构build和图像标记,它看起来像这样:

 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 image deployment/my-deployment mycontainer=myimage:latest 

接着:

 kubectl set image deployment/my-deployment mycontainer=myimage 

它实际上会触发滚动更新,但确保你也有imagePullPolicy: "Always"设置。

更新:

我发现的另一个技巧是,您不必更改图像名称,就是更改将触发滚动更新的字段的值,例如terminationGracePeriodSeconds 。 您可以使用kubectl edit deployment your_deploymentkubectl apply -f your_deployment.yaml或使用像这样的补丁:

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

只要确保你总是改变数字值。