Как обновить секреты работника, не убивая развертывание?

Я хочу узнать, как обновлять секреты в рабочих модулях, не убивая и не воссоздавая развертывание.

В настоящее время стручки хранят секреты, которые можно найти в:

        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, поскольку они заканчивают работу в процессе.

Каков лучший рабочий процесс для обновления секретов env var?

3 ответа

Не существует способа выполнить "горячую перезагрузку" для переменных среды модуля.

Хотя вам не нужно удалять и заново создавать развертывание, чтобы применить новое секретное значение. Вам нужно только воссоздать базовые стручки. Некоторые варианты:

  • kubectl delete pods воссоздать их
  • Редактирование некоторого тривиального значения развертывания для запуска скользящего обновления (например, изменениеterminationGracePeriodSeconds от 30 в 31).

Как уже упоминалось, то, что вы хотите сделать, невозможно. Однако есть альтернатива, предложенная 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-configConfigMap будет установлен как Volumeи вы можете получить доступ к содержимому из его log_level запись в файле "/etc/config/log_levelВнутри стручка.

Изменения в карте конфигурации отражаются изменениями в файлах тома, и эти изменения, в свою очередь, могут отслеживаться вашим приложением с использованием соответствующих функций на вашем языке.

Вы можете обновить секреты с помощью такого инструмента, как WebUI (Dashboard) K8S или fabric8, если у вас есть соответствующие разрешения.

Проверьте Kubernetes изменить секрет, используя cli для других вариантов.

Другие вопросы по тегам