Aprovisionamiento de volúmenes SMB de Azure NetApp Files en Azure Kubernetes Service
Después de configurar Azure NetApp Files para Azure Kubernetes Service, puede aprovisionar volúmenes de Azure NetApp Files para Azure Kubernetes Service.
Azure NetApp Files admite volúmenes mediante NFS (NFSv3 o NFSv4.1), SMB y protocolo dual (NFSv3 y SMB, o NFSv4.1 y SMB).
- En este artículo se describen los detalles para el aprovisionamiento de volúmenes SMB de forma estática o dinámica.
- Para obtener información sobre el aprovisionamiento de volúmenes NFS de forma estática o dinámica, consulte Aprovisionamiento de volúmenes NFS de Azure NetApp Files para Azure Kubernetes Service.
- Para obtener información sobre el aprovisionamiento de volúmenes de protocolo dual de forma estática, consulte Aprovisionamiento de volúmenes de protocolo dual de Azure NetApp Files para Azure Kubernetes Service
Configuración estática para aplicaciones que usan volúmenes SMB
En esta sección se describe cómo crear un volumen SMB en Azure NetApp Files y exponer el volumen estáticamente a Kubernetes para que consuma una aplicación en contenedor.
Creación de un volumen SMB
Definición variables para su uso posterior. Reemplace myresourcegroup, mylocation, myaccountname, mypool1, premium, myfilepath, myvolsize, myvolname y vnetid por un valor adecuado para su entorno. La ruta de acceso de archivo debe ser única en todas las cuentas de 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"
Cree un volumen con el comando
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
Creación de un secreto con las credenciales de dominio
Cree un secreto en el clúster de AKS para acceder al servidor de Active Directory (AD) con el comando
kubectl create secret
. El volumen persistente de Kubernetes usará este secreto para acceder al volumen SMB de Azure NetApp Files. Use el siguiente comando para crear el secreto, reemplazandoUSERNAME
por el nombre de usuario,PASSWORD
por la contraseña yDOMAIN_NAME
por el nombre de dominio de AD.kubectl create secret generic smbcreds --from-literal=username=USERNAME --from-literal=password="PASSWORD" --from-literal=domain='DOMAIN_NAME'
Compruebe que se ha creado el secreto.
kubectl get secret NAME TYPE DATA AGE smbcreds Opaque 2 20h
Instalación de un controlador CSI de SMB
Debe instalar una Container Storage Interface (CSI) para crear un SMB PersistentVolume
de Kubernetes.
Instale el controlador CSI de SMB en el clúster con Helm. Asegúrese de establecer la
windows.enabled
opción entrue
: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
Para ver otros métodos para instalar el controlador CSI de SMB, consulte Instalación de la versión maestra del controlador CSI de SMB en un clúster de Kubernetes.
Compruebe que el pod del controlador
csi-smb
se está ejecutando y que cada nodo de trabajo tiene un pod que se ejecuta mediante el comandokubectl 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
Creación del volumen persistente
Enumere los detalles de su volumen con
az netappfiles volume show
. Reemplace las variables por los valores adecuados de la cuenta y el entorno de Azure NetApp Files si no se definen en un paso anterior.az netappfiles volume show \ --resource-group $RESOURCE_GROUP \ --account-name $ANF_ACCOUNT_NAME \ --pool-name $POOL_NAME \ --volume-name "$VOLUME_NAME -o JSON
La siguiente salida es un ejemplo del comando anterior ejecutado con valores reales.
{ ... "creationToken": "myvolname", ... "mountTargets": [ { ... " "smbServerFqdn": "ANF-1be3.contoso.com", ... } ], ... }
Cree un archivo denominado
pv-smb.yaml
y cópielo en el siguiente código YAML. Si es necesario, reemplacemyvolname
porcreationToken
yANF-1be3.contoso.com\myvolname
por el valor delsmbServerFqdn
paso anterior. Asegúrese de incluir el secreto de credenciales de AD junto con el espacio de nombres donde se encuentra el secreto que creó en un paso anterior.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
Cree la notificación del volumen persistente con el comando
kubectl apply
:kubectl apply -f pv-smb.yaml
Compruebe que el estado del volumen persistente esté Disponible con el comando
kubectl describe
:kubectl describe pv pv-smb
Creación de una notificación de volumen persistente
Cree un archivo denominado
pvc-smb.yaml
y cópielo en el siguiente código YAML.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: anf-pvc-smb spec: accessModes: - ReadWriteMany volumeName: anf-pv-smb storageClassName: "" resources: requests: storage: 100Gi
Cree la notificación del volumen persistente con el comando
kubectl apply
:kubectl apply -f pvc-smb.yaml
Compruebe que el estado de la notificación de volumen persistente es Enlazado con el comando kubectl describe:
kubectl describe pvc pvc-smb
Montaje con un pod
Cree un archivo denominado
iis-smb.yaml
y cópielo en el siguiente código YAML. Este archivo se usará para crear un pod de Internet Information Services para montar el volumen en la ruta de acceso/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
Cree el pod con el comando kubectl apply:
kubectl apply -f iis-smb.yaml
Compruebe que el pod está En ejecución y que
/inetpub/wwwroot
se monta desde SMB con el comando kubectl describe :kubectl describe pod iis-pod
La salida del comando es similar al ejemplo siguiente:
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) ...
Compruebe que el volumen se ha montado en el pod con el comando kubectl exec para conectarse al pod y, a continuación, use el comando
dir
en el directorio correcto para comprobar si el volumen está montado y si el tamaño coincide con el tamaño del volumen que ha aprovisionado.kubectl exec -it iis-pod –- cmd.exe
La salida del comando es similar al ejemplo siguiente:
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
Configuración dinámica para aplicaciones que usan volúmenes SMB
En esta sección se explica cómo usar Astra Trident para crear dinámicamente un volumen SMB en Azure NetApp Files y montarlo automáticamente en una aplicación de ventanas en contenedor.
Instale Astra Trident
Para aprovisionar dinámicamente volúmenes SMB, debe instalar Astra Trident versión 22.10 o posterior. El aprovisionamiento dinámico de volúmenes SMB requiere nodos de trabajo de Windows.
Astra Trident es el aprovisionador de almacenamiento dinámico de NetApp que está diseñado para Kubernetes. Simplifique el consumo de almacenamiento para aplicaciones de Kubernetes mediante el controlador Container Storage Interface (CSI) estándar del sector de Astra Trident. Astra Trident se implementa en clústeres de Kubernetes como pods y proporciona servicios de orquestación de almacenamiento dinámico para las cargas de trabajo de Kubernetes.
Trident se puede instalar mediante el operador Trident (manualmente o con Helm) o tridentctl
. Para más información sobre estos métodos de instalación y cómo funcionan, consulte la Guía de instalación.
Instalación de Astra Trident mediante Helm
Helm debe estar instalado en la estación de trabajo para instalar Astra Trident mediante este método. Para conocer otros métodos de instalación de Astra Trident, consulte la Guía de instalación de Astra Trident. Si tiene nodos de trabajo de Windows en el clúster, asegúrese de habilitar Windows con cualquier método de instalación.
Para instalar Astra Trident mediante Helm para un clúster con nodos de trabajo de Windows, ejecute los siguientes comandos:
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
La salida del comando es similar al ejemplo siguiente:
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
Para confirmar que Astra Trident se instaló correctamente, ejecute el siguiente comando
kubectl describe
:kubectl describe torc trident
La salida del comando es similar al ejemplo siguiente:
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
Crear un back-end
Debe crearse un back-end para indicar a Astra Trident la suscripción de Azure NetApp Files y dónde debe crear los volúmenes. Para más información sobre los back-end, consulte Opciones y ejemplos de configuración de back-end en Azure NetApp Files.
Cree un archivo denominado
backend-secret-smb.yaml
y cópielo en el siguiente código YAML. CambieClient ID
yclientSecret
a los valores correctos para su entorno.apiVersion: v1 kind: Secret metadata: name: backend-tbc-anf-secret type: Opaque stringData: clientID: abcde356-bf8e-fake-c111-abcde35613aa clientSecret: rR0rUmWXfNioN1KhtHisiSAnoTherboGuskey6pU
Cree un archivo denominado
backend-anf-smb.yaml
y cópielo en el siguiente código YAML. CambieClientID
,clientSecret
,subscriptionID
,tenantID
,location
yserviceLevel
a los valores correctos para su entorno.tenantID
,clientID
yclientSecret
se pueden encontrar en un Registro de aplicación en Microsoft Entra ID (AD) con permisos suficientes para el servicio Azure NetApp Files. El registro de la aplicación incluye el rol Propietario o Colaborador predefinido por Azure. La ubicación de Azure debe contener al menos una subred delegada.serviceLevel
debe coincidir con elserviceLevel
configurado para el grupo de capacidad en Configuración de Azure NetApp Files para cargas de trabajo de AKS.apiVersion: trident.netapp.io/v1 kind: TridentBackendConfig metadata: name: backend-tbc-anf-smb 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 nasType: smb
Cree el secreto y el back-end con el comando
kubectl apply
.Creación del secreto:
kubectl apply -f backend-secret.yaml -n trident
La salida del comando es similar al ejemplo siguiente:
secret/backend-tbc-anf-secret created
Creación del back-end:
kubectl apply -f backend-anf.yaml -n trident
La salida del comando es similar al ejemplo siguiente:
tridentbackendconfig.trident.netapp.io/backend-tbc-anf created
Para comprobar que el back-end se ha creado, ejecute el siguiente comando:
kubectl get tridentbackends -n trident
La salida del comando es similar al ejemplo siguiente:
NAME BACKEND BACKEND UUID tbe-9shfq backend-tbc-anf-smb 09cc2d43-8197-475f-8356-da7707bae203
Creación de un secreto con las credenciales de dominio para SMB
Cree un secreto en el clúster de AKS para acceder al servidor de AD con el comando
kubectl create secret
. El volumen persistente de Kubernetes usará esta información para acceder al volumen SMB de Azure NetApp Files. Use el siguiente comando, reemplazandoDOMAIN_NAME\USERNAME
por el nombre de dominio y el nombre de usuario yPASSWORD
por la contraseña.kubectl create secret generic smbcreds --from-literal=username=DOMAIN_NAME\USERNAME –from-literal=password="PASSWORD"
Vamos a comprobar que el secreto se ha creado.
kubectl get secret
La salida se parece a la del ejemplo siguiente:
NAME TYPE DATA AGE smbcreds Opaque 2 2h
Creación de una clase de almacenamiento
Una clase de almacenamiento se usa para definir cómo se crea dinámicamente una unidad de almacenamiento con un volumen persistente. Para utilizar volúmenes de Azure NetApp Files, se debe crear una clase de almacenamiento.
Cree un archivo denominado
anf-storageclass-smb.yaml
y cópielo en el siguiente código 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"
Cree la clase de almacenamiento con el comando
kubectl apply
:kubectl apply -f anf-storageclass-smb.yaml
La salida del comando es similar al ejemplo siguiente:
storageclass/anf-sc-smb created
Ejecute el comando
kubectl get
para ver el estado de la clase de almacenamiento:kubectl get sc anf-sc-smb NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE anf-sc-smb csi.trident.netapp.io Delete Immediate true 13s
Creación de un PVC
Una reclamación de volumen persistente (PVC) es una solicitud de almacenamiento realizada por un usuario. Tras la creación de una clase notificación de volumen persistente, Astra Trident crea automáticamente un recurso compartido SMB de Azure NetApp Files y lo pone a disposición para su consumo por las cargas de trabajo de Kubernetes.
Cree un archivo llamado
anf-pvc-smb.yaml
y copie el siguiente YAML. En este ejemplo, se crea un volumen de 100 GiB con accesoReadWriteMany
y usa la clase de almacenamiento creada en Creación de una clase de almacenamiento.kind: PersistentVolumeClaim apiVersion: v1 metadata: name: anf-pvc-smb spec: accessModes: - ReadWriteMany resources: requests: storage: 100Gi storageClassName: anf-sc-smb
Cree la notificación del volumen persistente con el comando
kubectl apply
:kubectl apply -f anf-pvc-smb.yaml
La salida del comando es similar al ejemplo siguiente:
persistentvolumeclaim/anf-pvc-smb created
Para ver información sobre la notificación de volumen persistente, ejecute el comando
kubectl get
:kubectl get pvc
La salida del comando es similar al ejemplo siguiente:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE anf-pvc-smb Bound pvc-209268f5-c175-4a23-b61b-e34faf5b6239 100Gi RWX anf-sc-smb 5m38s
Para ver el volumen persistente creado por Astra Trident, ejecute el siguiente comando
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
Uso del volumen persistente
Una vez creada la PVC, se puede activar un pod para acceder al volumen de Azure NetApp Files. El siguiente manifiesto se puede usar para definir un pod de Internet Information Services (IIS) que monte el recurso compartido SMB de Azure NetApp Files que se creó en el paso anterior. En este ejemplo, el volumen se monta en /inetpub/wwwroot
.
Cree un archivo denominado
anf-iis-pod.yaml
y cópielo en el siguiente código 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
Cree la implementación con el comando
kubectl apply
:kubectl apply -f anf-iis-deploy-pod.yaml
La salida del comando es similar al ejemplo siguiente:
pod/iis-pod created
Compruebe que el pod se está ejecutando y se monta a través de SMB en
/inetpub/wwwroot
mediante el comandokubectl describe
:kubectl describe pod iis-pod
La salida del comando es similar al ejemplo siguiente:
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)
Compruebe que su volumen se ha montado en el pod mediante kubectl exec para conectarse al pod. Y, a continuación, use el comando
dir
en el directorio correcto para comprobar si el volumen está montado y el tamaño coincide con el tamaño del volumen que aprovisionó.kubectl exec -it iis-pod –- cmd.exe
La salida del comando es similar al ejemplo siguiente:
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
Pasos siguientes
Astra Trident admite muchas características con Azure NetApp Files. Para más información, consulte:
Azure Kubernetes Service