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_deployment
或kubectl apply -f your_deployment.yaml
或使用像这样的补丁:
kubectl patch deployment your_deployment -p \ '{"spec":{"template":{"spec":{"terminationGracePeriodSeconds":31}}}}'
只要确保你总是改变数字值。