傳統儲存方案訪問路徑層級多、延遲高,會造成一定的I/O效能損耗。安全沙箱NAS直接掛載可以通過最佳化儲存路徑實現在容器內直接讀寫NAS,從而有效提升效能。本文介紹安全沙箱NAS直接掛載的實現原理,以及如何將NAS直接掛載到安全沙箱容器中。
背景資訊
virtio-fs是一個共用的檔案系統,可以將Volume、Secret、ConfigMap等共用到虛擬機器GuestOS內,從而以原生的方式通過Volume掛載NAS。但這種方式下,NAS是掛載到主機上的,在容器內要經過virtio-fs讀寫主機上的NAS,由此會帶來一些效能損耗。
安全容器提供了安全沙箱NAS直接掛載的功能。該功能會先卸載主機上的NAS掛載點,然後在GuestOS內掛載NAS,最後把NAS Bind Mount到容器內,從而能夠在容器內直接讀寫NAS,達到接近原生的效能。
實現原理
實現安全沙箱的NAS直接掛載功能的流程如下:
kubelet請求CSI-Plugin掛載NAS卷。
CSI-Plugin在主機掛載NAS。
kubelet請求Kangaroo-Runtime建立容器。
Kangaroo-Runtime解析NAS掛載資訊並傳入GuestOS,同時卸載主機上的NAS。
Kangaroo-Runtime請求Agent建立容器。
Agent把NAS掛載到GuestOS內。
Agent把GuestOS上的NAS Bind Mount到容器內。
前提條件
- 重要
NAS執行個體的VPC需要和ACK叢集的VPC一致。
操作步驟
建立靜態PV。
將以下樣本YAML內容儲存為
nas-pv-csi.yaml檔案。apiVersion: v1 kind: PersistentVolume metadata: labels: alicloud-pvname: nas-pv-csi name: nas-pv-csi spec: accessModes: - ReadWriteMany capacity: storage: 5Gi csi: driver: nasplugin.csi.alibabacloud.com volumeAttributes: options: noresvport,nolock path: /csi server: ${nas-server-address} #填寫為您實際擷取的NAS掛載點地址。 vers: "3" volumeHandle: nas-pv-csi persistentVolumeReclaimPolicy: Retain執行以下命令建立靜態PV。
kubectl create -f nas-pv-csi.yaml
建立NAS儲存聲明PVC,使用
selector.matchLabels篩選PV標籤,精確配置PVC和PV的綁定關係。將以下樣本YAML內容儲存為
nas-pvc-csi.yaml檔案。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nas-pvc-csi namespace: default spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi selector: matchLabels: alicloud-pvname: nas-pv-csi執行以下命令建立靜態PVC。
kubectl create -f nas-pvc-csi.yaml
建立樣本應用,並掛載PVC。
將以下樣本YAML內容儲存為
deploy-nas-csi.yaml檔案。apiVersion: apps/v1 kind: Deployment metadata: name: deploy-nas-csi spec: replicas: 2 selector: matchLabels: app: busybox template: metadata: labels: app: busybox annotations: storage.alibabacloud.com/enable_nas_passthrough: "true" spec: runtimeClassName: runv containers: - name: busybox image: registry.cn-hangzhou.aliyuncs.com/acs/busybox:v1.29.2 command: - tail - -f - /dev/null volumeMounts: - name: nas-pvc mountPath: "/data" restartPolicy: Always volumes: - name: nas-pvc persistentVolumeClaim: claimName: nas-pvc-csi #需要和上一步建立的PVC名稱一致,用於綁定PVC。預設Pod不啟用NAS直接掛載功能,您需要在模板中添加Annotation開啟NAS直通功能。
annotations: storage.alibabacloud.com/enable_nas_passthrough: "true"執行以下命令建立應用。
kubectl create -f deploy-nas-csi.yaml
驗證NAS掛載結果。
執行以下命令,查看Pod資訊。
kubectl get pods預期輸出:
NAME READY STATUS RESTARTS AGE deploy-nas-csi-847f8b****-qmv2m 1/1 Running 0 47s deploy-nas-csi-847f8b****-wj8k5 1/1 Running 0 47s執行以下命令,進入指定的Pod。
kubectl exec -it deploy-nas-csi-847f8b****-qmv2m -- sh執行以下命令,查看掛載資訊。
mount如果執行命令後有內容,表明NAS已經掛載成功。預期輸出如下: