Provisionar os volumes SMB do Azure NetApp Files para o Serviço de Kubernetes do Azure
Depois de configurar o Azure NetApp Files para o Serviço de Kubernetes do Azure, você pode provisionar os volumes do Azure NetApp Files para um Serviço de Kubernetes do Azure.
O Azure NetApp Files dá suporte aos volumes que utilizam NFS (NFSv3 ou NFSv4.1), SMB e protocolo duplo (NFSv3 e SMB ou NFSv4.1 e SMB).
- Este artigo descreve detalhes para provisionar volumes SMB de forma estática e dinâmica.
- Para obter informações sobre como provisionar volumes NFS de forma estática ou dinâmica, consulte Provisionar volumes NFS do Azure NetApp Files para o Serviço de Kubernetes do Azure.
- Para obter informações sobre como provisionar volumes de protocolo duplo de forma estática, consulte Provisionar volumes de protocolo duplo do Azure NetApp Files para o Serviço de Kubernetes do Azure
Configuração estática para aplicativos que usam volumes SMB
Esta seção descreve como criar um volume SMB no Azure NetApp Files e expor o volume estaticamente ao Kubernetes para que um aplicativo conteinerizado o consuma.
Criar um volume SMB
Definir variáveis para usar mais tarde. Substitua myresourcegroup, mylocation, myaccountname, mypool1, premium, myfilepath, myvolsize, myvolname e vnetid por um valor apropriado para o seu ambiente. O caminho do arquivo deve ser exclusivo em todas as contas do 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"
Crie um volume usando o 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
Criar um segredo com as credenciais de domínio
Crie um segredo no cluster do AKS para acessar o servidor do AD (Active Directory) usando o comando
kubectl create secret
. Esse segredo será usado pelo volume persistente do Kubernetes para acessar o volume SMB do Azure NetApp Files. Use o comando a seguir para criar o segredo, substituindoUSERNAME
pelo seu nome de usuário,PASSWORD
por sua senha eDOMAIN_NAME
pelo seu nome de domínio do AD.kubectl create secret generic smbcreds --from-literal=username=USERNAME --from-literal=password="PASSWORD" --from-literal=domain='DOMAIN_NAME'
Verifique se o segredo foi criado.
kubectl get secret NAME TYPE DATA AGE smbcreds Opaque 2 20h
Instalar um driver CSI do SMB
Você deve instalar um driver CSI (Interface de Armazenamento de Contêiner) para criar um SMB PersistentVolume
do Kubernetes.
Instale o driver CSI do SMB em seu cluster usando helm. Certifique-se de definir a opção
windows.enabled
comotrue
: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 consultar outros métodos de instalação do Driver CSI do SMB, consulte Instalar a versão mestre do driver CSI do SMB em um cluster do Kubernetes.
Verifique se o pod do controlador
csi-smb
está em execução e se cada nó de trabalho tem um pod em execução usando o 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
Criar o volume persistente
Listar os detalhes do volume usando
az netappfiles volume show
. Substitua as variáveis pelos valores apropriados de sua conta e ambiente do Azure NetApp Files caso não as tenha definido em alguma etapa anterior.az netappfiles volume show \ --resource-group $RESOURCE_GROUP \ --account-name $ANF_ACCOUNT_NAME \ --pool-name $POOL_NAME \ --volume-name "$VOLUME_NAME -o JSON
A saída a seguir é um exemplo do comando acima executado com valores reais.
{ ... "creationToken": "myvolname", ... "mountTargets": [ { ... " "smbServerFqdn": "ANF-1be3.contoso.com", ... } ], ... }
Crie um arquivo chamado
pv-smb.yaml
e copie no YAML a seguir. Se necessário, substituamyvolname
porcreationToken
e substituaANF-1be3.contoso.com\myvolname
pelo valor desmbServerFqdn
da etapa anterior. Certifique-se de incluir seu segredo de credenciais do AD juntamente com o namespace em que o segredo está localizado, criado em uma etapa 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
Crie o volume persistente usando o comando
kubectl apply
:kubectl apply -f pv-smb.yaml
Verifique se o status do volume persistente é Disponível usando o comando
kubectl describe
:kubectl describe pv pv-smb
Criar uma declaração de volume persistente
Crie um nome de arquivo
pvc-smb.yaml
e copie o YAML a seguir.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: anf-pvc-smb spec: accessModes: - ReadWriteMany volumeName: anf-pv-smb storageClassName: "" resources: requests: storage: 100Gi
Crie a declaração do volume persistente usando o comando
kubectl apply
:kubectl apply -f pvc-smb.yaml
Verifique se o status da declaração de volume persistente é Limitado usando o comando kubectl describe:
kubectl describe pvc pvc-smb
Montar com um pod
Crie um arquivo chamado
iis-smb.yaml
e copie no YAML a seguir. Esse arquivo será usado para criar um pod dos Serviços de Informações da Internet para montar o volume no caminho/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
Crie o pod usando o comando kubectl apply:
kubectl apply -f iis-smb.yaml
Verifique se o pod está Em execução e se
/inetpub/wwwroot
está montado no SMB usando o comando kubectl describe:kubectl describe pod iis-pod
A saída do comando é semelhante ao seguinte exemplo:
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) ...
Verifique se o volume foi montado no pod usando o comando kubectl exec para se conectar ao pod e, em seguida, use o comando
dir
no diretório correto para conferir se o volume está montado e o tamanho corresponde ao tamanho do volume provisionado.kubectl exec -it iis-pod –- cmd.exe
A saída do comando é semelhante ao seguinte exemplo:
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
Configuração dinâmica para aplicativos que usam volumes SMB
Esta seção descreve como usar o Astra Trident para criar de forma dinâmica um volume SMB no Azure NetApp Files e montá-lo automaticamente em um aplicativo conteinerizado.
Instale o Astra Trident
Para provisionar volumes SMB dinamicamente, você precisa instalar o Astra Trident versão 22.10 ou posterior. O provisionamento dinâmico de volumes SMB requer nós de trabalho do Windows.
O Astra Trident é o provisionamento de armazenamento dinâmico da NetApp criado especificamente para Kubernetes. Simplifique o consumo de armazenamento para aplicativos Kubernetes usando o driver de CSI (Interface de Armazenamento de Contêiner) padrão do setor do Astra Trident. O Astra Trident implanta em clusters Kubernetes como pods e fornece serviços de orquestração de armazenamento dinâmico para suas cargas de trabalho em Kubernetes.
O Trident pode ser instalado usando o operador Trident (manualmente ou usando Helm) ou tridentctl
. Para saber mais sobre esses métodos de instalação e como eles funcionam, confira o Guia de instalação.
Instalar o Astra Trident usando o Helm
O Helm deve ser instalado em sua estação de trabalho para instalar o Astra Trident usando esse método. Para obter outros métodos de instalação do Astra Trident, consulte o Guia de instalação do Astra Trident. Se você tiver nós de trabalho do Windows no cluster, certifique-se de habilitar o Windows com qualquer método de instalação.
Para instalar o Astra Trident usando o Helm de um cluster com nós de trabalho do Windows, execute os seguintes 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
A saída do comando é semelhante ao seguinte exemplo:
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 se o Astra Trident foi instalado com êxito, execute o seguinte comando
kubectl describe
:kubectl describe torc trident
A saída do comando é semelhante ao seguinte exemplo:
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
Criar um back-end
Para instruir o Astra Trident sobre a assinatura do Azure NetApp Files e onde é preciso criar volumes, um back-end deve ser criado. Para obter mais informações sobre back-ends, consulte Opções e exemplos de configuração de back-end do Azure NetApp Files.
Crie um arquivo chamado
backend-secret-smb.yaml
e copie no YAML a seguir. Altere aClient ID
e oclientSecret
para os valores corretos do seu ambiente.apiVersion: v1 kind: Secret metadata: name: backend-tbc-anf-secret type: Opaque stringData: clientID: 00001111-aaaa-2222-bbbb-3333cccc4444 clientSecret: rR0rUmWXfNioN1KhtHisiSAnoTherboGuskey6pU
Crie um arquivo chamado
backend-anf-smb.yaml
e copie no YAML a seguir. AltereClientID
,clientSecret
,subscriptionID
,tenantID
,location
eserviceLevel
para os valores corretos do seu ambiente. OstenantID
,clientID
eclientSecret
podem ser encontrados em um registro de aplicativo na ID do Microsoft Entra com permissões suficientes para o serviço Azure NetApp Files. O registro do aplicativo inclui a função Proprietário ou Colaborador predefinida pelo Azure. O local do Azure deve conter pelo menos uma sub-rede delegada. OserviceLevel
deve corresponder aoserviceLevel
configurado para o pool de capacidade em Configurar o Azure NetApp Files para cargas de trabalho do 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
Criar o segredo e o back-end usando o comando
kubectl apply
.Crie o segredo:
kubectl apply -f backend-secret.yaml -n trident
A saída do comando é semelhante ao seguinte exemplo:
secret/backend-tbc-anf-secret created
Crie o back-end:
kubectl apply -f backend-anf.yaml -n trident
A saída do comando é semelhante ao seguinte exemplo:
tridentbackendconfig.trident.netapp.io/backend-tbc-anf created
Verifique se o back-end foi criado executando o seguinte comando:
kubectl get tridentbackends -n trident
A saída do comando é semelhante ao seguinte exemplo:
NAME BACKEND BACKEND UUID tbe-9shfq backend-tbc-anf-smb 09cc2d43-8197-475f-8356-da7707bae203
Criar um segredo com as credenciais de domínio para o SMB
Crie um segredo no cluster do AKS para acessar o servidor do AD usando o comando
kubectl create secret
. Essas informações serão usadas pelo volume persistente do Kubernetes para acessar o volume SMB do Azure NetApp Files. Use o comando a seguir, substituindoDOMAIN_NAME\USERNAME
pelo seu nome de domínio e nome de usuário ePASSWORD
por sua senha.kubectl create secret generic smbcreds --from-literal=username=DOMAIN_NAME\USERNAME –from-literal=password="PASSWORD"
Verifique se o segredo foi criado.
kubectl get secret
A saída é semelhante ao exemplo a seguir:
NAME TYPE DATA AGE smbcreds Opaque 2 2h
Criar uma classe de armazenamento
Uma classe de armazenamento é usada para definir como uma unidade de armazenamento é criada dinamicamente com um volume persistente. Para consumir volumes do Azure NetApp Files, uma classe de armazenamento deve ser criada.
Crie um arquivo chamado
anf-storageclass-smb.yaml
e copie no YAML a seguir.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"
Crie a classe de armazenamento usando o comando
kubectl apply
:kubectl apply -f anf-storageclass-smb.yaml
A saída do comando é semelhante ao seguinte exemplo:
storageclass/anf-sc-smb created
Execute o comando
kubectl get
para exibir o status da classe de armazenamento:kubectl get sc anf-sc-smb NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE anf-sc-smb csi.trident.netapp.io Delete Immediate true 13s
Criar um PVC
Uma PVC (declaração de volume persistente) é uma solicitação de armazenamento por um usuário. Após a criação de uma declaração de volume persistente, o Astra Trident cria automaticamente um compartilhamento SMB do Azure NetApp Files e o disponibiliza para que as cargas de trabalho do Kubernetes o consumam.
Crie um arquivo chamado
anf-pvc-smb.yaml
e copie o YAML a seguir. Neste exemplo, um volume de 100 GiB é criado com acesso aReadWriteMany
, usando a classe de armazenamento criada em Criar uma classe de armazenamento.kind: PersistentVolumeClaim apiVersion: v1 metadata: name: anf-pvc-smb spec: accessModes: - ReadWriteMany resources: requests: storage: 100Gi storageClassName: anf-sc-smb
Crie a declaração do volume persistente com o comando
kubectl apply
:kubectl apply -f anf-pvc-smb.yaml
A saída do comando é semelhante ao seguinte exemplo:
persistentvolumeclaim/anf-pvc-smb created
Para exibir informações sobre a declaração de volume persistente, execute o comando
kubectl get
:kubectl get pvc
A saída do comando é semelhante ao seguinte exemplo:
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 visualizar o volume persistente criado pelo Astra Trident, execute o seguinte 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
Usar o volume persistente
Depois que o PVC é criado, um pod pode ser criado para acessar o volume do Azure NetApp Files. O manifesto a seguir pode ser usado para definir um pod IIS (Serviços de Informações da Internet) que monta o compartilhamento SMB do Azure NetApp Files criado na etapa anterior. Neste exemplo, o volume é montado em /inetpub/wwwroot
.
Crie um arquivo chamado
anf-iis-pod.yaml
e o copie no YAML a seguir: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
Crie a implantação usando o comando
kubectl apply
:kubectl apply -f anf-iis-deploy-pod.yaml
A saída do comando é semelhante ao seguinte exemplo:
pod/iis-pod created
Verifique se o pod está em execução e está montado por meio do SMB para
/inetpub/wwwroot
usando o comandokubectl describe
:kubectl describe pod iis-pod
A saída do comando é semelhante ao seguinte exemplo:
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)
Verifique se o volume foi montado no pod usando kubectl exec para se conectar ao pod. Em seguida, use o comando
dir
no diretório correto para verificar se o volume está montado e o tamanho corresponde ao tamanho do volume provisionado.kubectl exec -it iis-pod –- cmd.exe
A saída do comando é semelhante ao seguinte exemplo:
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
Próximas etapas
O Astra Trident é compatível com muitos recursos do Azure NetApp Files. Para obter mais informações, consulte:
Azure Kubernetes Service