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

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

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

  1. Создайте тикет на подключение файлового хранилища и укажите:

    • размер файлового хранилища;
    • протокол: CIFS;
    • инфраструктуру: кластер Kubernetes.
  2. Дождитесь ответа в тикете. В ответе будут предоставлены команды с параметрами подключения:

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