Поделиться через


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

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

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

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

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

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

  1. Определите переменные для последующего использования. Замените myresourcegroup, mylocation, myaccountname, mypool1, premium, myfilepath, myvolsize, myvolsize и virtnetid соответствующим значением для вашей среды. Файловый путь должен быть уникальным в пределах всех учетных записей 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 команды.

    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 CIFS
    

Создание секрета с учетными данными домена

  1. Создайте секрет в кластере AKS для доступа к серверу Active Directory (AD) с помощью kubectl create secret команды. Этот секрет будет использоваться постоянным томом Kubernetes для доступа к тому SMB Azure NetApp Files. Используйте следующую команду, чтобы создать секрет, заменив USERNAME имя пользователя, PASSWORD пароль и DOMAIN_NAME доменное имя для AD.

        kubectl create secret generic smbcreds --from-literal=username=USERNAME --from-literal=password="PASSWORD" --from-literal=domain='DOMAIN_NAME'
    
  2. Проверьте, создан ли секрет.

       kubectl get secret
       NAME       TYPE     DATA   AGE
       smbcreds   Opaque   2      20h
    

Установка драйвера CSI SMB

Чтобы создать SMB PersistentVolumeKubernetes, необходимо установить драйвер интерфейса хранилища контейнеров (CSI).

  1. Установите драйвер CSI SMB в кластере с помощью helm. Обязательно установите windows.enabled для параметра trueзначение :

    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.13.0 --set windows.enabled=true
    

    Другие методы установки драйвера CSI SMB см. в разделе "Установка главного драйвера SMB CSI" в кластере Kubernetes.

  2. Убедитесь, что csi-smb модуль pod контроллера запущен, и каждый рабочий узел имеет модуль pod, работающий kubectl get pods с помощью команды:

    kubectl get pods -n kube-system | grep csi-smb
    
    csi-smb-controller-68df7b4758-xf2m9   3/3     Running   0          3m46s
    csi-smb-node-s6clj                    3/3     Running   0          3m47s
    csi-smb-node-win-tfxvk                3/3     Running   0          3m47s
    

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

  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": "myvolname",
      ...
      "mountTargets": [
        {
          ...
          "
             "smbServerFqdn": "ANF-1be3.contoso.com",
          ...
        }
      ],
      ...
    }
    
  2. Создайте файл pv-smb.yaml и скопируйте в него следующий код YAML. При необходимости замените myvolname creationToken и замените ANF-1be3.contoso.com\myvolname значением предыдущего smbServerFqdn шага. Не забудьте включить секрет учетных данных AD вместе с пространством имен, где находится секрет, созданный на предыдущем шаге.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: anf-pv-smb
    spec:
      storageClassName: ""
      capacity:
        storage: 100Gi
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      mountOptions:
        - dir_mode=0777
        - file_mode=0777
        - vers=3.0
      csi:
        driver: smb.csi.k8s.io
        readOnly: false
        volumeHandle: myvolname  # make sure it's a unique name in the cluster
        volumeAttributes:
          source: \\ANF-1be3.contoso.com\myvolname
        nodeStageSecretRef:
          name: smbcreds
          namespace: default
    
  3. Создайте постоянный том с помощью kubectl apply команды:

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

    kubectl describe pv pv-smb
    

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

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

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

    kubectl apply -f pvc-smb.yaml
    

    Убедитесь, что состояние утверждения постоянного тома привязано с помощью команды kubectl описать:

    kubectl describe pvc pvc-smb
    

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

  1. Создайте файл iis-smb.yaml и скопируйте в него следующий код YAML. Этот файл будет использоваться для создания модуля pod службы IIS для подключения тома к пути/inetpub/wwwroot.

    apiVersion: v1
    kind: Pod 
    metadata:
      name: iis-pod
      labels:
         app: web
    spec:
      nodeSelector:
        "kubernetes.io/os": windows
      volumes:
      - name: smb
        persistentVolumeClaim:
          claimName: anf-pvc-smb 
      containers:
      - name: web
        image: mcr.microsoft.com/windows/servercore/iis:windowsservercore 
        resources:
          limits:
            cpu: 1
            memory: 800M
        ports:
          - containerPort: 80
        volumeMounts:
        - name: smb
          mountPath: "/inetpub/wwwroot"
          readOnly: false
    
  2. Создайте pod с помощью команды kubectl apply :

    kubectl apply -f iis-smb.yaml
    
  3. Убедитесь, что модуль pod запущен и /inetpub/wwwroot подключен из SMB с помощью команды kubectl описать:

    kubectl describe pod iis-pod
    

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

    Name:         iis-pod
    Namespace:    default
    Priority:     0
    Node:         akswin000001/10.225.5.246
    Start Time:   Fri, 05 May 2023 09:34:41 -0400
    Labels:       app=web
    Annotations:  <none>
    Status:       Running
    IP:           10.225.5.248
    IPs:
      IP:  10.225.5.248
    Containers:
      web:
        Container ID:   containerd://39a1659b6a2b6db298df630237b2b7d959d1b1722edc81ce9b1bc7f06237850c
        Image:          mcr.microsoft.com/windows/servercore/iis:windowsservercore
        Image ID:       mcr.microsoft.com/windows/servercore/iis@sha256:0f0114d0f6c6ee569e1494953efdecb76465998df5eba951dc760ac5812c7409
        Port:           80/TCP
        Host Port:      0/TCP
        State:          Running
          Started:      Fri, 05 May 2023 09:34:55 -0400
        Ready:          True
        Restart Count:  0
        Limits:
          cpu:     1
          memory:  800M
        Requests:
          cpu:        1
          memory:     800M
        Environment:  <none>
        Mounts:
          /inetpub/wwwroot from smb (rw)
          /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-mbnv8 (ro)
    ...
    
  4. Убедитесь, что том подключен к pod с помощью команды kubectl exec для подключения к pod, а затем используйте dir команду в правильном каталоге, чтобы проверить, подключен ли том, и размер соответствует размеру подготовленного тома.

    kubectl exec -it iis-pod –- cmd.exe
    

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

    Microsoft Windows [Version 10.0.20348.1668]
    (c) Microsoft Corporation. All rights reserved.
    
    C:\>cd /inetpub/wwwroot
    
    C:\inetpub\wwwroot>dir
     Volume in drive C has no label.
     Volume Serial Number is 86BB-AA55
    
     Directory of C:\inetpub\wwwroot
    
    05/04/2023  08:15 PM    <DIR>          .
    05/04/2023  08:15 PM    <DIR>          ..
               0 File(s)              0 bytes
               2 Dir(s)  107,373,838,336 bytes free
    

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

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

