Перейти к основному содержимому
Подключить файловое хранилище к Managed Kubernetes по протоколу CIFS

Подключить файловое хранилище к Managed Kubernetes по протоколу CIFS

  1. Подготовьте инфраструктуру для подключения файлового хранилища к Managed Kubernetes.
  2. Закажите подключение файлового хранилища по протоколу CIFS.
  3. Установите CSI-драйвер для Samba.
  4. Создайте секрет.
  5. Создайте манифест для StorageClass.
  6. Создайте манифест для PersistentVolumeClaim.
  7. Добавьте файловое хранилище в контейнер Deployment.
  8. Проверьте подключение файлового хранилища.

Заказать подключение файлового хранилища

  1. Создайте тикет на подключение файлового хранилища и укажите:
    • размер файлового хранилища;
    • протокол: CIFS;
    • инфраструктуру: кластер Kubernetes;
    • IP-адрес: адрес приватной сети облачной платформы, которую вы добавили к кластеру Managed Kubernetes.
  2. Дождитесь ответа в тикете. В ответе будут предоставлены команды с параметрами подключения:
apt install cifs-utils
sudo mkdir -p /mnt/my_samba_share &&
mount.cifs //x.x.x.x/<UUID> /mnt/my_samba_share

Параметры подключения:

  • x.x.x.x — IP-адрес;
  • /share/<UUID> — путь к файловому хранилищу.

Установить CSI-драйвер для Samba

Для установки драйвера нужен пакетный менеджер helm.

  1. Скачайте пакетный менеджер helm chart и CSI-драйвер с GitHub Kubernetes CSI.

  2. Установите последнюю версию драйвера:

    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
  3. Проверьте, что поды установлены и запущены:

    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

  1. Создайте файл 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 из пути к файловому хранилищу.
  2. Примените манифест:

    kubectl apply -f ./sfs_storage_class.yaml
  3. Проверьте, что StorageClass создался:

    kubectl get storageclass

    В выводе команды будет указан StorageClass — smb.

Создать манифест для PersistentVolumeClaim

  1. Создайте файл 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).

  2. Примените манифест в кластер:

    kubectl apply -f ./sfs_persistent_volume_claim.yaml
  3. Проверьте, что PersistentVolumeClaim создался:

    kubectl get pvc

Добавить файловое хранилище в контейнер Deployment

  1. Создайте файл 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 — путь внутри контейнера, куда будет смонтировано файловое хранилище.

  2. Примените манифест:

    kubectl apply -f deployment.yaml

Проверить подключение файлового хранилища

  1. Выведите имена контейнеров из Deployment sfs-test-deployment:

    kubectl get pods -l=project=sfs-test-deployment -A
  2. Подключитесь к контейнеру:

    kubectl -it container_name sh

    Укажите container_name — имя контейнера.

  3. Проверьте, что файловое хранилище смонтировалось:

    mount -l | grep nfs
  4. Проверьте, что объем тома соответствует параметру storage_size из файла sfs_persistent_volume.yaml:

    df -h
  5. Запишите и выведите текст:

    echo "Hello World!" > mount_path/hello.txt
    cat mount_path/hello.txt

    Укажите mouth_path — путь внутри контейнера, куда было смонтировано файловое хранилище.