Aprowizuj woluminy NFS usługi Azure NetApp Files dla usługi Azure Kubernetes Service

Po skonfigurowaniu usługi Azure NetApp Files dla usługi Azure Kubernetes Service można aprowizować woluminy usługi Azure NetApp Files dla usługi Azure Kubernetes Service.

Usługa Azure NetApp Files obsługuje woluminy przy użyciu systemu plików NFS (NFSv3 lub NFSv4.1), SMB lub podwójnego protokołu (NFSv3 i SMB lub NFSv4.1 i SMB).

Statyczne konfigurowanie dla aplikacji korzystających z woluminów NFS

W tej sekcji opisano sposób tworzenia woluminu NFS w usłudze Azure NetApp Files i uwidaczniania woluminu statycznie na platformie Kubernetes. W tym artykule opisano również sposób używania woluminu z konteneryzowaną aplikacją.

Tworzenie woluminu NFS

  1. Zdefiniuj zmienne dla późniejszego użycia. Zastąp ciąg myresourcegroup, mylocation, myaccountname, mypool1, premium, myfilepath, myvolsize, myvolname, vnetid i anfSubnetID odpowiednią wartością z konta i środowiska. Ścieżka pliku musi być unikatowa we wszystkich kontach 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. Utwórz wolumin przy użyciu az netappfiles volume create polecenia . Aby uzyskać więcej informacji, zobacz Tworzenie woluminu NFS dla usługi 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
    

Tworzenie woluminu trwałego

  1. Wyświetl szczegóły woluminu przy użyciu az netappfiles volume show polecenia . Zastąp zmienne odpowiednimi wartościami z konta i środowiska usługi Azure NetApp Files, jeśli nie zostały zdefiniowane w poprzednim kroku.

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

    Poniższe dane wyjściowe to przykład powyższego polecenia wykonanego z rzeczywistymi wartościami.

    {
      ...
      "creationToken": "myfilepath2",
      ...
      "mountTargets": [
        {
          ...
          "ipAddress": "10.0.0.4",
          ...
        }
      ],
      ...
    }
    
  2. Utwórz plik o nazwie pv-nfs.yaml i skopiuj go w następującym języku YAML. Upewnij się, że serwer jest zgodny z wyjściowym adresem IP z kroku 1, a ścieżka jest zgodna z danymi wyjściowymi z creationToken powyższych. Pojemność musi być również zgodna z rozmiarem woluminu z powyższego kroku.

    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. Utwórz wolumin trwały przy użyciu kubectl apply polecenia :

    kubectl apply -f pv-nfs.yaml
    
  4. Sprawdź, czy stan woluminu trwałego jest dostępny za pomocą kubectl describe polecenia :

    kubectl describe pv pv-nfs
    

Tworzenie trwałego oświadczenia woluminu

  1. Utwórz plik o nazwie pvc-nfs.yaml i skopiuj go w następującym języku YAML. Ten manifest tworzy pvc o nazwie pvc-nfs dla magazynu 100Gi i ReadWriteMany trybu dostępu, pasując do utworzonego pv.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-nfs
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: ""
      resources:
        requests:
          storage: 100Gi
    
  2. Utwórz oświadczenie trwałego woluminu kubectl apply przy użyciu polecenia :

    kubectl apply -f pvc-nfs.yaml
    
  3. Sprawdź, czy stan oświadczenia trwałego woluminu ma wartość Powiązana przy użyciu kubectl describe polecenia :

    kubectl describe pvc pvc-nfs
    

Instalowanie za pomocą zasobnika

  1. Utwórz plik o nazwie nginx-nfs.yaml i skopiuj go w następującym języku YAML. Ten manifest definiuje nginx zasobnik, który używa trwałego oświadczenia woluminu.

    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. Utwórz zasobnik przy użyciu kubectl apply polecenia :

    kubectl apply -f nginx-nfs.yaml
    
  3. Sprawdź, czy zasobnik jest uruchomiony przy użyciu kubectl describe polecenia :

    kubectl describe pod nginx-nfs
    
  4. Sprawdź, czy wolumin został zainstalowany na zasobniku przy użyciu polecenia kubectl exec , aby nawiązać połączenie z zasobnikem, a następnie sprawdź df -h , czy wolumin jest zainstalowany.

    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
    ...
    

