deployment、statefulset控制器在没有变化的情况下触发pod更新

发布时间 2024-01-04 15:31:32作者: Leonardo-li
  • k8s控制器(deployment、statefulset)在没有变化的情况下触发pod更新

 

  • 命令格式
kubectl patch deployment <deployment-name> -p "{\"spec\":{\"template\":{\"metadata\":{\"labels\":{\"date\":\"$(date +'%s')\"}}}}}"

 kubectl patch statefulset <statefulset-name> -p "{\"spec\":{\"template\":{\"metadata\":{\"labels\":{\"date\":\"$(date +'%s')\"}}}}}"

  • 示例解释
在这个示例中,kubectl patch 命令通过 JSON 格式的部分替换(-p 参数)修改了 Deployment 的 Pod 模板。具体地说,它更新了 Pod 模板中 metadata 下的 labels 中的 date 标签的值。

每个部分的含义:

deployment-name: 这是你的 Deployment 的名称,你需要将其替换为实际的 Deployment 名称。

-p "{\"spec\":{\"template\":{\"metadata\":{\"labels\":{\"date\":\"$(date +'%s')\"}}}}}": 这是 kubectl patch 命令的一部分,它指定了要应用的部分更新。在这里,它指定了要更新 Deployment 的 Pod 模板的一部分。

spec: 这是 Deployment 的规格部分。

template: 这是 Deployment 中的 Pod 模板。

metadata: 这是 Pod 模板中的元数据部分。

labels: 这是 Pod 模板中的标签部分。

最后,date 是 labels 中的一个标签,而$(date +'%s') 是一个 Bash 命令,它会生成当前时间的 Unix 时间戳。这就意味着,通过将 date 标签的值设置为当前时间的时间戳,你实际上在更新 Pod 模板中的一个标签的值,从而迫使 Kubernetes 触发 Pod 的滚动更新。

总体来说,这个操作的目的是欺骗 Kubernetes 控制器,使其认为 Pod 模板发生了变化,从而触发 Deployment 中所有 Pod 的重新创建。