【问题标题】:Reload Kubernetes deployment to fetch new secret without downtime重新加载 Kubernetes 部署以在不停机的情况下获取新密钥
【发布时间】:2019-08-15 20:58:23
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: deployment kubernetes


    【解决方案1】:

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

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

    3. 在卷上装载机密而不是作为环境变量,如Mounted Secrets are updated automatically

    4. One approach 将 Secret/Configmap 视为不可变的,并在创建新的时将部署更改为指向它。
    5. 对您的应用程序进行编程以观察 Secrets API 中的变化。

    【讨论】:

    • 我很快就谈过了。 rollout restart 似乎不是一个有效的 Kubernetes 命令。
    • 你的 k8s 版本是多少?如果我没记错的话,这个功能是在 v1.15 上引入的
    • 在 Amazon EKS 1.13 上运行。这是他们支持的最新版本。
    • 我使用patch 添加了一个类似于第一个的新替代方案。此外,除了patch,如果您可以测试set env 是否也触发推出,那就太好了:kubectl set env deployment --env="RESTART=$(date +%s)" $deploymentname
    猜你喜欢
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 2022-08-24
    • 2018-10-22
    • 2019-05-01
    • 1970-01-01
    • 2018-09-04
    • 2017-08-13
    相关资源
    最近更新 更多