Подготовка томов NFS Azure NetApp Files для Служба Azure Kubernetes

После настройки Azure NetApp Files для Служба Azure Kubernetes можно подготовить тома Azure NetApp Files для Служба Azure Kubernetes.

Azure NetApp Files поддерживает тома с помощью NFS (NFSv3 или NFSv4.1), S МБ или двойного протокола (NFSv3 и S МБ или NFSv4.1 и S МБ).

Статическая настройка для приложений, использующих тома NFS

В этом разделе описывается, как создать том NFS в Azure NetApp Files и предоставить том статическим образом Kubernetes. В нем также описывается использование тома с контейнерным приложением.

Создание тома NFS

  1. Определите переменные для последующего использования. Замените myresourcegroup, mylocation, myaccountname, mypool1, premium, myfilepath, myvolsize, myvolname, vnetid и anfSubnetID соответствующим значением из учетной записи и среды. Файловый путь должен быть уникальным в пределах всех учетных записей ANF.

    RESOURCE_GROUP="myresourcegroup"
    LOCATION="mylocation"
    ANF_ACCOUNT_NAME="myaccountname"
    POOL_NAME="mypool1"
    SERVICE_LEVEL="premium" # Valid values are Standard, Premium, and Ultra
    UNIQUE_FILE_PATH="myfilepath"
    VOLUME_SIZE_GIB="myvolsize"
    VOLUME_NAME="myvolname"
    VNET_ID="vnetId"
    SUBNET_ID="anfSubnetId"
    
  2. Создайте том с помощью az netappfiles volume create команды. Дополнительные сведения см. в статье "Создание тома NFS для Azure NetApp Files".

    az netappfiles volume create \
        --resource-group $RESOURCE_GROUP \
        --location $LOCATION \
        --account-name $ANF_ACCOUNT_NAME \
        --pool-name $POOL_NAME \
        --name "$VOLUME_NAME" \
        --service-level $SERVICE_LEVEL \
        --vnet $VNET_ID \
        --subnet $SUBNET_ID \
        --usage-threshold $VOLUME_SIZE_GIB \
        --file-path $UNIQUE_FILE_PATH \
        --protocol-types NFSv3
    

Создание постоянного тома

  1. Список сведений о томе с помощью az netappfiles volume show команды. Замените переменные соответствующими значениями из учетной записи и среды Azure NetApp Files, если они не определены на предыдущем шаге.

    az netappfiles volume show \
        --resource-group $RESOURCE_GROUP \
        --account-name $ANF_ACCOUNT_NAME \
        --pool-name $POOL_NAME \
        --volume-name "$VOLUME_NAME -o JSON
    

    Ниже приведен пример приведенной выше команды, выполняемой с реальными значениями.

    {
      ...
      "creationToken": "myfilepath2",
      ...
      "mountTargets": [
        {
          ...
          "ipAddress": "10.0.0.4",
          ...
        }
      ],
      ...
    }
    
  2. Создайте файл pv-nfs.yaml и скопируйте в него следующий код YAML. Убедитесь, что сервер соответствует выходному IP-адресу из шага 1, а путь соответствует выходным данным выше creationToken . Емкость также должна соответствовать размеру тома из приведенного выше шага.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-nfs
    spec:
      capacity:
        storage: 100Gi
      accessModes:
        - ReadWriteMany
      mountOptions:
        - vers=3
      nfs:
        server: 10.0.0.4
        path: /myfilepath2
    
  3. Создайте постоянный том с помощью kubectl apply команды:

    kubectl apply -f pv-nfs.yaml
    
  4. Убедитесь, что состояние постоянного тома доступно с помощью kubectl describe команды:

    kubectl describe pv pv-nfs
    

Создание заявки на доступ к постоянному тому

  1. Создайте файл pvc-nfs.yaml и скопируйте в него следующий код YAML. Этот манифест создает ПВХ с именем pvc-nfs 100Gi хранилища и ReadWriteMany режима доступа, соответствующего созданному ПС.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-nfs
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: ""
      resources:
        requests:
          storage: 100Gi
    
  2. Создайте утверждение постоянного тома kubectl apply с помощью команды:

    kubectl apply -f pvc-nfs.yaml
    
  3. Убедитесь, что состояние утверждения постоянного тома привязано с помощью kubectl describe команды:

    kubectl describe pvc pvc-nfs
    

