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

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

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

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

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

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

  1. На ноде кластера Managed Kubernetes выполните команду:

    ping <nfs-server ip-address>
    

    Укажите <nfs-server ip-address> — IP-адрес из параметров подключения.

  2. Дождитесь отображения отправленных и принятых пакетов. Если указан правильный IP-адрес, но пакеты не отображаются, создайте тикет.

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

Подробнее о персистентных дисках в статье Персистентные диски.

  1. Создайте файл sfs_persistent_volume.yaml:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv_name                  
    spec:
      storageClassName: class_name
      capacity:
        storage: storage_size             
      accessModes:
        - ReadWriteMany
      nfs:
        path: path               
        server: ip_adress       
    

    Укажите:

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

    kubectl apply -f sfs_persistent_volume.yaml
    
  3. Проверьте, что PersistentVolume создан:

    kubectl get pv
    

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

  1. Создайте файл sfs_persistent_volume_claim.yaml:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc_name                
    spec:
      storageClassName: class_name   
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: storage           
    

    Укажите storage — объем PersistentVolume.

  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: pvc_name
          containers:
            - name: container-nginx
              image: nginx:stable-alpine
              ports:
                - containerPort: 80
                  name: "http-server"
              volumeMounts:                         
                - name: volume_name
                  mountPath: mouth_path
    

    Укажите:

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