Установка Astra Trident

Для динамической подготовки томов SMB необходимо установить Astra Trident версии 22.10 или более поздней. Для динамической подготовки томов SMB требуются рабочие узлы Windows.

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

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

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

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

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

    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 –-set windows=true
    

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

    NAME: trident
    LAST DEPLOYED: Fri May  5 14:23:05 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:               true
    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  74s   trident-operator.netapp.io  Installing Trident
      Normal  Installed   46s   trident-operator.netapp.io  Trident installed
    

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

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

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

    apiVersion: v1
    kind: Secret
    metadata:
      name: backend-tbc-anf-secret
    type: Opaque
    stringData:
      clientID: 00001111-aaaa-2222-bbbb-3333cccc4444
      clientSecret: rR0rUmWXfNioN1KhtHisiSAnoTherboGuskey6pU
    
  2. Создайте файл backend-anf-smb.yaml и скопируйте в него следующий код YAML. Измените ClientID, , и tenantIDlocationclientSecretsubscriptionIDserviceLevel на правильные значения для вашей среды. clientIDИдентификатор tenantID, который 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-smb
    spec:
      version: 1
      storageDriverName: azure-netapp-files
      subscriptionID: aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
      tenantID: aaaabbbb-0000-cccc-1111-dddd2222eeee
      location: eastus
      serviceLevel: Premium
      credentials:
        name: backend-tbc-anf-secret
      nasType: smb
    
  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 tridentbackends -n trident
    

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

    NAME        BACKEND               BACKEND UUID
    tbe-9shfq   backend-tbc-anf-smb   09cc2d43-8197-475f-8356-da7707bae203
    

Создание секрета с учетными данными домена для SMB

  1. Создайте секрет в кластере AKS для доступа к серверу AD с помощью kubectl create secret команды. Эти сведения будут использоваться постоянным томом Kubernetes для доступа к тому SMB Azure NetApp Files. Используйте следующую команду, заменив DOMAIN_NAME\USERNAME доменное имя и имя пользователя и PASSWORD пароль.

    kubectl create secret generic smbcreds --from-literal=username=DOMAIN_NAME\USERNAME –from-literal=password="PASSWORD" 
    
  2. Убедитесь, что секрет создан.

    kubectl get secret
    

    Выходные данные похожи на следующий пример:

    NAME       TYPE     DATA   AGE
    smbcreds   Opaque   2      2h
    

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

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

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

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: anf-sc-smb
    provisioner: csi.trident.netapp.io
    allowVolumeExpansion: true
    parameters:
      backendType: "azure-netapp-files"
      trident.netapp.io/nasType: "smb"
      csi.storage.k8s.io/node-stage-secret-name: "smbcreds"
      csi.storage.k8s.io/node-stage-secret-namespace: "default"
    
  2. Создайте класс хранилища с помощью kubectl apply команды:

    kubectl apply -f anf-storageclass-smb.yaml
    

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

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

    kubectl get sc anf-sc-smb
    NAME         PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
    anf-sc-smb   csi.trident.netapp.io   Delete          Immediate           true                   13s
    