Подключение с помощью модуля pod

  1. Создайте файл nginx-nfs.yaml и скопируйте в него следующий код YAML. Этот манифест определяет nginx модуль pod, использующий утверждение постоянного тома.

    kind: Pod
    apiVersion: v1
    metadata:
      name: nginx-nfs
    spec:
      containers:
      - image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
        name: nginx-nfs
        command:
        - "/bin/sh"
        - "-c"
        - while true; do echo $(date) >> /mnt/azure/outfile; sleep 1; done
        volumeMounts:
        - name: disk01
          mountPath: /mnt/azure
      volumes:
      - name: disk01
        persistentVolumeClaim:
          claimName: pvc-nfs
    
  2. Создайте pod с помощью kubectl apply команды:

    kubectl apply -f nginx-nfs.yaml
    
  3. Убедитесь, что модуль pod запущен с помощью kubectl describe команды:

    kubectl describe pod nginx-nfs
    
  4. Убедитесь, что том подключен к модулем pod с помощью kubectl exec подключения к модулем pod, а затем используется df -h для проверка, если том подключен.

    kubectl exec -it nginx-nfs -- sh
    
    / # df -h
    Filesystem             Size  Used Avail Use% Mounted on
    ...
    10.0.0.4:/myfilepath2  100T  384K  100T   1% /mnt/azure
    ...
    

Динамическое настройка для приложений, использующих тома NFS

Astra Trident может использоваться для динамической подготовки файлов NFS или S МБ в Azure NetApp Files. Динамически подготовленные тома S МБ поддерживаются только рабочими узлами Windows.

В этом разделе описывается, как использовать Astra Trident для динамического создания тома NFS в Azure NetApp Files и автоматического подключения его к контейнеризованному приложению.

Установка Astra Trident

Для динамической подготовки томов NFS необходимо установить Astra Trident. Astra Trident — это динамическое средство подготовки хранилища NetApp, предназначенное для Kubernetes. Упрощение использования хранилища для приложений Kubernetes с помощью стандартного драйвера интерфейса служба хранилища интерфейса (CSI) Astra Trident. Astra Trident развертывается в кластерах Kubernetes в качестве модулей pod и предоставляет службы динамического оркестрации хранилища для рабочих нагрузок Kubernetes.

Trident можно установить с помощью оператора Trident (вручную или с помощью Helm) или tridentctl. Дополнительные сведения об этих методах установки и их работе см. в руководстве по установке Astra Trident.

Установка Astra Trident с помощью Helm

Helm необходимо установить на рабочей станции, чтобы установить Astra Trident с помощью этого метода. Другие методы установки Astra Trident см. в руководстве по установке Astra Trident.

  1. Чтобы установить Astra Trident с помощью Helm для кластера с только рабочими узлами Linux, выполните следующие команды:

    helm repo add netapp-trident https://netapp.github.io/trident-helm-chart   
    helm install trident netapp-trident/trident-operator --version 23.04.0  --create-namespace --namespace trident
    

    Выходные данные команды будут выглядеть примерно так:

    NAME: trident
    LAST DEPLOYED: Fri May  5 13:55:36 2023
    NAMESPACE: trident
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
    NOTES:
    Thank you for installing trident-operator, which will deploy and manage NetApp's Trident CSI storage provisioner for Kubernetes.
    
    Your release is named 'trident' and is installed into the 'trident' namespace.
    Please note that there must be only one instance of Trident (and trident-operator) in a Kubernetes cluster.
    
    To configure Trident to manage storage resources, you will need a copy of tridentctl, which is available in pre-packaged Trident releases.  You may find all Trident releases and source code online at https://github.com/NetApp/trident. 
    
    To learn more about the release, try:
    
        $ helm status trident
          $ helm get all trident
    
  2. Чтобы подтвердить успешное установку Astra Trident, выполните следующую kubectl describe команду:

    kubectl describe torc trident
    

    Выходные данные команды будут выглядеть примерно так:

    Name:         trident
    Namespace:    
    Labels:       app.kubernetes.io/managed-by=Helm
    Annotations:  meta.helm.sh/release-name: trident
                  meta.helm.sh/release-namespace: trident
    API Version:  trident.netapp.io/v1
    Kind:         TridentOrchestrator
    Metadata:
        ...
    Spec:
      IPv6:                  false
      Autosupport Image:     docker.io/netapp/trident-autosupport:23.04
      Autosupport Proxy:     <nil>
      Disable Audit Log:     true
      Enable Force Detach:   false
      Http Request Timeout:  90s
      Image Pull Policy:     IfNotPresent
      k8sTimeout:            0
      Kubelet Dir:           <nil>
      Log Format:            text
      Log Layers:            <nil>
      Log Workflows:         <nil>
      Namespace:             trident
      Probe Port:            17546
      Silence Autosupport:   false
      Trident Image:         docker.io/netapp/trident:23.04.0
      Windows:               false
    Status:
      Current Installation Params:
        IPv6:                       false
        Autosupport Hostname:       
        Autosupport Image:          docker.io/netapp/trident-autosupport:23.04
        Autosupport Proxy:          
        Autosupport Serial Number:  
        Debug:                      false
        Disable Audit Log:          true
        Enable Force Detach:        false
        Http Request Timeout:       90s
        Image Pull Policy:          IfNotPresent
        Image Pull Secrets:
        Image Registry:       
        k8sTimeout:           30
        Kubelet Dir:          /var/lib/kubelet
        Log Format:           text
        Log Layers:           
        Log Level:            info
        Log Workflows:        
        Probe Port:           17546
        Silence Autosupport:  false
        Trident Image:        docker.io/netapp/trident:23.04.0
      Message:                Trident installed
      Namespace:              trident
      Status:                 Installed
      Version:                v23.04.0
    Events:
      Type    Reason      Age    From                        Message
      ----    ------      ----   ----                        -------
      Normal  Installing  2m59s  trident-operator.netapp.io  Installing Trident
      Normal  Installed   2m31s  trident-operator.netapp.io  Trident installed
    

