Монтируйте тома секретов с помощью драйвера CSI и поставщика хранилища в kubernetes, когда у модуля есть допуск и сходство.
У меня есть кластер kubernetes с двумя группами узлов в AWS. Один для спотовых инстансов, а другой для инстансов по запросу. Я установил Vault и драйвер CSI для управления секретами.
Когда я создаю это развертывание, все работает нормально, модули создаются, запускаются и секреты есть.
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: vault-test
name: vault-test
namespace: development
spec:
replicas: 1
selector:
matchLabels:
app: vault-test
strategy: {}
template:
metadata:
labels:
app: vault-test
spec:
containers:
- image: jweissig/app:0.0.1
name: app
envFrom:
- secretRef:
name: dev-secrets
resources: {}
volumeMounts:
- name: secrets-store-inline
mountPath: "/mnt/secrets"
readOnly: true
serviceAccountName: vault-sa
volumes:
- name: secrets-store-inline
csi:
driver: secrets-store.csi.k8s.io
readOnly: true
volumeAttributes:
secretProviderClass: dev
status: {}
Но когда я добавляю nodeAffinity и допуски для создания модулей на спотовых машинах, модули остаются в состоянии ContainerCreating со следующей ошибкой:
Предупреждение FailedMount 10 м (x716 более 24 часов) kubelet MountVolume.SetUp не удалось выполнить для тома «secrets-store-inline»: ошибка rpc: code = Unknown desc = не удалось смонтировать объекты хранилища секретов для разработки модуля / имя модуля, ошибка: ошибка при подключении к провайдер "хранилище": провайдер не найден: провайдер "хранилище"
Я создал два приложения для проверки поведения хранилища, одно без допусков только для тестирования и настоящее, с допусками и nodeAffinity. И после множества тестов я понял, что проблема в том, где планируются модули, но я не понимаю, почему такое поведение
1 ответ
Проблема заключается в конфигурации драйвера хранилища CSI, который не работает на всех узлах из-за отсутствия файла . Я должен был добавитьtolerations
кDaemonSet
проявляется так, что естьPod
во всех узлах, и таким образом все узлы знают, что такое хранилище.