如我們所知,Kubernetes通過Volume為集群中的容器提供存儲,通過Persistent Volume和Persistent Volume Claim實(shí)現(xiàn)Volume的靜態(tài)供給和動態(tài)供給。Azure File和Azure Disk也在Kubernetes支持的動態(tài)供給PV的Provisioner之列(如下圖:https://kubernetes.io/docs/concepts/storage/storage-classes/#provisioner),本篇文章就帶領(lǐng)大家操作一遍,如何動態(tài)創(chuàng)建Azure File文件共享,以供集群中的多個Pod使用。
(1)準(zhǔn)備工作:
創(chuàng)建好一個AKS集群,并且升級Azure CLI到最新版本
登錄到你創(chuàng)建好的集群中,確認(rèn)下各Node節(jié)點(diǎn)狀態(tài)是否正常:
(2)添加StorageClass:
創(chuàng)建一個azure-file-sc.yaml文件并編輯如下:
如上我們創(chuàng)建的這個Storage Class封裝的名稱(name)為azurefile,provisioner指定為kubernetes.io/azure-file,參數(shù)parameter部分,指定冗余形式,目前支持Standard的三張,其他暫不支持:
Standard_LRS-standard locally redundant storage(LRS)
Standard_GRS-standard geo-redundant storage(GRS)
Standard_RAGRS-standard read-access geo-redundant storage(RA-GRS)
創(chuàng)建好之后執(zhí)行kubectl apply-f azure-file-sc.yaml。
(3)創(chuàng)建集群角色并綁定
作為Azure平臺上的服務(wù),AKS仍然使用的RBAC去控制集群的權(quán)限和安全。為了使Azure平臺能夠創(chuàng)建所需要的存儲資源,這一步我們需要添加一個集群角色:
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: system:azure-cloud-provider
rules:
- apiGroups: ['']
resources: ['secrets']
verbs: ['get','create']
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: system:azure-cloud-provider
roleRef:
kind: ClusterRole
apiGroup: rbac.authorization.k8s.io
name: system:azure-cloud-provider
subjects:
- kind: ServiceAccount
name: persistent-volume-binder
namespace: kube-system
執(zhí)行kubectl apply-f azure-pvc-roles.yaml如下:
(4)創(chuàng)建PVC:
這一步就是動態(tài)申請存儲資源的文件了,命名這個PVC yaml文件為azure-file-pvc.yml,編輯如下,指定metadata為第(2)步中的StorageClassName,配置好訪問模式和容量,編輯好保存并運(yùn)行,可以看到這個PVC已經(jīng)被成功創(chuàng)建。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: azurefile
spec:
accessModes:
- ReadWriteMany
storageClassName: azurefile
resources:
requests:
storage: 5Gi
(5)使用并檢驗(yàn)
首先我們創(chuàng)建一個pod,命令為mypod1.yml,這個pod運(yùn)行的是一個busybox鏡像,通過PVC將Azure File mount到容器的/datatest目錄中。
apiVersion: v1
kind: Pod
metadata:
name: mypod1
spec:
containers:
- image: busybox
name: mycontainer1
volumeMounts:
- mountPath: /datatest
name: datatest
args:
- /bin/sh
- -c
- sleep 30000
volumes:
- name: datatest
persistentVolumeClaim:
claimName: my-azurefile-pvc
然后依次執(zhí)行:
kubectl apply -f mypod1.yaml
#查看pod狀態(tài)
kubectl get pod -o wide
#在pod里的datatest目錄下創(chuàng)建一個名字為hello的文件
kubectl exec mypod1 touch /datatest/hello
如上是截圖,在pod中創(chuàng)建完名字為hello的文件后,我們檢驗(yàn)下這個文件有沒有更新到Azure File中,這里說明一下,AKS動態(tài)配置完后的AzureFile會默認(rèn)創(chuàng)建在MC_的集群中,portal上找到這個存儲賬戶進(jìn)去,找到Azure File下面的文件,如截圖,發(fā)現(xiàn)hello.txt已經(jīng)存在了。
以上就是整個實(shí)驗(yàn)過程,演示了AKS如何使用Azure File實(shí)現(xiàn)動態(tài)持久化存儲。希望對大家有用。