重新加载 Kubernetes 部署以在不停机的情况下获取新密钥



在 Kubernetes 中,我有一个使用密钥并将它们作为环境变量注入的部署:

apiVersion: apps/v1
kind: Deployment
...
envFrom:
- secretRef:
name: api-env

我需要更新一些环境变量,所以我删除了机密api-env并使用更新的值再次创建它。

如何触发部署以使用新的 env 机密进行自身更新,而不会造成任何停机?

我看到一些替代方案,按可行性排序:

  1. 对于 k8s 的版本>v1.15:kubectl rollout restart deployment $deploymentname:这将 以增量方式重新启动 Pod,而不会导致停机。
  2. 对于旧版本:更新部署模板将触发推出。从本期:kubectl patch deployment mydeployment -p '{"spec":{"template":{"spec":{"containers":[{"name":"mycontainer","env":[{"name":"RESTART_","value":"'$(date +%s)'"}]}]}}}}'

  3. 将机密装载到
  4. 卷上,而不是作为环境变量装载,因为装载的机密是 自动更新

  5. 一种方法是将机密/配置映射视为不可变的,并在创建新时更改部署以指向它。
  6. 对应用程序进行编程以监视机密 API 中的更改。

最新更新