Kubernetes在秘密更新的情况下滚动更新

时间:2016-05-31 12:08:40

标签: kubernetes google-kubernetes-engine

我有一个复制控制器,其中一个副本使用密钥。如何在更改密码值时更新或重新创建其(单独)pod - 无需停机 - 使用最新密码值?

我目前的解决方法是增加复制控制器中的副本数量,删除旧容器以及将副本计数更改回其原始值。

是否有一个命令或标志来引发滚动更新,保留相同的容器图像和标记?当我尝试这样做时,它会拒绝我的尝试,并发出以下消息:

error: Specified --image must be distinct from existing container image

2 个答案:

答案 0 :(得分:3)

有几个问题#9043#13488合理地描述了这个问题,我怀疑滚动更新方法很快就会出现(就像Kubernetes中的大多数事情一样),尽管不太可能是1.3.0。同样的问题适用于更新ConfigMaps。

当部署pod规范中的任何内容发生更改时(例如,通常为image到新版本),Kubernetes将执行滚动更新,因此one suggested workaround将在部署pod规范中设置env变量(例如RESTART_

然后,当您更新了秘密/配置图时,在部署中(通过kubectl applypatchedit)突破env值,Kubernetes将开始滚动更新部署。

示例部署规范:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: test-nginx
spec:
  replicas: 2
  template:
    metadata:
    spec:
      containers:
      - name: nginx
        image: "nginx:stable"
        ports:
        - containerPort: 80
        - mountPath: /etc/nginx/conf.d
          name: config
          readOnly: true
        - mountPath: /etc/nginx/auth
          name: tokens
          readOnly: true
        env:
        - name: RESTART_
          value: "13"
      volumes:
        - name: config
          configMap:
            name: test-nginx-config
        - name: tokens
          secret:
            secretName: test-nginx-tokens

两个提示:

  • 您的环境变量名称不能以_开头,否则会以某种方式神奇地消失。
  • 如果您为重启变量使用数字,则需要将其包装在引号

答案 1 :(得分:0)

如果我理解正确,部署应该是你想要的。

部署支持对pod模板中几乎所有字段的滚动更新。

请参阅http://kubernetes.io/docs/user-guide/deployments/