Skip to main content

Storages

Система хранения работает через драйверы (CSI плагины). Разработчик обычно предоставляет плагины в виде Helm чартов или yaml установщиков. Они устанавливаются в виде набора подов в namespace kube-system. Список плагинов Для тестов можно использовать встроенный драйвер, OpenEbs. К вопросу выбора драйвера, архитектуры хранилища и безопасности необходимо подходить очень серьезно.

Примеры

Локальное хранилище

На воркере 

sudo mkdir -p /mnt/disks/ssd1
sudo chmod 777 /mnt/disks/ssd1  # Для упрощения примера

Настройка PV 

apiVersion: v1
kind: PersistentVolume
metadata:
  name: example-local-pv
  labels:
    type: local
spec:
  capacity:
    storage: 10Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: local-storage
  local:
    path: /mnt/disks/ssd1
  nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
                - <node-name>  # Замените на имя узла, где находится директория

Настройка PVC 

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: example-local-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 10Gi

Проверка связи 

kubectl get pv
kubectl get pvc

Использование в Pod 

apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
    - name: example-container
      image: nginx
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: local-storage
  volumes:
    - name: local-storage
      persistentVolumeClaim:
        claimName: example-local-pvc

Удаление ресурсов 

kubectl delete pod example-pod
kubectl delete pvc example-local-pvc
kubectl delete pv example-local-pv

Хранилище Yandex.cloud

S3 aws - совместимое хранилище. 

1. Настройка доступа через консоль 

Установить консоль yc 

curl -sSL https://storage.yandexcloud.net/yandexcloud-yc/install.sh | bash
source ~/.bashrc

Запросить новый OAuth токен. Время жизни токена 1 год.

Инициализировать консоль 

yc init

2. Настройка доступа к бакету

Через web-консоль создать бакет.

k8s_volumes_1.JPG

Выяснить folder_id созданного аккаунта 

yc storage bucket get k8stest

name: k8stest
folder_id: b...q
anonymous_access_flags:
  read: false
  list: false
  config_read: false
default_storage_class: STANDARD
versioning: VERSIONING_DISABLED
max_size: "1073741824"
created_at: "2025-03-23T06:35:58.715069Z"

Создать сервисный аккаунт для доступа к бакету, в выводе будет id аккаунта

yc iam service-account create --name k8stest --output key.json

Файл key.json понадобится далее.

Добавить роль для созданного бакета сервис аккаунту 

yc resource-manager folder add-access-binding <идентификатор_каталога> \
  --role <роль> \
  --subject serviceAccount:<идентификатор_сервисного_аккаунта>

3. Установка CSI плагина для yandex.cloud

git clone https://github.com/deckhouse/yandex-csi-driver.git
cd yandex-csi-driver

В самом git сказано, что запускать нужно из папки deploy/1.17 установив 2 переменные. У меня это не заработало.

В папке yandex-csi-driver/charts/yandex-csi-controller установить serviceAccountJSON и folderID

В файле csidriver.yaml заменить apiVersion: storage.k8s.io/v1beta1 на apiVersion: storage.k8s.io/v1

Дополнительно:

# Список сервис аккаунтов
yc iam service-account list 
# Детализация информации по аккаунту
yc iam service-account get <идентификатор_аккаунта>
# Удаление аккаунта
yc iam service-account delete <идентификатор_аккаунта>