如何在不中断部署的情况下刷新工作人员的机密?

时间:2019-04-11 23:06:44

标签: kubernetes kubectl amazon-eks kubernetes-secrets eks

我想学习如何在不中断和重新创建部署的情况下更新工作人员吊舱中的秘密。

当前,pod通过以下方式将秘密作为环境变量:

        env:
        - name: SECRET_ACCESS_KEY
          valueFrom:
            secretKeyRef:
              key: secret_access_key
              name: secrets

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

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

  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步,因为它们会终止正在进行的作业。

有什么更好的工作流程来更新环境变量?

3 个答案:

答案 0 :(得分:2)

无法对pod的环境变量进行“热重装”。

尽管如此,您无需再次删除并重新创建部署即可应用新的秘密值。您只需要重新创建基础容器。一些选项是:

答案 1 :(得分:0)

如前所述,您无法做的事情。但是,Kubernetes提供了另一种方法:将ConfigMaps安装为卷。例如

apiVersion: v1
kind: Pod
metadata:
  name: configmap-pod
spec:
  containers:
    - name: test
      image: busybox
      volumeMounts:
        - name: config-vol
          mountPath: /etc/config
  volumes:
    - name: config-vol
      configMap:
        name: log-config
        items:
          - key: log_level
            path: log_level

在这种情况下,log-config ConfigMap将作为Volume挂载,您可以从其log_level条目中以文件“ {{1 }}”在吊舱内。

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

答案 2 :(得分:-2)

如果您具有适当的权限,则可以通过K8S的WebUI(仪表板)或fabric8之类的工具来更新机密。

查看Kubernetes modify a secret using the cli以获得其他选项。