Создание серверной части

Чтобы указать Astra Trident на подписку Azure NetApp Files и место для создания томов, создается серверная часть. На этом шаге требуются сведения о учетной записи, созданной на предыдущем шаге.

  1. Создайте файл backend-secret.yaml и скопируйте в него следующий код YAML. Измените и clientSecret измените правильные Client ID значения для вашей среды.

    apiVersion: v1
    kind: Secret
    metadata:
      name: backend-tbc-anf-secret
    type: Opaque
    stringData:
      clientID: abcde356-bf8e-fake-c111-abcde35613aa
      clientSecret: rR0rUmWXfNioN1KhtHisiSAnoTherboGuskey6pU
    
  2. Создайте файл backend-anf.yaml и скопируйте в него следующий код YAML. Измените subscriptionID, tenantIDlocationи serviceLevel на правильные значения для вашей среды. Используйте подписку subscriptionID Azure, в которой включена служба Azure NetApp Files. tenantIDclientIDПолучите и clientSecret из регистрации приложения в идентификаторе Microsoft Entra с достаточными разрешениями для службы Azure NetApp Files. Регистрация приложения включает роль владельца или участника, предопределенную Azure. Расположение должно быть расположением Azure, которое содержит по крайней мере одну делегированную подсеть, созданную на предыдущем шаге. Он serviceLevel должен соответствовать настроенной serviceLevel для пула емкости в настройке Azure NetApp Files для рабочих нагрузок AKS.

    apiVersion: trident.netapp.io/v1
    kind: TridentBackendConfig
    metadata:
      name: backend-tbc-anf
    spec:
      version: 1
      storageDriverName: azure-netapp-files
      subscriptionID: 12abc678-4774-fake-a1b2-a7abcde39312
      tenantID: a7abcde3-edc1-fake-b111-a7abcde356cf
      location: eastus
      serviceLevel: Premium
      credentials:
        name: backend-tbc-anf-secret
    

    Дополнительные сведения о серверных службах см. в разделе "Параметры конфигурации серверной части Azure NetApp Files" и примеры.

  3. Примените секрет и серверную часть с помощью kubectl apply команды. Сначала примените секрет:

    kubectl apply -f backend-secret.yaml -n trident
    

    Выходные данные команды будут выглядеть примерно так:

    secret/backend-tbc-anf-secret created
    

    Примените серверную часть:

    kubectl apply -f backend-anf.yaml -n trident
    

    Выходные данные команды будут выглядеть примерно так:

    tridentbackendconfig.trident.netapp.io/backend-tbc-anf created
    
  4. Убедитесь, что серверная часть создана с помощью kubectl get команды:

     kubectl get tridentbackends -n trident
    

    Выходные данные команды будут выглядеть примерно так:

    NAME        BACKEND               BACKEND UUID
    tbe-kfrdh   backend-tbc-anf   8da4e926-9dd4-4a40-8d6a-375aab28c566
    

