佈建適用於 Azure Kubernetes Service 的 Azure NetApp Files 雙重通訊協定磁碟區
本文內容
設定適用於 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) 的磁碟區。
本文說明如何使用 NFS 或 SMB 以靜態方式佈建雙重通訊協定存取的磁碟區。
開始之前
在 Azure Kubernetes Service 中佈建雙重通訊協定磁碟區
本節說明如何以靜態方式向 Kubernetes 公開 Azure NetApp Files 雙重通訊協定磁碟區。 我們提供了 SMB 和 NFS 通訊協定的指示。 您可以透過 SMB 向 Windows 背景工作角色節點以及透過 NFS 向 Linux 背景工作角色節點公開相同的磁碟區。
建立 NFS 的永續性磁碟區
定義變數以供日後使用。 將 myresourcegroup 、myaccountname 、mypool1 、myvolname 取代為雙重通訊協定磁碟區的適當值。
RESOURCE_GROUP="myresourcegroup"
ANF_ACCOUNT_NAME="myaccountname"
POOL_NAME="mypool1"
VOLUME_NAME="myvolname"
使用 az netappfiles volume show
命令列出磁碟區的詳細資料。
az netappfiles volume show \
--resource-group $RESOURCE_GROUP \
--account-name $ANF_ACCOUNT_NAME \
--pool-name $POOL_NAME \
--volume-name $VOLUME_NAME -o JSON
下列輸出是使用實際值執行上述命令的範例。
{
...
"creationToken": "myfilepath2",
...
"mountTargets": [
{
...
"ipAddress": "10.0.0.4",
...
}
],
...
}
建立名為 pv-nfs.yaml
的檔案,然後將下列 YAML 複製進來。 請確定伺服器符合前一步驟中的輸出 IP 位址,且路徑符合上述 creationToken
的輸出。 容量也必須符合步驟 2 中的磁碟區大小。
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
使用 kubectl apply
命令建立永續性磁碟區:
kubectl apply -f pv-nfs.yaml
使用 kubectl describe
命令,驗證永續性磁碟區的狀態為可用 :
kubectl describe pv pv-nfs
建立 NFS 的永續性磁碟區宣告
建立名為 pvc-nfs.yaml
的檔案,然後將下列 YAML 複製進來。 此資訊清單會針對 100Gi 儲存體和 ReadWriteMany
存取模式建立名為 pvc-nfs
的 PVC,並符合您所建立的 PV。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-nfs
spec:
accessModes:
- ReadWriteMany
storageClassName: ""
resources:
requests:
storage: 100Gi
使用 kubectl apply
命令建立永續性磁碟區宣告:
kubectl apply -f pvc-nfs.yaml
使用 kubectl describe
命令,驗證永續性磁碟區宣告的狀態 為繫結 :
kubectl describe pvc pvc-nfs
使用 NFS 在 Pod 內掛接
建立名為 nginx-nfs.yaml
的檔案,然後將下列 YAML 複製進來。 此資訊清單會定義使用永續性磁碟區宣告的 nginx
Pod。
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
使用 kubectl apply
kubectl-apply 命令建立 Pod:
kubectl apply -f nginx-nfs.yaml
使用 kubectl apply
命令,驗證 Pod 為執行中 :
kubectl describe pod nginx-nfs
使用 kubectl exec
連線至 Pod,然後使用 df -h
檢查是否已掛接磁碟區,以驗證已在 Pod 中掛接您的磁碟區。
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
...
使用網域認證建立祕密
使用 kubectl create secret
命令,在 AKS 叢集上建立存取 AD 伺服器的祕密。 Kubernetes 永續性磁碟區會使用此祕密來存取 Azure NetApp Files SMB 磁碟區。 使用下列命令來建立祕密,並將 USERNAME
取代為您的使用者名稱、將 PASSWORD
取代為您的密碼,以及將 DOMAIN_NAME
取代為您的 Active Directory 網域名稱。
kubectl create secret generic smbcreds --from-literal=username=USERNAME --from-literal=password="PASSWORD" --from-literal=domain='DOMAIN_NAME'
若要驗證祕密是否已建立,請執行 kubectl get
命令。
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.10.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
建立 SMB 的永續性磁碟區
定義變數以供日後使用。 將 myresourcegroup 、myaccountname 、mypool1 、myvolname 取代為雙重通訊協定磁碟區的適當值。
RESOURCE_GROUP="myresourcegroup"
ANF_ACCOUNT_NAME="myaccountname"
POOL_NAME="mypool1"
VOLUME_NAME="myvolname"
使用 az netappfiles volume show
命令列出磁碟區的詳細資料。
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 anf-pv-smb
建立 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 anf-pvc-smb
使用 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
下一步
Astra Trident 可透過 Azure NetApp Files 支援許多功能。 如需詳細資訊,請參閱