Object Storage Service(Object Storage Service)是阿里雲提供的海量、安全、低成本、高持久的雲端儲存體服務,支援同時被多個Pod掛載,適用於讀檔案且對磁碟I/O要求不高的情境,例如讀設定檔、視頻、圖片檔案等。您可以通過RRSA鑒權或者RAM使用者AccessKey鑒權任一方式進行許可權配置並掛載使用OSS靜態儲存卷,如需定期輪轉AccessKey,在1.26及以上版本的叢集中建議您通過RRSA鑒權方式掛載,避免由於AccessKey輪轉導致的ossfs重掛載和業務重啟問題。
前提條件
叢集預設已安裝CSI組件。如需升級請參見升級csi-plugin和csi-provisioner。
說明如果您叢集中使用Flexvolume組件,由於Flexvolume已廢棄,請參見遷移Flexvolume至CSI完成遷移後再進行掛載。您可以在 ,在儲存頁簽下確認儲存群組件類型。
已建立Bucket,Bucket與叢集需使用同一帳號操作。
說明若Bucket和ECS執行個體位於相同地區,請選擇私網網域名稱。
注意事項
OSS不建議跨帳號使用。
建議在使用OSS的Pod的YAML檔案中增加健全狀態檢查配置,當容器內OSS目錄不可用時,可自動重啟Pod重新掛載OSS。
說明ACK叢集升級時會重啟kubelet,導致ossfs驅動隨之重啟,繼而造成OSS目錄不可用。v1.18.8.45及以上版本的csi-plugin和csi-provisioner組件已修複此問題。請及時升級csi-plugin和csi-provisioner。
若您在應用模板中配置了securityContext.fsgroup參數,kubelet在儲存卷掛載完成後會執行
chmod
或chown
操作,導致掛載時間延長。若您已配置securityContext.fsgroup參數,且需要減少掛載時間,請參見OSS儲存卷掛載時間延長。通過ossfs進行ls等操作時,將發起HTTP請求到OSS擷取檔案的meta資訊,如果ls的目標目錄下檔案較多(例如超過100,000個,該數值與機器記憶體大小相關),ossfs將消耗大量系統記憶體,可能導致Pod發生OOM(Out Of Memory)事件。您可以通過掛載OSS Bucket的子目錄,或對檔案較多的目錄進行目錄分級解決此問題。
ossfs適用於並發讀情境,配置PVC和PV的訪問模式為ReadOnlyMany。若需寫入資料,建議您通過OSS SDK、ossutil工具等方式實現資料讀寫分離,同時配置OSS儲存卷的訪問模式為ReadWriteMany。具體操作,請參見OSS儲存讀寫分離最佳實務。
重要在並發寫情境中,ossfs無法保證資料寫入的一致性。
掛載狀態下,登入應用Pod或宿主機,在掛載路徑下刪除或變更檔案,都會直接刪除或變更OSS Bucket中對應的源檔案。您可以開啟OSS Bucket的版本控制,避免誤刪除重要資料,請參見版本控制。
當傳輸的檔案大於10 MB時,可以將檔案切成片段,分區上傳。分區上傳過程中斷後,如您不再需要這些片段,可以手動刪除片段或通過生命週期規則刪除片段。
通過RRSA鑒權方式掛載
基於適用於服務賬戶的RAM角色(RAM Roles for Service Accounts,簡稱RRSA)功能,您可以在叢集內實現PV維度OpenAPI許可權隔離,從而實現雲資源存取權限的細粒度隔離,降低安全風險。更多資訊,請參見通過RRSA配置ServiceAccount的RAM許可權實現Pod許可權隔離。
RRSA鑒權方式掛載僅支援1.26及以上版本的叢集,即ACK託管叢集、ACK Serverless叢集,且叢集使用的CSI組件為1.30.4及以上版本。若您在1.30.4之前的版本中使用了RRSA功能,請及時參見【產品變更】CSI ossfs版本升級與掛載流程最佳化增加RAM角色授權配置。
步驟一:建立RAM角色
如果您在叢集中首次使用RRSA功能,需要按照以下步驟操作,如果您已經在叢集中使用過RRSA鑒權方式掛載OSS儲存卷,則可以跳過本步驟。
在Container Service管理主控台啟用RRSA功能。請參見啟用RRSA功能。
為OSS儲存卷RRSA鑒權建立RAM角色,即使用RRSA功能扮演的指定角色。
建立可信實體類型為身份供應商的RAM角色,以demo-role-for-rrsa為例。
使用阿里雲帳號登入RAM控制台。
在左側導覽列,選擇 ,然後在角色頁面,單擊建立角色。
在建立角色面板,選擇可信實體類型為身份供應商,然後單擊下一步。
在配置角色頁面,配置如下角色資訊後,單擊完成。
本樣本配置如下。
配置項
描述
角色名稱
demo-role-for-rrsa。
備忘
選填有關該角色的備忘資訊。
身份供應商類型
OIDC。
選擇身份供應商
ack-rrsa-<cluster_id>。其中,<cluster_id>為您的叢集ID。
限制條件
oidc:iss:保持預設。
oidc:aud:選擇sts.aliyuncs.com。
oidc:sub:條件判定方式選擇StringEquals,此處需要填入system:serviceaccount:ack-csi-fuse:csi-fuse-ossfs。
步驟二:為demo-role-for-rrsa角色授權
建立如下OSS訪問的自訂權限原則。具體操作,請參見建立自訂權限原則。
以下唯讀和讀寫權限策略請根據使用需求選擇,並替換
mybucket
為您實際建立的Bucket名稱。OSS唯讀權限原則
OSS讀寫權限
(可選)若您使用KMS託管的指定CMK ID加密OSS Object,還需要為該RAM使用者配置KMS許可權。具體操作,請參見為OSS儲存卷加密。
為demo-role-for-rrsa角色授權。具體操作,請參見為RAM角色授權。
說明您也可以通過修改RAM角色信任策略的方式使用已有的授權了OSS許可權的RAM角色。具體操作,請參見使用已存在的RAM角色並授權。
步驟三:建立PV和PVC
配置PV使用RRSA鑒權。
使用以下內容,建立配置RRSA許可權認證的pv-rrsa.yaml樣本檔案。
apiVersion: v1 kind: PersistentVolume metadata: name: pv-oss labels: alicloud-pvname: pv-oss spec: capacity: storage: 5Gi accessModes: - ReadOnlyMany persistentVolumeReclaimPolicy: Retain csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: pv-oss # 需要和PV名字一致。 volumeAttributes: bucket: "oss" # 替換為實際Bucket名稱。 path: / url: "oss-cn-hangzhou.aliyuncs.com" otherOpts: "-o umask=022 -o max_stat_cache_size=0 -o allow_other" authType: "rrsa" roleName: "demo-role-for-rrsa"
參數
描述
name
PV的名稱。
labels
配置PV的標籤。
storage
OSS的可使用量。
accessModes
配置訪問模式,支援ReadOnlyMany和ReadWriteMany。
選擇ReadOnlyMany時,ossfs將以唯讀模式掛載OSS Bucket。
persistentVolumeReclaimPolicy
PV回收策略,當前OSS儲存卷僅支援
Retain
,即刪除PVC時,PV和OSS Bucket中的資料不會被刪除。driver
定義驅動類型。取值為ossplugin.csi.alibabacloud.com,表示使用阿里雲OSS CSI外掛程式。
volumeHandle
配置PV的名稱。
bucket
需要掛載的OSS Bucket。
path
表示掛載時相對Bucket根檔案的目錄結構,預設為/(v1.14.8.32-c77e277b-aliyun及之後版本的CSI組件支援)。
ossfs 1.91版本前,該路徑需在OSS側預先建立,詳情請參見ossfs 1.91及以上版本新功能介紹及效能壓測。
url
掛載OSS的Endpoint,Endpoint以OSS控制台Bucket概覽頁為準。
掛載節點和Bucket相同地區,或已打通VPC網路時,請使用內網地址。
掛載節點和Bucket不同地區時,請使用外網地址。
不同訪問連接埠的常見填寫格式如下:
內網格式:
http://oss-{{regionName}}-internal.aliyuncs.com
或https://oss-{{regionName}}-internal.aliyuncs.com
。外網格式:
http://oss-{{regionName}}.aliyuncs.com
或https://oss-{{regionName}}.aliyuncs.com
。
重要vpc100-oss-{{regionName}}.aliyuncs.com
的內網訪問連接埠格式已廢棄,請及時切換。otherOpts
您可以為OSS儲存卷輸入定製化參數,格式為
-o *** -o ***
,例如-o umask=022 -o max_stat_cache_size=0 -o allow_other
。umask:用於更改ossfs讀檔案的許可權。例如,設定umask=022後,ossfs檔案的許可權都會變更為755。通過SDK、OSS控制台等其他方式上傳的檔案在ossfs中預設許可權均為640。因此,建議您在讀寫分離情境中配置umask許可權。
max_stat_cache_size:用於指定檔案中繼資料的緩衝空間,可緩衝多少個檔案的中繼資料。中繼資料快取可加快ls操作速度。但若通過OSS、SDK、控制台、ossutil等方式修改檔案,可能會導致中繼資料未被及時更新。
allow_other:賦予電腦上其他使用者訪問掛載目錄的許可權,但不包含目錄內的檔案。
更多選擇性參數,請參見ossfs掛載選項說明。
authType
配置為
rrsa
,聲明使用RRSA方式鑒權。roleName
配置為以上步驟一:建立RAM角色中已建立或修改的RAM角色名稱。若您需要為不同的PV配置不同的許可權,可以建立不同的RAM角色,在PV中配置不同的roleName。
說明如果您需要在RRSA鑒權方式中使用指定的ARNs或ServiceAccount,相關操作,請參見如何在RRSA鑒權方式中使用指定的ARNs或ServiceAccount?。
執行以下命令,在PV中配置RRSA進行許可權認證。
kubectl create -f pv-rrsa.yaml
執行以下命令建立靜態卷PVC。
kubectl create -f pvc-oss.yaml
以下為建立靜態卷PVC的pvc-oss.yaml樣本檔案。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-oss spec: accessModes: - ReadOnlyMany resources: requests: storage: 5Gi selector: matchLabels: alicloud-pvname: pv-oss
參數
說明
name
PVC的名稱。
accessModes
配置訪問模式,支援ReadOnlyMany和ReadWriteMany。
選擇ReadOnlyMany時,ossfs將以唯讀模式掛載OSS Bucket。
storage
聲明應用使用量,不能大於儲存卷的總量。
alicloud-pvname
通過標籤關聯PV,與PV標籤保持一致。
在叢集管理頁左側導覽列選擇
,在儲存聲明頁面可以看到建立的PVC。
步驟四:建立應用
建立一個名為oss-static的應用並掛載PVC。
執行以下命令建立oss-static.yaml。
kubectl create -f oss-static.yaml
以下為建立應用oss-static.yaml樣本檔案。
apiVersion: apps/v1
kind: Deployment
metadata:
name: oss-static
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
ports:
- containerPort: 80
volumeMounts:
- name: pvc-oss
mountPath: "/data"
- name: pvc-oss
mountPath: "/data1"
livenessProbe:
exec:
command:
- sh
- -c
- cd /data
initialDelaySeconds: 30
periodSeconds: 30
volumes:
- name: pvc-oss
persistentVolumeClaim:
claimName: pvc-oss
livenessProbe
:配置健全狀態檢查。更多資訊,請參見OSS儲存卷。mountPath
:OSS在容器中掛載的位置。claimName
:PVC的名稱,用於綁定PVC。
通過RAM使用者AccessKey鑒權方式掛載
使用該方式掛載時,如果OSS儲存卷引用的AccessKey被撤銷或取消授權,已經掛載了儲存卷的應用將無權訪問OSS並報許可權錯誤。您需要修改Secret中的AccessKey資訊並重新掛載,此操作將導致應用重啟。AccessKey吊銷後ossfs重掛載流程,請參見OSS儲存掛載許可權問題中情境4的解決方案。
如果有定期輪轉AccessKey的需求,建議您通過RRSA鑒權方式掛載。
步驟一:建立具有OSS存取權限的RAM使用者並擷取AccessKey
您需要首先擷取RAM使用者的AccessKey資訊,以使其擁有OSS Bucket的操作許可權。
建立RAM使用者,如已建立可跳過。具體操作,請參見建立RAM使用者。
建立如下OSS訪問的自訂權限原則。具體操作,請參見建立自訂權限原則。
以下唯讀和讀寫權限策略請根據使用需求選擇,並替換
mybucket
為您實際建立的Bucket名稱。OSS唯讀權限原則
OSS讀寫權限
(可選)若您使用KMS託管的指定CMK ID加密OSS Object,還需要為該RAM使用者配置KMS許可權。具體操作,請參見為OSS儲存卷加密。
為RAM使用者添加OSS許可權。具體操作,請參見為RAM使用者授權。
為RAM使用者建立AccessKey。具體操作,請參見擷取AccessKey。
步驟二:建立PV和PVC並掛載
您可以通過控制台和kubectl兩種方式建立儲存卷、儲存聲明並掛載至應用中。
控制台
1、建立PV
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在儲存卷頁面,單擊右上方的建立。
在建立儲存卷對話方塊中配置參數。
配置項
說明
樣本值
儲存卷類型
選擇OSS。
OSS
名稱
建立的資料卷的名稱。資料卷名在叢集內必須唯一。
pv-oss
總量
所建立儲存卷的容量。
20GiB
訪問模式
支援ReadOnlyMany和ReadWriteMany,預設為ReadOnlyMany。
選擇ReadOnlyMany時,ossfs將以唯讀模式掛載OSS Bucket。
ReadOnlyMany
訪問認證
選擇訪問OSS所需的保密字典,即步驟一擷取的AccessKey ID和AccessKey Secret。
選擇已有保密字典:選擇命名空間和保密字典。
建立保密字典:配置命名空間、名稱、AccessKey ID及AccessKey Secret。
選擇已有保密字典
選擇性參數
您可以為OSS儲存卷輸入定製化參數,格式為
-o *** -o ***
,例如-o umask=022 -o max_stat_cache_size=0 -o allow_other
。umask:用於更改ossfs讀檔案的許可權。例如,設定umask=022後,ossfs檔案的許可權都會變更為755。通過SDK、OSS控制台等其他方式上傳的檔案在ossfs中預設許可權均為640。因此,建議您在讀寫分離情境中配置umask許可權。
max_stat_cache_size:用於指定檔案中繼資料的緩衝空間,可緩衝多少個檔案的中繼資料。中繼資料快取可加快ls操作速度。但若通過OSS、SDK、控制台、ossutil等方式修改檔案,可能會導致中繼資料未被及時更新。
allow_other:賦予電腦上其他使用者訪問掛載目錄的許可權,但不包含目錄內的檔案。
更多選擇性參數,請參見ossfs掛載選項說明。
-o umask=022 -o max_stat_cache_size=0 -o allow_other
Bucket ID
您要使用的OSS Bucket的名稱。單擊選擇Bucket,在彈出的對話方塊中選擇所需的Bucket並單擊選擇。
說明此處顯示為已配置的AccessKey可擷取到的Bucket列表。
選擇Bucket
OSS Path
表示掛載時相對Bucket根檔案的目錄結構,預設為/(v1.14.8.32-c77e277b-aliyun及之後版本的CSI組件支援)。
ossfs 1.91版本前,該路徑需在OSS側預先建立,詳情請參見ossfs 1.91及以上版本新功能介紹及效能壓測。
/
訪問網域名稱
您可以參考以下情況選擇需要的訪問網域名稱。
如果Bucket和ECS執行個體位於不同地區(Region),請選擇公網網域名稱。
如果Bucket和ECS執行個體位於相同地區,請選擇私網網域名稱。
說明通過私網訪問時,預設使用HTTP協議。若您需要指定網路傳輸協議為HTTPS,可使用kubectl命令列方式建立靜態PV。
公網網域名稱
標籤
為該儲存卷添加標籤。
pv-oss
參數配置完成後,單擊建立。
2、建立PVC
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在儲存聲明頁面,單擊右上方的建立。
在建立儲存聲明頁面中,填寫介面參數。
配置項
說明
樣本值
儲存宣告類型
選擇OSS。
OSS
名稱
建立的資料卷的名稱,在叢集內必須唯一。
pvc-oss
分配模式
選擇已有儲存卷。
說明若未建立儲存卷,您可以設定分配模式為建立儲存卷,配置建立儲存卷參數。
pv-oss
已有儲存卷
單擊選擇已有儲存類,在目標儲存卷右側操作列,單擊選擇,選擇儲存卷。
總量
所建立儲存卷的容量。
說明所建立的儲存卷容量不能超過儲存空間容量。
20GiB
單擊建立。
建立成功後可以在列表中看到csi-oss-pvc,並且已綁定相應的儲存卷。
3、建立應用
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在無狀態頁面,單擊使用鏡像建立。
配置建立應用的參數資訊,配置完成後,單擊建立。
主要參數如下,其他參數保持預設即可。更多資訊,請參見建立無狀態工作負載Deployment。
配置頁
參數
說明
樣本
應用基本資料
應用程式名稱
Deployment名稱,自訂輸入。格式要求請參考介面提示。
test-oss
副本數量
Deployment的副本數量。
2
容器配置
鏡像名稱
用於部署應用的鏡像地址。
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
所需資源
所需的vCPU和記憶體資源。
0.25 vCPU,0.5 GiB
資料卷
單擊增加雲端儲存聲明,然後完成參數配置。
掛載源:選擇之前建立的PVC。
容器路徑:輸入NAS檔案系統要掛載到的容器路徑。
掛載源:pvc-oss
容器路徑:/data
查看應用部署狀態。
在無狀態頁面,單擊應用程式名稱。
在容器組頁簽下,確認Pod已正常運行(狀態為Running)。
kubectl
1、建立PV和PVC
您可以通過以下方式建立PV和PVC。
方式一:使用Secret建立PV及PVC
通過Secret為CSI組件提供AccessKey資訊。
重要使用該方式掛載時,如果OSS儲存卷引用的AccessKey被撤銷或取消授權,已經掛載了儲存卷的應用將無權訪問OSS並報許可權錯誤。您需要修改Secret中的AccessKey資訊並重新掛載,此操作將導致應用重啟。AccessKey吊銷後ossfs重掛載流程,請參見OSS儲存掛載許可權問題中情境4的解決方案。
如果有定期輪轉AccessKey的需求,建議您通過RRSA鑒權方式掛載。
方式二:直接在PV中配置AccessKey
重要使用該方式掛載時,如果OSS儲存卷引用的AccessKey被撤銷或取消授權,已經掛載了儲存卷的應用將無權訪問OSS並報許可權錯誤。您需要重建PV中的AccessKey資訊並重新部署應用。
如果有定期輪轉AccessKey的需求,建議您通過RRSA鑒權方式掛載。
使用Secret建立
建立Secret。
以下為通過Secret配置AccessKey資訊的YAML樣本檔案。
apiVersion: v1 kind: Secret metadata: name: oss-secret namespace: default stringData: akId: <yourAccessKey ID> akSecret: <yourAccessKey Secret>
說明建立Secret選擇的Namespace需要和應用所在的Namespace一致。
本樣本中,
akId
和akSecret
需要替換為步驟一擷取的AccessKey ID和AccessKey Secret。執行以下命令建立靜態卷PV。
kubectl create -f pv-oss.yaml
以下為建立靜態卷PV的pv-oss.yaml樣本檔案。
apiVersion: v1 kind: PersistentVolume metadata: name: pv-oss labels: alicloud-pvname: pv-oss spec: capacity: storage: 5Gi accessModes: - ReadOnlyMany persistentVolumeReclaimPolicy: Retain csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: pv-oss # 需要和PV名字一致。 nodePublishSecretRef: name: oss-secret namespace: default volumeAttributes: bucket: "oss" #替換為實際Bucket名稱。 url: "oss-cn-hangzhou.aliyuncs.com" otherOpts: "-o umask=022 -o max_stat_cache_size=0 -o allow_other" path: "/"
參數
描述
name
PV的名稱。
labels
配置PV的標籤。
storage
OSS的可使用量。
accessModes
配置訪問模式,支援ReadOnlyMany和ReadWriteMany。
選擇ReadOnlyMany時,ossfs將以唯讀模式掛載OSS Bucket。
persistentVolumeReclaimPolicy
PV回收策略,當前OSS儲存卷僅支援
Retain
,即刪除PVC時,PV和OSS Bucket中的資料不會被刪除。driver
定義驅動類型。取值為ossplugin.csi.alibabacloud.com,表示使用阿里雲OSS CSI外掛程式。
nodePublishSecretRef
定義掛載PV時通過Secret對象來擷取AccessKey資訊。
volumeHandle
配置PV的名稱。
bucket
需要掛載的OSS Bucket。
url
掛載OSS的Endpoint,Endpoint以OSS控制台Bucket概覽頁為準。
掛載節點和Bucket相同地區,或已打通VPC網路時,請使用內網地址。
掛載節點和Bucket不同地區時,請使用外網地址。
不同訪問連接埠的常見填寫格式如下:
內網格式:
http://oss-{{regionName}}-internal.aliyuncs.com
或https://oss-{{regionName}}-internal.aliyuncs.com
。外網格式:
http://oss-{{regionName}}.aliyuncs.com
或https://oss-{{regionName}}.aliyuncs.com
。
重要vpc100-oss-{{regionName}}.aliyuncs.com
的內網訪問連接埠格式已廢棄,請及時切換。otherOpts
您可以為OSS儲存卷輸入定製化參數,格式為
-o *** -o ***
,例如-o umask=022 -o max_stat_cache_size=0 -o allow_other
。umask:用於更改ossfs讀檔案的許可權。例如,設定umask=022後,ossfs檔案的許可權都會變更為755。通過SDK、OSS控制台等其他方式上傳的檔案在ossfs中預設許可權均為640。因此,建議您在讀寫分離情境中配置umask許可權。
max_stat_cache_size:用於指定檔案中繼資料的緩衝空間,可緩衝多少個檔案的中繼資料。中繼資料快取可加快ls操作速度。但若通過OSS、SDK、控制台、ossutil等方式修改檔案,可能會導致中繼資料未被及時更新。
allow_other:賦予電腦上其他使用者訪問掛載目錄的許可權,但不包含目錄內的檔案。
更多選擇性參數,請參見ossfs掛載選項說明。
path
表示掛載時相對Bucket根檔案的目錄結構,預設為/(v1.14.8.32-c77e277b-aliyun及之後版本的CSI組件支援)。
ossfs 1.91版本前,該路徑需在OSS側預先建立,詳情請參見ossfs 1.91及以上版本新功能介紹及效能壓測。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在儲存卷頁面,可查看已建立的PV。
執行以下命令建立靜態卷PVC。
kubectl create -f pvc-oss.yaml
以下為建立靜態卷PVC的pvc-oss.yaml樣本檔案。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-oss spec: accessModes: - ReadOnlyMany resources: requests: storage: 5Gi selector: matchLabels: alicloud-pvname: pv-oss
參數
說明
name
PVC的名稱。
accessModes
配置訪問模式,支援ReadOnlyMany和ReadWriteMany。
選擇ReadOnlyMany時,ossfs將以唯讀模式掛載OSS Bucket。
storage
聲明應用使用量,不能大於儲存卷的總量。
alicloud-pvname
通過標籤關聯PV,與PV標籤保持一致。
在叢集管理頁左側導覽列選擇
,在儲存聲明頁面可以看到建立的PVC。
直接在PV中配置AccessKey
執行以下命令,直接在PV中配置AccessKey資訊。
kubectl create -f pv-accesskey.yaml
以下為配置AccessKey資訊的pv-accesskey.yaml樣本檔案。
apiVersion: v1 kind: PersistentVolume metadata: name: pv-oss labels: alicloud-pvname: pv-oss spec: capacity: storage: 5Gi accessModes: - ReadOnlyMany persistentVolumeReclaimPolicy: Retain csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: pv-oss # 需要和PV名字一致。 volumeAttributes: bucket: "oss" #替換為實際Bucket名稱。 url: "oss-cn-hangzhou.aliyuncs.com" otherOpts: "-o umask=022 -o max_stat_cache_size=0 -o allow_other" akId: "***" akSecret: "***"
參數
描述
name
PV的名稱。
labels
配置PV的標籤。
storage
OSS的可使用量。
accessModes
配置訪問模式,支援ReadOnlyMany和ReadWriteMany。
選擇ReadOnlyMany時,ossfs將以唯讀模式掛載OSS Bucket。
persistentVolumeReclaimPolicy
PV回收策略,當前OSS儲存卷僅支援
Retain
,即刪除PVC時,PV和OSS Bucket中的資料不會被刪除。driver
定義驅動類型。取值為ossplugin.csi.alibabacloud.com,表示使用阿里雲OSS CSI外掛程式。
volumeHandle
配置PV的名稱。
bucket
需要掛載的OSS Bucket。
url
掛載OSS的Endpoint,Endpoint以OSS控制台Bucket概覽頁為準。
掛載節點和Bucket相同地區,或已打通VPC網路時,請使用內網地址。
掛載節點和Bucket不同地區時,請使用外網地址。
不同訪問連接埠的常見填寫格式如下:
內網格式:
http://oss-{{regionName}}-internal.aliyuncs.com
或https://oss-{{regionName}}-internal.aliyuncs.com
。外網格式:
http://oss-{{regionName}}.aliyuncs.com
或https://oss-{{regionName}}.aliyuncs.com
。
重要vpc100-oss-{{regionName}}.aliyuncs.com
的內網訪問連接埠格式已廢棄,請及時切換。otherOpts
您可以為OSS儲存卷輸入定製化參數,格式為
-o *** -o ***
,例如-o umask=022 -o max_stat_cache_size=0 -o allow_other
。umask:用於更改ossfs讀檔案的許可權。例如,設定umask=022後,ossfs檔案的許可權都會變更為755。通過SDK、OSS控制台等其他方式上傳的檔案在ossfs中預設許可權均為640。因此,建議您在讀寫分離情境中配置umask許可權。
max_stat_cache_size:用於指定檔案中繼資料的緩衝空間,可緩衝多少個檔案的中繼資料。中繼資料快取可加快ls操作速度。但若通過OSS、SDK、控制台、ossutil等方式修改檔案,可能會導致中繼資料未被及時更新。
allow_other:賦予電腦上其他使用者訪問掛載目錄的許可權,但不包含目錄內的檔案。
更多選擇性參數,請參見ossfs掛載選項說明。
path
表示掛載時相對Bucket根檔案的目錄結構,預設為/(v1.14.8.32-c77e277b-aliyun及之後版本的CSI組件支援)。
ossfs 1.91版本前,該路徑需在OSS側預先建立,詳情請參見ossfs 1.91及以上版本新功能介紹及效能壓測。
akId
配置為上一步擷取的AccessKey ID。
akSecret
配置為上一步擷取的AccessKey Secret。
執行以下命令建立靜態卷PVC。
kubectl create -f pvc-oss.yaml
以下為建立靜態卷PVC的pvc-oss.yaml樣本檔案。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-oss spec: accessModes: - ReadOnlyMany resources: requests: storage: 5Gi selector: matchLabels: alicloud-pvname: pv-oss
參數
說明
name
PVC的名稱。
accessModes
配置訪問模式,支援ReadOnlyMany和ReadWriteMany。
選擇ReadOnlyMany時,ossfs將以唯讀模式掛載OSS Bucket。
storage
聲明應用使用量,不能大於儲存卷的總量。
alicloud-pvname
通過標籤關聯PV,與PV標籤保持一致。
在叢集管理頁左側導覽列選擇
,在儲存聲明頁面可以看到建立的PVC。
2、建立應用
建立一個名為oss-static的應用並掛載PVC。
執行以下命令建立oss-static.yaml。
kubectl create -f oss-static.yaml
以下為建立應用oss-static.yaml樣本檔案。
apiVersion: apps/v1
kind: Deployment
metadata:
name: oss-static
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
ports:
- containerPort: 80
volumeMounts:
- name: pvc-oss
mountPath: "/data"
- name: pvc-oss
mountPath: "/data1"
livenessProbe:
exec:
command:
- sh
- -c
- cd /data
initialDelaySeconds: 30
periodSeconds: 30
volumes:
- name: pvc-oss
persistentVolumeClaim:
claimName: pvc-oss
livenessProbe
:配置健全狀態檢查。更多資訊,請參見OSS儲存卷。mountPath
:OSS在容器中掛載的位置。claimName
:PVC的名稱,用於綁定PVC。
驗證OSS的持久化儲存和共用儲存
查看部署oss-static應用所在的Pod。
kubectl get pod
預期輸出:
NAME READY STATUS RESTARTS AGE oss-static-66fbb85b67-d**** 1/1 Running 0 1h oss-static-66fbb85b67-l**** 1/1 Running 0 1h
在任意Pod下建立tmpfile檔案。以名為oss-static-66fbb85b67-d****的Pod為例。
在兩個Pod掛載路徑下查看檔案。
以名oss-static-66fbb85b67-d****的Pod掛載路徑為
data
,名為oss-static-66fbb85b67-l****
的掛載路徑為data1
為例。kubectl exec oss-static-66fbb85b67-d**** -- ls /data | grep tmpfile kubectl exec oss-static-66fbb85b67-l**** -- ls /data1 | grep tmpfile
預期輸出:
tmpfile
預期輸出表明,兩個Pod的掛載路徑下均存在此檔案,說明兩個Pod共用資料。
說明若您無法看到預期輸出,請確認CSI組件版本為v1.20.7及以上版本。更多資訊,請參見csi-plugin。
重建Pod。
kubectl delete pod oss-static-66fbb85b67-d****
預期輸出:
pod "oss-static-66fbb85b67-d****" deleted
驗證Pod刪除後,儲存空間裡建立的檔案是否還存在。
執行以下命令,查看重建的Pod名稱。
kubectl get pod
預期輸出:
NAME READY STATUS RESTARTS AGE oss-static-66fbb85b67-l**** 1/1 Running 0 1h oss-static-66fbb85b67-z**** 1/1 Running 0 40s
執行以下命令,查看/data路徑下的檔案。
kubectl exec oss-static-66fbb85b67-z**** -- ls /data | grep tmpfile
預期輸出:
tmpfile
預期輸出表明,temfile檔案仍然存在,說明OSS的資料可持久化儲存。
相關文檔
您還可以通過StorageClass動態磁碟區的方式使用OSS,請參見使用OSS動態儲存裝置卷。
如需通過OSS實現讀寫分離,請參見OSS儲存讀寫分離最佳實務。
如需通過CNFS託管使用OSS以提升OSS儲存卷的效能和QoS控制,請參見管理OSS生命週期。
如需對OSS儲存卷進行加密,請參見加密OSS儲存卷。
如需對OSS儲存卷進行監控,請參見查看儲存監控。