OSS是阿里云提供的一個海量、安全、低成本、高可靠的存儲空間,適合存儲非結構化數據(如圖片、音視頻等)。部署阿里云CSI插件后,您可以在自建的Kubernetes集群使用阿里云OSS作為Volume。掛載OSS時,僅支持靜態數據卷,本文為您介紹如何使用PVC方式,靜態掛載OSS到ECI Pod上。
前提條件
自建Kubernetes集群中已部署VNode。
集群版本為1.16及以上版本,且已部署CSI-Provisioner組件。
重要關于如何部署CSI-Provisioner組件,請參見alibaba-cloud-csi-driver。如果部署過程中出現問題,請在GitHub提交issue。
如果您的Kubernetes集群部署在線下IDC,請確保已打通IDC與阿里云的網絡。
注意事項
OSS為共享存儲,一個OSS可以掛載到多個Pod上。
不支持動態掛載OSS,即OSS不支持動態創建PV。
掛載目錄中建議存放的文件數不要超過1000個。文件數量過多時,OSSFS會占用大量內存,可能會導致Pod發生OOM(Out Of Memory)事件。
操作步驟
OSS類型的存儲卷目前僅支持靜態掛載。
創建OSS Bucket。
選擇授權方式。
使用RAM角色授權。
請創建RAM角色并為該角色授權。創建時,可信實體類型為阿里云服務,角色類型為普通服務角色,受信服務為云服務器;為角色授權時,請選擇AliyunOSSFullAccess權限策略。
(不推薦)使用AccessKey直接授權。
請獲取AccessKey ID和AccessKey Secret。具體操作,請參見獲取AccessKey。
創建PV。
將以下內容保存為oss-pv.yaml。
apiVersion: v1 kind: PersistentVolume metadata: name: oss-pv labels: alicloud-pvname: oss-pv spec: capacity: storage: 25Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: oss-pv volumeAttributes: bucket: "oss-test" url: "oss-cn-beijing-internal.aliyuncs.com" otherOpts: "-o max_stat_cache_size=0 -o allow_other" path: "/" ramRole: "<your RAM Role Name>"
上述示例采用RAM角色來授權。如果您想要使用AccessKey直接授權,請將
ramRole: "<your RAM Role Name>"
替換為以下YAML:akId: "<your AccessKey ID>" akSecret: "<your AccessKey Secret>"
相關參數說明如下表所示:
參數
描述
driver
驅動類型。此處配置為
ossplugin.csi.alibabacloud.com
,表示使用阿里云OSS CSI插件。volumeHandle
PV的唯一標識符,與metadata中定義的name保持一致。
bucket
OSS Bucket的名稱。
目前只支持掛載Bucket,不支持掛載Bucket下的子目錄或者文件。
url
OSS的接入域名(Endpoint)。
掛載節點(即VNode)和Bucket相同地域時,請使用私網地址。
掛載節點(即VNode)和Bucket不同地域時,請使用公網地址。
otherOpts
掛載OSS時支持輸入定制化參數,格式為
-o *** -o ***
,例如:-o max_stat_cache_size=0 -o allow_other
。path
掛載時相對Bucket根文件的目錄結構,默認為
/
。ramRole
使用RAM角色授權時,對應的RAM角色。
akId和akSecret
使用AccessKey直接授權時,對應的AccessKey ID和AccessKey Secret。
執行以下命令創建PV。
kubectl create -f oss-pv.yaml
創建PVC。
將以下內容保存為oss-pvc.yaml。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: oss-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 25Gi selector: matchLabels: alicloud-pvname: oss-pv
執行以下命令創建PVC。
kubectl create -f oss-pvc.yaml
將OSS掛載到ECI實例。
將以下內容保存為oss-test.yaml。
apiVersion: apps/v1 kind: Deployment metadata: name: oss-test labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: nodeSelector: k8s.aliyun.com/vnode: "true" tolerations: - key: k8s.aliyun.com/vnode operator: "Equal" value: "true" effect: "NoSchedule" containers: - name: nginx image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/nginx:1.14.2 ports: - containerPort: 80 volumeMounts: - name: pvc-oss mountPath: "/data" volumes: - name: pvc-oss persistentVolumeClaim: claimName: oss-pvc
執行以下命令創建Deployment。
kubectl create -f oss-test.yaml
查看結果。
kubectl get pods -o wide
預期返回:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES oss-test-647bf5d6b-ms9fx 1/1 Running 0 21s 172.16.XX.XX cn-beijing.vnd-2ze8nd8xcl33t4pa**** <none> <none> oss-test-647bf5d6b-rsxrd 1/1 Running 0 21s 172.16.XX.XX cn-beijing.vnd-2ze8nd8xcl33t4pa**** <none> <none>
查看Pod中的文件目錄,可以看到已生成OSS對應的掛載目錄
/data
,且第一個Pod中寫入的文件可以在第二個Pod中查看,即兩個Pod共享使用OSS存儲。