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

非HELM环境下能否在Kubernetes Deployment中配置ConfigMap校验和?

实现ConfigMap更新自动重启Deployment(无需Helm)

当然可以实现,不需要依赖Helm,你只需要手动计算ConfigMap的校验和并添加到Deployment的注解中,就能触发ConfigMap更新后的自动滚动重启。

核心原理

Kubernetes的Deployment会监控Pod模板(spec.template)的内容变化,只要模板里的任何字段(包括注解)发生改变,就会触发滚动更新。把ConfigMap的校验和加到Deployment的注解里,当ConfigMap内容更新时,校验和也会变化,进而触发Deployment重启Pod。

具体操作步骤

  1. 计算单个ConfigMap的校验和
    使用kubectl导出ConfigMap的YAML并计算SHA256校验和:

    kubectl get configmap <你的ConfigMap名称> -o yaml | sha256sum | awk '{print $1}'
    
  2. 添加校验和到Deployment注解
    在Deployment的metadata.annotations中,为每个ConfigMap添加对应的校验和注解,比如:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: 你的Deployment名称
      annotations:
        configmap/checksum-cm1: "abc123..." # 第一个ConfigMap的校验和
        configmap/checksum-cm2: "def456..." # 第二个ConfigMap的校验和
        configmap/checksum-cm3: "ghi789..." # 第三个ConfigMap的校验和
    spec:
      # ... 其他Deployment配置
      template:
        # ... Pod模板配置
    
  3. 触发更新
    每次更新ConfigMap后,重新计算对应的校验和,更新Deployment的注解(可以用kubectl apply -f <更新后的Deployment YAML>或者kubectl patch命令),Kubernetes就会自动滚动重启Pod。

自动化脚本示例

如果手动计算校验和太麻烦,可以写个简单的Shell脚本自动完成:

#!/bin/bash

# 配置你的资源名称
CONFIGMAP_LIST=("cm1" "cm2" "cm3")
DEPLOYMENT_NAME="my-app-deployment"

# 构建注解字符串
ANNOTATIONS=""
for CM in "${CONFIGMAP_LIST[@]}"; do
  # 计算当前ConfigMap的校验和
  CM_HASH=$(kubectl get configmap "$CM" -o yaml | sha256sum | awk '{print $1}')
  ANNOTATIONS+="    configmap/checksum-$CM: \"$CM_HASH\"\n"
done

# 使用kubectl patch更新Deployment注解
kubectl patch deployment "$DEPLOYMENT_NAME" -p "$(cat <<EOF
metadata:
  annotations:
$(echo -e "$ANNOTATIONS")
EOF
)"

给脚本添加执行权限后,每次更新ConfigMap后运行它,就能自动更新Deployment的注解并触发重启。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 07:55:05