TGViewer
Сочный DevOps Сочный DevOps @andtree_sec · 420 subscribers
Post #179 158
Внедряем s3 от yandex cloud в k8s

Есть у яндекса вот такой интересный проект, который позволяет подключить в k8s S3 в качестве хранилища.

Работает с любым хранилищем типа S3, например у нас ceph.
Развертывание с помощью GitOps системы fluxcd.

На самом верхнем уровне apps создаем директорию csi-s3, внутри helmrelease.yaml:
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: csi-s3
namespace: csi-s3
spec:
interval: 10m
releaseName: csi-s3
chart:
spec:
chart: csi-s3
version: "0.43.0"
sourceRef:
kind: HelmRepository
name: csi-s3
namespace: flux-system
values:
storageClass:
create: false
secret:
create: false


Тут только ставим приложение, без создания storageClass или секретов для конкретного бакета.

HelmRepository:
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: csi-s3
namespace: flux-system
spec:
interval: 1h0m0s
url: https://yandex-cloud.github.io/k8s-csi-s3/charts


И kustomization.yaml:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- repository.yaml
- helmrelease.yaml


Далее на уровне конкретного кластера, я завел директорию storageclasses c описанием одного storageClass под одного приложение. У меня это shuffle.
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: csi-s3-shuffle
provisioner: ru.yandex.s3.csi
parameters:
mounter: geesefs
options: "--memory-limit 1000 --dir-mode 0777 --file-mode 0666"
bucket: shuffle-dev
csi.storage.k8s.io/provisioner-secret-name: csi-s3-secret
csi.storage.k8s.io/provisioner-secret-namespace: shuffle
csi.storage.k8s.io/controller-publish-secret-name: csi-s3-secret
csi.storage.k8s.io/controller-publish-secret-namespace: shuffle
csi.storage.k8s.io/node-stage-secret-name: csi-s3-secret
csi.storage.k8s.io/node-stage-secret-namespace: shuffle
csi.storage.k8s.io/node-publish-secret-name: csi-s3-secret
csi.storage.k8s.io/node-publish-secret-namespace: shuffle


Секрет csi-s3-secret уже идет на уровне приложения. В моем случае гит репозиторий с приложением лежит в другом месте, во flux просто подключается. Соответственно там я описываю секрет вида:
apiVersion: v1
kind: Secret
metadata:
namespace: shuffle
name: csi-s3-secret
annotations:
vault.security.banzaicloud.io/vault-serviceaccount: "<vault_sa>"
vault.security.banzaicloud.io/vault-addr: "<vault_address"
vault.security.banzaicloud.io/vault-role: "<vault_role"
vault.security.banzaicloud.io/vault-path: "<vault_k8s_auth_path>"
stringData:
accessKeyID: "vault:path/to/secret#S3_ACCESS_KEY"
secretAccessKey: "vault:path/to/secret#S3_SECRET_KEY"
endpoint: https://<s3_domain>


Секрет создается с помощью vault webhooks от bank-vault.

Итого - во flux описываем storageClass-ы под приложения/неймспесы и так далее, в конкретных приложениях уже секреты с кредами.

#k8s
#s3
  • 🔥 1
More from @andtree_sec
  1. Sep 7, 2026Давненько не было сообщений. Скорее всего в будущем они уйдут в telegraf, который я еще не…
  2. Jul 6, 2026Последнее время на работе часто приходится работать с apache flink и даже что-то писать на…
  3. Jun 4, 2026Немножко про молекула тесты... У нас принято использовать в переменных lookup плагин для д…
  4. May 20, 2026Очередной небольшой проект. Веб-приложение, которое агрегирует через стандартный механиз g…
  5. May 15, 2026Включаем профилирование в ansible Профилирование, это вывод даты, времени запуска и итогов…
  6. Apr 17, 2026Так выглядит общий dashbord работы с инцидентами.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →