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-консоль создать бакет.
Выяснить 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 <идентификатор_аккаунта>