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

Jus*_*tin 3 deployment kubernetes

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

apiVersion: apps/v1
kind: Deployment
...
envFrom:
  - secretRef:
    name: api-env
Run Code Online (Sandbox Code Playgroud)

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

如何在不停机的情况下触发部署以使用新的 env 机密更新自身?

vic*_*rtv 6

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

  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. 一种方法是将 Secret/Configmap 视为不可变的,并在创建新的时更改部署以指向它。
  5. 对您的应用程序进行编程以观察Secrets API 中的变化。