佈建適用於 Azure Kubernetes Service 的 Azure NetApp Files SMB 磁碟區
設定適用於 Azure Kubernetes Service 的 Azure NetApp Files 後,即可佈建適用於 Azure Kubernetes Service 的 Azure NetApp Files 磁碟區。
Azure NetApp Files 支援使用 NFS (NFSv3 或 NFSv4.1)、SMB 和雙重通訊協定 (NFSv3 和 SMB,或 NFSv4.1 和 SMB) 的磁碟區。
- 本文詳細說明如何以靜態或動態方式佈建 SMB 磁碟區。
- 如需以靜態或動態方式佈建 NFS 磁碟區的相關資訊,請參閱佈建適用於 Azure Kubernetes Service 的 Azure NetApp Files NFS 磁碟區。
- 如需以靜態方式佈建雙重通訊協定磁碟區的相關資訊,請參閱佈建適用於 Azure Kubernetes Service 的 Azure NetApp Files 雙重通訊協定磁碟區
靜態設定使用 SMB 磁碟區的應用程式
本節說明如何在 Azure NetApp Files 上建立 SMB 磁碟區,並以靜態方式向 Kubernetes 公開磁碟區,以便容器化應用程式取用。
建立 SMB 磁碟區
定義變數以供稍後使用。 以適合環境的值取代 myresourcegroup、mylocation、myaccountname、mypool1、premium、myfilepath、myvolsize、myvolname 和 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"
使用
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
使用網域認證建立祕密
使用
kubectl create secret
命令,在 AKS 叢集上建立存取 Active Directory (AD) 伺服器的祕密。 Kubernetes 永續性磁碟區會使用此秘密來存取 Azure NetApp Files SMB 磁碟區。 使用下列命令來建立祕密,並將USERNAME
取代為您的使用者名稱、PASSWORD
取代為您的密碼,以及DOMAIN_NAME
取代為您 AD 的網域名稱。kubectl create secret generic smbcreds --from-literal=username=USERNAME --from-literal=password="PASSWORD" --from-literal=domain='DOMAIN_NAME'
檢查是否已建立秘密。
kubectl get secret NAME TYPE DATA AGE smbcreds Opaque 2 20h
安裝 SMB CSI 驅動程式
您必須安裝容器儲存體介面 (CSI) 驅動程式,才能建立 Kubernetes SMB PersistentVolume
。
使用 helm 在叢集上安裝 SMB CSI 驅動程式。 請務必將
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
如需安裝 SMB CSI 驅動程式的其他方法,請參閱在 Kubernetes 叢集上安裝 SMB CSI 驅動程式主要版本。
確認
csi-smb
控制器 Pod 正在執行中,且每個背景工作角色節點都有使用kubectl get pods
命令執行的 Pod: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
建立永續性磁碟區
使用
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", ... } ], ... }
建立名為
pv-smb.yaml
的檔案,然後將下列 YAML 複製進來。 必要時,請將myvolname
取代為creationToken
,並以上一個步驟中的smbServerFqdn
值取代ANF-1be3.contoso.com\myvolname
。 請務必包含您的 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
使用
kubectl apply
命令建立永續性磁碟區:kubectl apply -f pv-smb.yaml
使用
kubectl describe
命令,確認永續性磁碟區的狀態為 [可用]:kubectl describe pv pv-smb
建立永續性磁碟區宣告
建立檔案名稱
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
使用
kubectl apply
命令建立永續性磁碟區宣告:kubectl apply -f pvc-smb.yaml
使用 kubectl describe 命令,確認永續性磁碟區宣告的狀態為 [繫結]:
kubectl describe pvc pvc-smb
使用 Pod 裝載
建立名為
iis-smb.yaml
的檔案,然後將下列 YAML 複製進來。 此檔案將用來建立 Internet Information Services Pod,用來將磁碟區掛接至路徑/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
使用 kubectl apply 命令建立 Pod:
kubectl apply -f iis-smb.yaml
使用 kubectl describe 命令,確認 Pod 為執行中且已掛接來自 SMB 的
/inetpub/wwwroot
: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) ...
使用 kubectl exec 命令連線到 Pod 以確認已在 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 在 Azure NetApp Files 上動態建立 SMB 磁碟區,並自動掛接至容器化 Windows 應用程式。
安裝 Astra Trident
若要動態佈建 SMB 磁碟區,您必須安裝 Astra Trident 22.10 版或更新版本。 動態佈建 SMB 磁碟區需要 Windows 背景工作角色節點。
Astra Trident 是 NetApp 的動態儲存體佈建工具,專為 Kubernetes 所建置。 使用 Astra Trident 的業界標準容器儲存體介面 (CSI) 驅動程式,簡化 Kubernetes 應用程式的儲存體使用。 Astra Trident 會在 Kubernetes 叢集上部署為 Pod,並為 Kubernetes 工作負載提供動態儲存體協調流程服務。
您可以使用 Trident 運算子 (手動或使用 Helm) 或 tridentctl
來安裝 Trident。 若要深入瞭解這些安裝方法及其運作方式,請參閱安裝指南。
使用 Helm 安裝 Astra Trident
必須在工作站上安裝 Helm,才能使用此方法安裝 Astra Trident。 如需安裝 Astra Trident 的其他方法,請參閱 Astra Trident 安裝指南。 如果您的叢集中有 Windows 背景工作角色節點,請務必使用任何安裝方法來啟用 Windows。
若要在有 Windows 背景工作角色節點的叢集中使用 Helm 安裝 Astra Trident,請執行下列命令:
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
若要確認 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 後端設定選項和範例。
建立名為
backend-secret-smb.yaml
的檔案,然後將下列 YAML 複製進來。 將Client ID
和clientSecret
變更為環境適用的正確值。apiVersion: v1 kind: Secret metadata: name: backend-tbc-anf-secret type: Opaque stringData: clientID: abcde356-bf8e-fake-c111-abcde35613aa clientSecret: rR0rUmWXfNioN1KhtHisiSAnoTherboGuskey6pU
建立名為
backend-anf-smb.yaml
的檔案,然後將下列 YAML 複製進來。 將ClientID
、clientSecret
、subscriptionID
、tenantID
、location
和serviceLevel
變更為環境適用的正確值。 如果您具有 Azure NetApp Files 服務的足夠權限,就可以在 Microsoft Entra ID 的應用程式註冊中找到tenantID
、clientID
和clientSecret
。 應用程式註冊包含 Azure 預先定義的擁有者或參與者角色。 Azure 位置必須含有至少一個委派的子網路。serviceLevel
必須符合設定適用於 AKS 工作負載的 Azure NetApp Files 中容量集區所設定的serviceLevel
。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
使用
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
執行下列命令,確認後端已建立:
kubectl get tridentbackends -n trident
此命令的輸出與下列範例類似:
NAME BACKEND BACKEND UUID tbe-9shfq backend-tbc-anf-smb 09cc2d43-8197-475f-8356-da7707bae203
使用適用於 SMB 的網域認證建立祕密
使用
kubectl create secret
命令,在 AKS 叢集上建立存取 AD 伺服器的祕密。 Kubernetes 永續性磁碟區會使用此資訊來存取 Azure NetApp Files SMB 磁碟區。 使用下列命令,將DOMAIN_NAME\USERNAME
取代為您的網域名稱和使用者名稱,並將PASSWORD
取代為您的密碼。kubectl create secret generic smbcreds --from-literal=username=DOMAIN_NAME\USERNAME –from-literal=password="PASSWORD"
確認祕密是否已建立。
kubectl get secret
輸出類似下列範例:
NAME TYPE DATA AGE smbcreds Opaque 2 2h
建立儲存體類別
儲存體類別可用來定義如何搭配永續性磁碟區動態建立儲存體單位。 若要取用 Azure NetApp Files 磁碟區,必須建立儲存體類別。
建立名為
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"
使用
kubectl apply
命令建立儲存類別:kubectl apply -f anf-storageclass-smb.yaml
此命令的輸出與下列範例類似:
storageclass/anf-sc-smb created
執行
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
「永續性磁碟區宣告」(PVC) 是使用者提出的儲存體要求。 建立永續性磁碟區宣告時,Astra Trident 會自動建立 Azure NetApp Files SMB 共用,且可供 Kubernetes 工作負載取用。
建立名為
anf-pvc-smb.yaml
的檔案,並複製下列 YAML。 在此範例中,會建立具有ReadWriteMany
存取權的 100-GiB 磁碟區,並使用在建立儲存類別中建立的儲存類別。kind: PersistentVolumeClaim apiVersion: v1 metadata: name: anf-pvc-smb spec: accessModes: - ReadWriteMany resources: requests: storage: 100Gi storageClassName: anf-sc-smb
使用
kubectl apply
命令建立永續性磁碟區宣告:kubectl apply -f anf-pvc-smb.yaml
此命令的輸出與下列範例類似:
persistentvolumeclaim/anf-pvc-smb created
若要檢視永續性磁碟區宣告的相關資訊,請執行
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
若要檢視 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 磁碟區。 您可以使用下列資訊清單來定義 Internet Information Services (IIS) Pod,以掛接在上一個步驟中建立的 Azure NetApp Files SMB 共用。 在此範例中,磁碟區會裝載在 /inetpub/wwwroot
。
建立名為
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
使用
kubectl apply
命令建立部署:kubectl apply -f anf-iis-deploy-pod.yaml
此命令的輸出與下列範例類似:
pod/iis-pod created
使用
kubectl describe
命令,確認 Pod 正在執行中並透過 SMB 掛接至/inetpub/wwwroot
: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)
使用 kubectl exec 連線到 Pod,以確認已在 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 支援許多功能。 如需詳細資訊,請參閱