掛載OSS
OSS是阿里云提供的一個(gè)海量、安全、低成本、高可靠的存儲(chǔ)空間,適合存儲(chǔ)非結(jié)構(gòu)化數(shù)據(jù)(例如圖片、音視頻等)。本文介紹如何在ACK Serverless集群中通過(guò)PVC的方式掛載OSS到ECI Pod上。
前提條件
已創(chuàng)建ACK Serverless集群。具體操作,請(qǐng)參見(jiàn)創(chuàng)建集群。
注意事項(xiàng)
OSS為共享存儲(chǔ),一個(gè)OSS可以?huà)燧d到多個(gè)Pod上。
掛載目錄中建議存放的文件數(shù)不要超過(guò)1000個(gè)。文件數(shù)量過(guò)多時(shí),OSSFS會(huì)占用大量?jī)?nèi)存,可能會(huì)導(dǎo)致Pod發(fā)生OOM(Out Of Memory)事件。
操作步驟
獲取OSS Bucket信息。
如果您沒(méi)有創(chuàng)建OSS Bucket,請(qǐng)先在OSS管理控制臺(tái)創(chuàng)建OSS Bucket。具體操作,請(qǐng)參見(jiàn)創(chuàng)建存儲(chǔ)空間。
登錄OSS管理控制臺(tái),在左側(cè)導(dǎo)航欄單擊Bucket列表。
在Bucket列表頁(yè)面,單擊目標(biāo)Bucket名稱(chēng)。
在Bucket詳情頁(yè)面,單擊概覽頁(yè)簽,然后在訪問(wèn)端口區(qū)域,復(fù)制目標(biāo)Endpoint。
Bucket和集群屬于相同地域時(shí),請(qǐng)復(fù)制內(nèi)網(wǎng)的Endpoint。
Bucket和集群屬于不同地域時(shí),請(qǐng)復(fù)制外網(wǎng)的Endpoint。
選擇授權(quán)方式。
方式一:(推薦)使用RAM角色授權(quán)。
創(chuàng)建RAM角色并為該角色授權(quán)。創(chuàng)建時(shí),選擇可信實(shí)體類(lèi)型為阿里云服務(wù),角色類(lèi)型為普通服務(wù)角色,受信服務(wù)為云服務(wù)器;為角色授權(quán)時(shí),選擇AliyunOSSFullAccess權(quán)限策略。具體操作,請(qǐng)參見(jiàn)創(chuàng)建可信實(shí)體為阿里云服務(wù)的RAM角色和為RAM角色授權(quán)。
方式二:使用AccessKey直接授權(quán)。
獲取AccessKey ID和AccessKey Secret。具體操作,請(qǐng)參見(jiàn)獲取AccessKey。
使用以下內(nèi)容,創(chuàng)建test-ack-oss.yaml。
說(shuō)明本文示例以VPC內(nèi)網(wǎng)環(huán)境為例,內(nèi)網(wǎng)訪問(wèn)需確保實(shí)例、鏡像倉(cāng)庫(kù)、OSS的Endpoint處于同一region(例如北京)。
如果您需要跨Region掛載OSS或拉取鏡像,則需要配置公網(wǎng),同時(shí)將image地址或OSS URL更改為相應(yīng)的公網(wǎng)訪問(wèn)格式,公網(wǎng)訪問(wèn)時(shí)需要修改如下代碼中的
image
和url
。image
:替換為registry.cn-beijing.aliyuncs.com/eci_open/nginx:1.14.2
。url
:替換為外網(wǎng)訪問(wèn)的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 namespace: test 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角色來(lái)授權(quán)。如需使用AccessKey直接授權(quán),請(qǐng)將
ramRole: "<your RAM Role Name>"
替換為以下YAML:akId: "<your AccessKey ID>" akSecret: "<your AccessKey Secret>"
說(shuō)明若您需要跨賬號(hào)掛載OSS,請(qǐng)配置跨賬號(hào)的AK/SK。
volumeAttributes中需配置OSS相關(guān)參數(shù),參數(shù)說(shuō)明如下:
參數(shù)
說(shuō)明
bucket
OSS Bucket的名稱(chēng)。目前只支持掛載Bucket,不支持掛載Bucket下的子目錄或者文件。
url
OSS的接入域名(Endpoint),由步驟1獲取。
Bucket和集群屬于相同地域時(shí),請(qǐng)使用內(nèi)網(wǎng)地址。
Bucket和集群屬于不同地域時(shí),請(qǐng)使用外網(wǎng)地址。
otherOpts
掛載OSS時(shí)支持輸入定制化參數(shù),格式為-o *** -o ***,例如:-o max_stat_cache_size=0 -o allow_other。
ramRole
使用RAM角色授權(quán)時(shí),對(duì)應(yīng)的RAM角色。
akId
使用AccessKey直接授權(quán)時(shí),對(duì)應(yīng)的AccessKey ID。
akSecret
使用AccessKey直接授權(quán)時(shí),對(duì)應(yīng)的AccessKey Secret。
執(zhí)行以下命令,創(chuàng)建ECI Pod并掛載OSS。
kubectl create -f test-ack-oss.yaml
執(zhí)行以下命令,查看Pod。
kubectl get pods -o wide
預(yù)期輸出:
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對(duì)應(yīng)的掛載目錄/cache-test,在第一個(gè)Pod中寫(xiě)入的文件可以在第二個(gè)Pod中查看,即兩個(gè)Pod共享使用OSS存儲(chǔ)。
相關(guān)文檔
如需了解OSS存儲(chǔ)卷的更多信息,請(qǐng)參見(jiàn)OSS存儲(chǔ)卷概述。