OSS介紹:
阿里雲對象存儲服務(OSS)提供海量、安全、低成本、高可靠的雲存儲服務。適用於配置文件、圖片、小視頻等共享業務;
容器服務訪問OSS 數據是通過 ossfs 把 bucket 掛載到本地文件系統中,容器中的應用通過本地文件系統操作OSS上的數據,實現數據的訪問、共享。
使用OSS卷掛載時:
隨機或者追加寫文件會導致整個文件的重寫。
元數據操作,例如list directory,性能較差,因爲需要遠程訪問OSS服務器。
多個客戶端掛載同一個bucket時,用戶自行處理併發。例如:避免多個客戶端寫同一個文件。
不適合用在高併發讀/寫的場景,這樣會讓系統的load升高。
創建OSS存儲卷
創建OSS Bucket
- 在OSS控制檯創建一個Bucket,根據需求配置bucket的讀寫權限;
- 在概覽頁查詢訪問bucket的Endpoint;
- 可以在集羣中一個節點掛載OSS Bucket測試是否可行;
創建PV
通過OSS卷創建PV資源類型,配置PV唯一性標籤alicloud-pvname: pv-oss,“pv-oss”爲PV Name;
配置storageClassName: oss,標識此PV爲oss存儲類型,只會與oss類型的PVC綁定;
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-oss
labels:
alicloud-pvname: pv-oss
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
storageClassName: oss
flexVolume:
driver: "alicloud/oss"
options:
bucket: "docker"
url: "oss-cn-hangzhou.aliyuncs.com"
akId: "***"
akSecret: "***"
otherOpts: "-o max_stat_cache_size=0 -o allow_other"
options支持的參數:
bucket:目前只支持掛載 Bucket,不支持掛載 Bucket 下面的子目錄或文件。
url: OSS Bucket的endpoint,掛載 OSS 的接入域名。
akId: 用戶的 access id 值。
akSecret:用戶的 access secret 值。
otherOpts: 掛載 OSS 時支持定製化參數輸入,格式爲: -o **。 參考文檔
創建應用
PVC通過配置selector,指定與創建的oss PV進行綁定;
配置storageClassName: oss,表示至於OSS類型存儲卷綁定;
OSS爲共享存儲,可以同時由多個Pod掛載一個bucket;
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc-oss
spec:
accessModes:
- ReadWriteMany
storageClassName: oss
resources:
requests:
storage: 5Gi
selector:
matchLabels:
alicloud-pvname: pv-oss
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: oss-static
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
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
健康檢查使用說明
OSSFS通過s3fs進行bucket掛載,是在用戶態掛載的文件系統(FUSE);OSSFS在網絡出現重連的時候會重新啓動,這時容器內部的bind目錄已經不可用,需要重啓容器;配置健康檢查能保證容器內oss目錄不可用時重啓容器,進而重新bind oss目錄;
以下情況會導致網絡重置:
升級集羣;
重啓kubelet;
主機網絡重啓;
livenessProbe 參數說明:
command:sh -c cd /oss-path;語法如上面示例所示,目錄爲容器內部的oss對應目錄,多個目錄時寫一個即可;
initialDelaySeconds:容器啓動後開始檢查的時間;
periodSeconds:檢查時間週期;
高可用驗證
創建服務:
# kubectl create -f oss.yaml
persistentvolume "pv-oss" created
persistentvolumeclaim "pvc-oss" created
deployment.apps "oss-static" created
# kubectl get pod
NAME READY STATUS RESTARTS AGE
oss-static-5d8cd48d96-9gc6c 1/1 Running 0 3s
OSS Bucket上創建臨時文件:
# kubectl exec oss-static-5d8cd48d96-9gc6c ls /data | grep tmpfile
# kubectl exec oss-static-5d8cd48d96-9gc6c touch /data/tmpfile
# kubectl exec oss-static-5d8cd48d96-9gc6c ls /data/ | grep tmpfile
tmpfile
刪除Pod,查看新創建Pod數據:
# kubectl delete pod oss-static-5d8cd48d96-9gc6c
# kubectl get pod
NAME READY STATUS RESTARTS AGE
oss-static-5d8cd48d96-bfwb2 1/1 Running 0 14s
# kubectl exec oss-static-5d8cd48d96-bfwb2 ls /data | grep tmpfile
tmpfile