小编典典

Kubernetes 如何进行 Deployment 来更新镜像

all

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

containers:
  - name: mycontainer
    image: myimage:latest

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

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

阅读 110

收藏
2022-06-18

共1个答案

小编典典

您可以为您的 pod 配置一个宽限期(例如 30 秒或更长时间,具体取决于容器启动时间和映像大小)并设置"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"设置。

更新:

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

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

只要确保您始终更改数值即可。

2022-06-18