Dynamiczne konfigurowanie dla aplikacji korzystających z woluminów NFS

Narzędzie Astra Trident może służyć do dynamicznej aprowizacji plików NFS lub SMB w usłudze Azure NetApp Files. Dynamiczne aprowizowane woluminy SMB są obsługiwane tylko w przypadku węzłów procesu roboczego systemu Windows.

W tej sekcji opisano sposób używania narzędzia Astra Trident do dynamicznego tworzenia woluminu NFS w usłudze Azure NetApp Files i automatycznego instalowania go w konteneryzowanej aplikacji.

Instalowanie narzędzia Astra Trident

Aby dynamicznie aprowizować woluminy NFS, należy zainstalować aplikację Astra Trident. Astra Trident jest dynamicznym aprowizatorem magazynu netApp, który został specjalnie utworzony dla platformy Kubernetes. Uprość zużycie magazynu dla aplikacji Kubernetes przy użyciu standardowego sterownika interfejsu CSI (Container Storage Interface) firmy Astra Trident. Usługa Astra Trident wdraża w klastrach Kubernetes jako zasobniki i udostępnia dynamiczne usługi orkiestracji magazynu dla obciążeń Kubernetes.

Trident można zainstalować przy użyciu operatora Trident (ręcznie lub przy użyciu narzędzia Helm) lub tridentctl. Aby dowiedzieć się więcej o tych metodach instalacji i sposobie ich działania, zobacz Astra Trident Install Guide (Przewodnik instalacji narzędzia Astra Trident).

Instalowanie narzędzia Astra Trident przy użyciu narzędzia Helm

Program Helm musi być zainstalowany na stacji roboczej, aby zainstalować narzędzie Astra Trident przy użyciu tej metody. Aby zapoznać się z innymi metodami instalowania narzędzia Astra Trident, zobacz Astra Trident Install Guide (Przewodnik instalacji narzędzia Astra Trident).

  1. Aby zainstalować narzędzie Astra Trident przy użyciu programu Helm dla klastra z tylko węzłami roboczymi systemu Linux, uruchom następujące polecenia:

    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
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    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. Aby potwierdzić, że aplikacja Astra Trident została pomyślnie zainstalowana, uruchom następujące kubectl describe polecenie:

    kubectl describe torc trident
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    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
    

Tworzenie zaplecza

Aby poinstruować Astra Trident o subskrypcji usługi Azure NetApp Files i miejscu, w którym musi utworzyć woluminy, zostanie utworzone zaplecze. Ten krok wymaga szczegółowych informacji o koncie utworzonym w poprzednim kroku.

  1. Utwórz plik o nazwie backend-secret.yaml i skopiuj go w następującym języku YAML. Zmień wartości Client ID i clientSecret na poprawne dla danego środowiska.

    apiVersion: v1
    kind: Secret
    metadata:
      name: backend-tbc-anf-secret
    type: Opaque
    stringData:
      clientID: abcde356-bf8e-fake-c111-abcde35613aa
      clientSecret: rR0rUmWXfNioN1KhtHisiSAnoTherboGuskey6pU
    
  2. Utwórz plik o nazwie backend-anf.yaml i skopiuj go w następującym języku YAML. Zmień wartości subscriptionID, , locationtenantIDi serviceLevel na poprawne dla danego środowiska. subscriptionID Użyj elementu dla subskrypcji platformy Azure, w której włączono usługę Azure NetApp Files. tenantIDUzyskaj identyfikator , clientIDi clientSecret z rejestracji aplikacji w usłudze Microsoft Entra ID z wystarczającymi uprawnieniami dla usługi Azure NetApp Files. Rejestracja aplikacji obejmuje rolę Właściciel lub Współautor wstępnie zdefiniowaną przez platformę Azure. Lokalizacja musi być lokalizacją platformy Azure zawierającą co najmniej jedną delegowana podsieć utworzoną w poprzednim kroku. Element serviceLevel musi być zgodny ze skonfigurowanym serviceLevel dla puli pojemności w temacie Konfigurowanie obciążeń usługi Azure NetApp Files dla usługi 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
    

    Aby uzyskać więcej informacji na temat zapleczy, zobacz Opcje konfiguracji zaplecza i przykłady usługi Azure NetApp Files.

  3. Zastosuj wpis tajny i zaplecze przy użyciu kubectl apply polecenia . Najpierw zastosuj wpis tajny:

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

    Dane wyjściowe polecenia przypominają następujący przykład:

    secret/backend-tbc-anf-secret created
    

    Zastosuj zaplecze:

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

    Dane wyjściowe polecenia przypominają następujący przykład:

    tridentbackendconfig.trident.netapp.io/backend-tbc-anf created
    
  4. Upewnij się, że zaplecze zostało utworzone przy użyciu kubectl get polecenia :

     kubectl get tridentbackends -n trident
    

    Dane wyjściowe polecenia przypominają następujący przykład:

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

