我确实使用单个 pod 进行了部署,我的自定义 docker 映像如下:
containers: - name: mycontainer image: myimage:latest
在开发过程中,我想推送新的最新版本并更新部署。找不到如何做到这一点,没有明确定义标签/版本并为每个构建增加它,然后做
kubectl set image deployment/my-deployment mycontainer=myimage:1.9.1
您可以为您的 pod 配置一个宽限期(例如 30 秒或更长时间,具体取决于容器启动时间和映像大小)并设置"imagePullPolicy: "Always". 并使用kubectl delete pod pod_name. 将创建一个新容器并自动下载最新图像,然后终止旧容器。
"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 image deployment/my-deployment mycontainer=myimage:latest
接着:
kubectl set image deployment/my-deployment mycontainer=myimage
它实际上会触发滚动更新,但请确保您也已imagePullPolicy: "Always"设置。
imagePullPolicy: "Always"
更新:
我发现的另一个技巧是,您不必更改图像名称,即更改将触发滚动更新的字段的值,例如terminationGracePeriodSeconds. 您可以使用或使用这样的补丁来做到这kubectl edit deployment your_deployment一点kubectl apply -f your_deployment.yaml:
terminationGracePeriodSeconds
kubectl edit deployment your_deployment
kubectl apply -f your_deployment.yaml
kubectl patch deployment your_deployment -p \ '{"spec":{"template":{"spec":{"terminationGracePeriodSeconds":31}}}}'
只要确保您始终更改数值即可。