Подключить файловое хранилище к Managed Kubernetes по протоколу CIFS
- Подготовьте инфраструктуру для подключения файлового хранилища к Managed Kubernetes.
- Закажите подключение файлового хранилища по протоколу CIFS.
- Установите CSI-драйвер для Samba.
- Создайте секрет.
- Создайте манифест для StorageClass.
- Создайте манифест для PersistentVolumeClaim.
- Добавьте файловое хранилище в контейнер Deployment.
- Проверьте подключение файлового хранилища.
Заказать подключение файлового хранилища
- Создайте тикет на подключение файлового хранилища и укажите:
- размер файлового хранилища;
- протокол:
CIFS
; - инфраструктуру: кластер Kubernetes;
- IP-адрес: адрес приватной сети облачной платформы, которую вы добавили к кластеру Managed Kubernetes.
- Дождитесь ответа в тикете. В ответе будут предоставлены команды с параметрами подключения:
Установить CSI-драйвер для Samba
Для установки драйвера нужен пакетный менеджер helm.
-
Скачайте пакетный менеджер helm chart и CSI-драйвер с GitHub Kubernetes CSI.
-
Установите последнюю версию драйвера:
helm repo add csi-driver-smb https://raw.githubusercontent.com/kubernetes-csi/csi-driver-smb/master/charts helm install csi-driver-smb csi-driver-smb/csi-driver-smb --namespace kube-system --version v1.4.0
-
Проверьте, что поды установлены и запущены:
kubectl --namespace=kube-system get pods --selector="app=csi-smb-controller"
Создать секрет
Создайте секрет для хранения логина и пароля (по умолчанию guest/guest):
kubectl create secret generic smbcreds --from-literal username=guest --from-literal password=guest
Создать манифест для StorageClass
-
Создайте файл sfs_storage_class.yaml:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: smb provisioner: smb.csi.k8s.io parameters: source: "//ip_adress/share/mount_path" csi.storage.k8s.io/provisioner-secret-name: "smbcreds" csi.storage.k8s.io/provisioner-secret-namespace: "default" csi.storage.k8s.io/node-stage-secret-name: "smbcreds" csi.storage.k8s.io/node-stage-secret-namespace: "default" reclaimPolicy: Delete volumeBindingMode: Immediate mountOptions: - dir_mode=0777 - file_mode=0777
Укажите параметры подключения:
ip_address
— IP-адрес из команды;mount_path
— UUID из пути к файловому хранилищу.
-
Примените манифест:
kubectl apply -f ./sfs_storage_class.yaml
-
Проверьте, что StorageClass создался:
kubectl get storageclass
В выводе команды будет указан StorageClass —
smb
.
Создать манифест для PersistentVolumeClaim
-
Создайте файл sfs_persistent_volume_claim.yaml:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: samba-test annotations: volume.beta.kubernetes.io/storage-class: smb spec: accessModes: ["ReadWriteMany"] resources: requests: storage: storage_size
Укажите
storage_size
— размер файлового хранилища, который был указан в тикете на подключение файлового хранилища (например, 500Gi). -
Примените манифест в кластер:
kubectl apply -f ./sfs_persistent_volume_claim.yaml
-
Проверьте, что PersistentVolumeClaim создался:
kubectl get pvc
Добавить файловое хранилище в контейнер Deployment
-
Создайте файл deployment.yaml:
apiVersion: apps/v1 kind: Deployment metadata: name: sfs-test-deployment labels: project: sfs-test-deployment spec: replicas: 2 selector: matchLabels: project: sfs-test template: metadata: labels: project: sfs-test spec: volumes: - name: volume_name persistentVolumeClaim: claimName: samba-test containers: - name: container-nginx image: nginx:stable-alpine ports: - containerPort: 80 name: "http-server" volumeMounts: - name: samba-test-storage mountPath: mount_path
Укажите
mouth_path
— путь внутри контейнера, куда будет смонтировано файловое хранилище. -
Примените манифест:
kubectl apply -f deployment.yaml
Проверить подключение файлового хранилища
-
Выведите имена контейнеров из Deployment
sfs-test-deployment
:kubectl get pods -l=project=sfs-test-deployment -A
-
Подключитесь к контейнеру:
kubectl -it container_name sh
Укажите
container_name
— имя контейнера. -
Проверьте, что файловое хранилище смонтировалось:
mount -l | grep nfs
-
Проверьте, что объем тома соответствует параметру
storage_size
из файла sfs_persistent_volume.yaml:df -h
-
Запишите и выведите текст:
echo "Hello World!" > mount_path/hello.txt cat mount_path/hello.txt
Укажите
mouth_path
— путь внутри контейнера, куда было смонтировано файловое хранилище.