Tworzenie klasy magazynu

Klasa magazynu służy do definiowania sposobu dynamicznego tworzenia jednostki magazynu przy użyciu woluminu trwałego. Aby korzystać z woluminów usługi Azure NetApp Files, należy utworzyć klasę magazynu.

  1. Utwórz plik o nazwie anf-storageclass.yaml i skopiuj go w następującym pliku 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. Utwórz klasę magazynu przy użyciu kubectl apply polecenia :

    kubectl apply -f anf-storageclass.yaml
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    storageclass/azure-netapp-files created
    
  3. Uruchom polecenie , kubectl get aby wyświetlić stan klasy magazynu:

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

Tworzenie pcv

Oświadczenie trwałego woluminu (PVC) jest żądaniem magazynu przez użytkownika. Po utworzeniu trwałego oświadczenia woluminu usługa Astra Trident automatycznie tworzy wolumin usługi Azure NetApp Files i udostępnia go dla obciążeń Kubernetes do użycia.

  1. Utwórz plik o nazwie anf-pvc.yaml i skopiuj go w następującym języku YAML. W tym przykładzie wymagany jest wolumin 1-TiB z dostępem ReadWriteMany.

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: anf-pvc
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 1Ti
      storageClassName: azure-netapp-files
    
  2. Utwórz oświadczenie trwałego woluminu za kubectl apply pomocą polecenia :

    kubectl apply -f anf-pvc.yaml
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    persistentvolumeclaim/anf-pvc created
    
  3. Aby wyświetlić informacje o trwałym oświadczeniu woluminu, uruchom kubectl get polecenie:

    kubectl get pvc
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    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
    

Używanie woluminu trwałego

Po utworzeniu pvc Astra Trident tworzy wolumin trwały. Zasobnik można połączyć w celu zainstalowania i uzyskania dostępu do woluminu usługi Azure NetApp Files.

Poniższy manifest może służyć do definiowania zasobnika NGINX, który instaluje wolumin usługi Azure NetApp Files utworzony w poprzednim kroku. W tym przykładzie wolumin jest instalowany pod adresem /mnt/data.

  1. Utwórz plik o nazwie anf-nginx-pod.yaml i skopiuj go w następującym pliku 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. Utwórz zasobnik przy użyciu kubectl apply polecenia :

    kubectl apply -f anf-nginx-pod.yaml
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    pod/nginx-pod created
    

    Platforma Kubernetes utworzyła zasobnik z zainstalowanym woluminem i dostępnym w kontenerze nginx pod adresem /mnt/data. Możesz potwierdzić, sprawdzając dzienniki zdarzeń zasobnika przy użyciu kubectl describe polecenia :

    kubectl describe pod nginx-pod
    

    Dane wyjściowe polecenia przypominają następujący przykład:

    [...]
    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
    

Następne kroki

Aplikacja Astra Trident obsługuje wiele funkcji w usłudze Azure NetApp Files. Aby uzyskać więcej informacji, zobacz: