OSS是阿里雲提供的一個海量、安全、低成本、高可靠的儲存空間,適合儲存非結構化資料(例如圖片、音視頻等)。本文介紹如何在ACK Serverless叢集中通過PVC的方式掛載OSS到ECI Pod上。
前提條件
已建立ACK Serverless叢集。具體操作,請參見建立叢集。
注意事項
OSS為共用儲存,一個OSS可以掛載到多個Pod上。
掛載目錄中建議存放的檔案數不要超過1000個。檔案數量過多時,OSSFS會佔用大量記憶體,可能會導致Pod發生OOM(Out Of Memory)事件。
操作步驟
擷取OSS Bucket資訊。
如果您沒有建立OSS Bucket,請先在OSS管理主控台建立OSS Bucket。具體操作,請參見建立儲存空間。
登入OSS管理主控台,在左側導覽列單擊Bucket列表。
在Bucket列表頁面,單擊目標Bucket名稱。
在Bucket詳情頁面,單擊概覽頁簽,然後在訪問連接埠地區,複製目標Endpoint。
Bucket和叢集屬於相同地區時,請複製內網的Endpoint。
Bucket和叢集屬於不同地區時,請複製外網的Endpoint。
選擇授權方式。
方式一:(推薦)使用RAM角色授權。
建立RAM角色並為該角色授權。建立時,選擇信任主體類型為雲端服務,信任主體名稱為Elastic Compute Service / ECS;為角色授權時,選擇AliyunOSSFullAccess權限原則。具體操作,請參見建立可信實體為阿里雲服務的RAM角色和為RAM角色授權。
方式二:使用AccessKey直接授權。
擷取AccessKey ID和AccessKey Secret。具體操作,請參見擷取AccessKey。
使用以下內容,建立test-ack-oss.yaml。
說明本文樣本以VPC內網環境為例,內網訪問需確保執行個體、鏡像倉庫、OSS的Endpoint處於同一region(例如北京)。
如果您需要跨Region掛載OSS或拉取鏡像,則需要配置公網,同時將image地址或OSS URL更改為相應的公網訪問格式,公網訪問時需要修改如下代碼中的
image和url。image:替換為registry.cn-beijing.aliyuncs.com/eci_open/nginx:1.14.2。url:替換為外網訪問的Endpoint。
apiVersion: apps/v1 kind: Deployment metadata: name: test-ack-oss labels: alibabacloud.com/eci: "true" spec: replicas: 2 selector: matchLabels: alibabacloud.com/eci: "true" template: metadata: labels: alibabacloud.com/eci: "true" spec: containers: - name: nginx image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/nginx:1.14.2 ports: - containerPort: 80 volumeMounts: - name: cache-volume mountPath: /cache-test volumes: - name: cache-volume persistentVolumeClaim: claimName: oss-pvc --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: oss-pvc spec: storageClassName: test accessModes: - ReadWriteMany resources: requests: storage: 5Gi selector: matchLabels: alicloud-pvname: pv-oss --- apiVersion: v1 kind: PersistentVolume metadata: name: oss-csi-pv labels: alicloud-pvname: pv-oss spec: storageClassName: test capacity: storage: 5Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: oss-csi-pv volumeAttributes: bucket: "oss-test" url: "oss-cn-beijing-internal.aliyuncs.com" otherOpts: "-o max_stat_cache_size=0 -o allow_other" ramRole: "<your RAM Role Name>"上述樣本採用RAM角色來授權。如需使用AccessKey直接授權,請將
ramRole: "<your RAM Role Name>"替換為以下YAML:akId: "<your AccessKey ID>" akSecret: "<your AccessKey Secret>"說明若您需要跨帳號掛載OSS,請配置跨帳號的AK/SK。
volumeAttributes中需配置OSS相關參數,參數說明如下:
參數
說明
bucket
OSS Bucket的名稱。目前只支援掛載Bucket,不支援掛載Bucket下的子目錄或者檔案。
url
OSS的接入網域名稱(Endpoint),由步驟1擷取。
Bucket和叢集屬於相同地區時,請使用內網地址。
Bucket和叢集屬於不同地區時,請使用外網地址。
otherOpts
掛載OSS時支援輸入定製化參數,格式為-o *** -o ***,例如:-o max_stat_cache_size=0 -o allow_other。
ramRole
使用RAM角色授權時,對應的RAM角色。
akId
使用AccessKey直接授權時,對應的AccessKey ID。
akSecret
使用AccessKey直接授權時,對應的AccessKey Secret。
執行以下命令,建立ECI Pod並掛載OSS。
kubectl create -f test-ack-oss.yaml執行以下命令,查看Pod。
kubectl get pods -o wide預期輸出:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES test-ack-oss-655db9d64d-5q7d9 1/1 Running 0 46s 172.16.XX.XXX virtual-kubelet-cn-****-k <none> <none> test-ack-oss-655db9d64d-m5vct 1/1 Running 0 46s 172.16.XX.XXX virtual-kubelet-cn-****-k <none> <none>查看Pod中的檔案目錄,可以看到已產生OSS對應的掛載目錄/cache-test,在第一個Pod中寫入的檔案可以在第二個Pod中查看,即兩個Pod共用使用OSS儲存。

相關文檔
如需瞭解OSS儲存卷的更多資訊,請參見OSS儲存卷。