Создание класса хранения

Класс хранения используется для определения того, как единица хранения создается динамически с помощью постоянного тома. Для использования томов Azure NetApp Files необходимо создать класс хранения.

  1. Создайте файл anf-storageclass.yaml и скопируйте в него следующий код YAML:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: azure-netapp-files
    provisioner: csi.trident.netapp.io
    parameters:
      backendType: "azure-netapp-files"
      fsType: "nfs"
    
  2. Создайте класс хранилища с помощью kubectl apply команды:

    kubectl apply -f anf-storageclass.yaml
    

    Выходные данные команды будут выглядеть примерно так:

    storageclass/azure-netapp-files created
    
  3. kubectl get Выполните команду, чтобы просмотреть состояние класса хранилища:

    kubectl get sc
    NAME                 PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
    azure-netapp-files   csi.trident.netapp.io   Delete          Immediate           false                  
    

Создание ПВХ

Утверждение постоянного тома (PVC) — это запрос к хранилищу со стороны пользователя. При создании утверждения постоянного тома Astra Trident автоматически создает том Azure NetApp Files и делает его доступным для рабочих нагрузок Kubernetes для использования.

  1. Создайте файл anf-pvc.yaml и скопируйте в него следующий код YAML. В этом примере требуется объем 1-ТиБ с доступом ReadWriteMany.

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: anf-pvc
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 1Ti
      storageClassName: azure-netapp-files
    
  2. Создайте утверждение постоянного тома kubectl apply с помощью команды:

    kubectl apply -f anf-pvc.yaml
    

    Выходные данные команды будут выглядеть примерно так:

    persistentvolumeclaim/anf-pvc created
    
  3. Чтобы просмотреть сведения о утверждении kubectl get постоянного тома, выполните команду:

    kubectl get pvc
    

    Выходные данные команды будут выглядеть примерно так:

    kubectl get pvc -n trident
    NAME      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS         AGE
    anf-pvc   Bound    pvc-bffa315d-3f44-4770-86eb-c922f567a075   1Ti        RWO            azure-netapp-files   62s
    

Использование постоянного тома

После создания ПВХ Астра Тридент создает постоянный объем. Модуль pod можно подключить и получить доступ к тому Azure NetApp Files.

Следующий манифест можно использовать для определения модуля POD NGINX, который подключает том Azure NetApp Files, созданный на предыдущем шаге. В этом примере том монтируется в /mnt/data.

  1. Создайте файл anf-nginx-pod.yaml и скопируйте в него следующий код YAML:

    kind: Pod
    apiVersion: v1
    metadata:
      name: nginx-pod
    spec:
      containers:
      - name: nginx
        image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        volumeMounts:
        - mountPath: "/mnt/data"
          name: volume
      volumes:
        - name: volume
          persistentVolumeClaim:
            claimName: anf-pvc
    
  2. Создайте pod с помощью kubectl apply команды:

    kubectl apply -f anf-nginx-pod.yaml
    

    Выходные данные команды будут выглядеть примерно так:

    pod/nginx-pod created
    

    Kubernetes создал модуль pod с подключенным томом и доступным в контейнере nginx/mnt/data. Вы можете подтвердить, проверка журналы событий для pod с помощью kubectl describe команды:

    kubectl describe pod nginx-pod
    

    Выходные данные команды будут выглядеть примерно так:

    [...]
    Volumes:
      volume:
        Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
        ClaimName:  anf-pvc
        ReadOnly:   false
      default-token-k7952:
        Type:        Secret (a volume populated by a Secret)
        SecretName:  default-token-k7952
        Optional:    false
    [...]
    Events:
      Type    Reason                  Age   From                     Message
      ----    ------                  ----  ----                     -------
      Normal  Scheduled               15s   default-scheduler        Successfully assigned trident/nginx-pod to brameshb-non-root-test
      Normal  SuccessfulAttachVolume  15s   attachdetach-controller  AttachVolume.Attach succeeded for volume "pvc-bffa315d-3f44-4770-86eb-c922f567a075"
      Normal  Pulled                  12s   kubelet                  Container image "mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine" already present on machine
      Normal  Created                 11s   kubelet                  Created container nginx
      Normal  Started                 10s   kubelet                  Started container nginx
    

Следующие шаги

Astra Trident поддерживает множество функций в Azure NetApp Files. Дополнительные сведения см. в разделе: