Yandex Marketplace
June 7, 2023

Установка Container Storage Interface для S3 в Marketplace k8s и через Helm

В данной статье рассмотрим установку CSI S3 в Marketplace mk8s.

При создании из UI.

  1. Namespace в котором ставим CSI;
  2. Оставляем галку создания sc (StorageClass);
  3. Оставляем галку создания Secret;
  4. Вставляем идентификатор статического ключа доступа для объектов S3. Пример генерации ключа здесь: https://teletype.in/@cameda/w93lPMPQWS4
  5. Вставляем секретный ключ доступа. Он создаётся вместе с идентификатором в одном файле;
  6. Вставляем имя бакета, в котором будут создаваться папки с pvc;
  7. Адрес S3 сервиса остаётся прежним: https://storage.yandexcloud.net
  8. Опции монтирования GeeseFS можно изменить по усмотрению;
  9. Политику очистки (Delete/Reclaim) такженастраиваем по-усмотрению;
  10. Название sc/secret на усмотрение, также как и галка игнорирования taint.

На момент написания статьи, версия драйвера geesefs.

cr.yandex/yc-marketplace/yandex-cloud/csi-s3/csi-s3-driver:0.35.5

Установка с помощью Helm чарта.

#В параметре storageClass.singleBucket передаётся название бакета;
#Параметр untar говорит о том, что ставим инсталляцию впервые и нет никаких исходников.
export HELM_EXPERIMENTAL_OCI=1 && \
helm pull oci://cr.yandex/yc-marketplace/yandex-cloud/csi-s3/csi-s3 \
  --version 0.35.5 \
  --untar && cd csi-s3 && \
helm install \
  --namespace default \
  --set secret.accessKey=YC...kt72ges \
  --set secret.secretKey=YCO...r3OrZz \
  --set storageClass.singleBucket=cam-kuber \
  --set storageClass.reclaimPolicy=Retain \
  csi-s3 .  
#Проверка установки
helm list -n default

#Удаление node-local-dns
helm uninstall csi-s3 -n default

Создадим PVC.

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: csi-s3-pvc-dynamic
  namespace: default
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 5Gi
  storageClassName: csi-s3
EOF

Создадим Deployment c PV.

cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cam-nginx
  labels: 
    app: nginx-prod 
    environment: prod
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  strategy: 
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        imagePullPolicy: IfNotPresent
        ports: 
        - name: http
          containerPort: 80
        resources: 
          requests: 
            cpu: 300m
            memory: 300Mi 
          limits: 
            cpu: 400m 
            memory: 400Mi
        volumeMounts: 
        - mountPath: /mnt/s3 
          name: cameda-volume
      restartPolicy: Always
      volumes: 
      - name: cameda-volume 
        persistentVolumeClaim: 
          claimName: csi-s3-pvc-dynamic
EOF
kubectl exec --tty --stdin <pod_name> -- touch /mnt/s3/file

Полезные ссылки

Информация о CSI
https://cloud.yandex.ru/marketplace/products/yc/csi-s3#docker-images

Подробнее о драйвере GeeseFS: https://cloud.yandex.ru/docs/storage/tools/geesefs

Официальный репозиторий: https://github.com/yandex-cloud/k8s-csi-s3

Подробнее про установку:
https://cloud.yandex.ru/docs/managed-kubernetes/operations/applications/csi-s3

Актуальная версия Helm чарта:
https://cloud.yandex.ru/marketplace/products/yc/csi-s3#docker-images