You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过单条K8s命令实现配置更新、拉取镜像与滚动重启Deployment?

解决方案

方案1:用kubectl apply结合动态注解触发单次滚动更新

直接把应用配置和触发镜像拉取的操作合并成一条命令,通过给Deployment添加唯一时间戳注解的方式,确保仅触发一次滚动更新:

kubectl apply -Rf ./your-config-dir && kubectl patch deployment <你的Deployment名称> -p "{\"spec\":{\"template\":{\"metadata\":{\"annotations\":{\"kubectl.kubernetes.io/restartedAt\":\"$(date +%Y-%m-%dT%H:%M:%S%z)\"}}}}"

这个命令的逻辑是:

  1. 先批量应用目录下的configmap和deployment配置变更
  2. 立即给Deployment模板打一个基于当前时间的唯一注解,触发滚动更新
  3. 因为已配置imagePullPolicy: Always,滚动更新时kubelet会自动拉取最新的latest镜像
  4. 无论是否有配置变更,整个流程只会触发一次滚动更新,避免了两次重启的问题

方案2:替换latest标签为唯一标识(长期最优方案)

尽量不要用latest标签,改用镜像的SHA摘要或者版本号作为标签,在CI/CD流程中自动注入到deployment.yaml里:

# 修改后的deployment.yaml示例
spec:
  template:
    spec:
      containers:
      - name: your-container
        image: your-image:{{镜像SHA值}} # 由CI/CD工具动态注入
        imagePullPolicy: Always

这种方式下,每次镜像更新时,kubectl apply会识别到镜像标签变化,自动触发滚动更新;同时配置变更也会在apply时生效,全程只触发一次重启,还能避免latest标签带来的镜像缓存不确定性。

方案3:不推荐的替代方式

如果不想用注解,也可以用kubectl replace -f deployment.yaml替代apply,但需要先单独应用configmap,再替换Deployment,且还是需要额外操作触发镜像拉取,流程比方案1繁琐,不建议使用。

内容的提问来源于stack exchange,提问作者kontojulii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 04:57:03