如何在不终止部署的情况下刷新 Worker Secret?

Pro*_*OXO 6 kubernetes kubectl kubernetes-secrets amazon-eks

我想学习如何在不终止和重新创建部署的情况下更新工作 Pod 中的机密。

目前 pod 将秘密作为 env vars 提取:

        env:
        - name: SECRET_ACCESS_KEY
          valueFrom:
            secretKeyRef:
              key: secret_access_key
              name: secrets
Run Code Online (Sandbox Code Playgroud)

但这只发生在他们启动时。

因此,如果需要更改秘密,我必须:

  1. 改变秘密 secrets.yaml
  2. kubectl apply -f secrets.yaml
  3. kubectl delete -f worker-deployment.yaml
  4. kubectl apply -f worker-deployment.yaml

我真的不喜欢第 3 步和第 4 步,因为它们会终止正在进行的工作。

更新 env var 机密的更好的工作流程是什么?

Edu*_*llo 7

没有办法对 pod 的环境变量进行“热重载”。

不过,您无需再次删除和重新创建部署即可应用新的密钥值。您只需要重新创建底层 pod。一些选项是:

rollout restart仅在 kubernetes v1.15+上可用

  • 您还可以添加一个注释,其中包含配置映射的校验和,或其上次修改的时间戳。比滥用模板中不相关的文件要干净一些。 (3认同)

Pau*_*ner 5

正如已经提到的,你想做的事是不可能的。然而,Kubernetes 提供了一种替代方案:将 ConfigMap 作为卷安装。例如

\n\n
apiVersion: v1\nkind: Pod\nmetadata:\n  name: configmap-pod\nspec:\n  containers:\n    - name: test\n      image: busybox\n      volumeMounts:\n        - name: config-vol\n          mountPath: /etc/config\n  volumes:\n    - name: config-vol\n      configMap:\n        name: log-config\n        items:\n          - key: log_level\n            path: log_level\n
Run Code Online (Sandbox Code Playgroud)\n\n

在这种情况下,将log-config ConfigMap被挂载为Volume,您可以从其条目中访问内容,作为pod 内的log_level文件 \xe2\x80\x9c \xe2\x80\x9d 。/etc/config/log_level

\n\n

配置映射的更改反映在卷上文件的更改中,而这些更改反过来可以由您的应用程序通过使用您语言中的适当功能来监视。

\n