Создание ПВХ

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

  1. Создайте файл с именем anf-pvc-smb.yaml и скопируйте следующий YAML. В этом примере создается том 100 ГиБ с ReadWriteMany доступом и использует класс хранилища, созданный в классе хранилища.

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

    kubectl apply -f anf-pvc-smb.yaml
    

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

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

    kubectl get pvc
    

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

    NAME          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    anf-pvc-smb   Bound    pvc-209268f5-c175-4a23-b61b-e34faf5b6239   100Gi      RWX            anf-sc-smb     5m38s
    
  4. Чтобы просмотреть постоянный том, созданный Astra Trident, выполните следующую kubectl get команду:

    kubectl get pv
    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                 STORAGECLASS   REASON   AGE
    pvc-209268f5-c175-4a23-b61b-e34faf5b6239   100Gi      RWX            Delete           Bound    default/anf-pvc-smb   anf-sc-smb              5m52s
    

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

После создания PVC можно настроить модуль pod для доступа к тому Azure NetApp Files. Следующий манифест можно использовать для определения модуля pod службы IIS (IIS), который подключает общую папку SMB Azure NetApp Files, созданную на предыдущем шаге. В этом примере том монтируется в /inetpub/wwwroot.

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

    apiVersion: v1
    kind: Pod 
    metadata:
      name: iis-pod
      labels:
         app: web
    spec:
      nodeSelector:
        "kubernetes.io/os": windows
      volumes:
      - name: smb
        persistentVolumeClaim:
          claimName: anf-pvc-smb 
      containers:
      - name: web
        image: mcr.microsoft.com/windows/servercore/iis:windowsservercore 
        resources:
          limits:
            cpu: 1
            memory: 800M
        ports:
          - containerPort: 80
        volumeMounts:
        - name: smb
          mountPath: "/inetpub/wwwroot"
          readOnly: false
    
  2. Создайте развертывание с помощью kubectl apply команды:

    kubectl apply -f anf-iis-deploy-pod.yaml
    

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

    pod/iis-pod created
    

    Убедитесь, что модуль pod запущен и подключен через SMB с /inetpub/wwwroot помощью kubectl describe команды:

    kubectl describe pod iis-pod
    

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

    Name:         iis-pod
    Namespace:    default
    Priority:     0
    Node:         akswin000001/10.225.5.246
    Start Time:   Fri, 05 May 2023 15:16:36 -0400
    Labels:       app=web
    Annotations:  <none>
    Status:       Running
    IP:           10.225.5.252
    IPs:
      IP:  10.225.5.252
    Containers:
      web:
        Container ID:   containerd://1e4959f2b49e7ad842b0ec774488a6142ac9152ca380c7ba4d814ae739d5ed3e
        Image:          mcr.microsoft.com/windows/servercore/iis:windowsservercore
        Image ID:       mcr.microsoft.com/windows/servercore/iis@sha256:0f0114d0f6c6ee569e1494953efdecb76465998df5eba951dc760ac5812c7409
        Port:           80/TCP
        Host Port:      0/TCP
        State:          Running
          Started:      Fri, 05 May 2023 15:16:44 -0400
        Ready:          True
        Restart Count:  0
        Limits:
          cpu:     1
          memory:  800M
        Requests:
          cpu:        1
          memory:     800M
        Environment:  <none>
        Mounts:
          /inetpub/wwwroot from smb (rw)
          /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-zznzs (ro)
    
  3. Убедитесь, что том подключен к модулем pod с помощью kubectl exec для подключения к pod. Затем используйте dir команду в правильном каталоге, чтобы проверить, подключен ли том и размер соответствует размеру подготовленного тома.

    kubectl exec -it iis-pod –- cmd.exe
    

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

    Microsoft Windows [Version 10.0.20348.1668]
    (c) Microsoft Corporation. All rights reserved.
    
    C:\>cd /inetpub/wwwroot
    
    C:\inetpub\wwwroot>dir
     Volume in drive C has no label.
     Volume Serial Number is 86BB-AA55
    
     Directory of C:\inetpub\wwwroot
    
    05/05/2023  01:38 AM    <DIR>          .
    05/05/2023  01:38 AM    <DIR>          ..
               0 File(s)              0 bytes
               2 Dir(s)  107,373,862,912 bytes free
    
    C:\inetpub\wwwroot>exit
    

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

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