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的名稱。
path
掛載Bucket的子目錄路徑,預設為/,即掛載整個Bucket。例如設定為/data表示只掛載Bucket下的data目錄。
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儲存。
shell@Alicloud:~$ kubectl exec -it test-ack-oss-655db9d64d-5q7d9 -- bash root@test-ack-oss-655db9d64d-5q7d9:/# ls bin boot cache-test dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@test-ack-oss-655db9d64d-5q7d9:/# ls /cache-test root@test-ack-oss-655db9d64d-5q7d9:/# echo "hell oss">/cache-test/ack-oss root@test-ack-oss-655db9d64d-5q7d9:/# ls /cache-test ack-oss root@test-ack-oss-655db9d64d-5q7d9:/# cat /cache-test/ack-oss hell oss root@test-ack-oss-655db9d64d-5q7d9:/# exit exit shell@Alicloud:~$ kubectl exec -it test-ack-oss-655db9d64d-m5vct -- bash root@test-ack-oss-655db9d64d-m5vct:/# ls /cache-test ack-oss root@test-ack-oss-655db9d64d-m5vct:/# cat /cache-test/ack-oss hell oss
相關文檔
如需瞭解OSS儲存卷的更多資訊,請參見OSS儲存卷。