挂载BOS数据卷
BOS概述
百度对象存储 BOS (Baidu Object Storage) 提供稳定、安全、高效以及高扩展存储服务,支持单文件最大 48.8 TB 的文本、多媒体、二进制等任何类型的数据存储。本文介绍如何挂载BOS数据卷。更多信息,请参考:BOS说明
提前准备
创建BOS Bucket
操作步骤请参考创建bucket
部署存储插件
- 登录百度智能云官网,并进入管理控制台。
- 选择“产品服务 > 云原生 > 容器引擎 CCE”,单击进入容器引擎管理控制台。
- 单击左侧导航栏中的 集群管理 > 集群列表 。
- 在集群列表页面中,单击目标集群名称进入集群管理页面。
- 在集群管理页面单击 组件管理 。
- 在组件管理列表中选择存储 CCE CSI BOS Plugin 组件单击“安装”。
- 点击安装并填写相应的参数
配置示例
静态PV/PVC方式挂载BOS
注意:由于CSI bosplugin 依赖 bosfs,在Pod中配置livenessProbe检查挂载点状态可以避免容器无法感知 bosfs 异常重启后的挂载点失效的问题,强烈建议添加该配置,具体配置项参考在Pod内挂载PVC中的例子。 1.在集群中创建 AK/SK 的 secret,用以访问BOS存储。
1kubectl create secret generic csi-bos-secret \
2 --from-literal=ak=<Your AK> \
3 --from-literal=sk=<Your SK>
关于 AK/SK 的更多信息参考:如何获取 AK 和 SK
2.在集群中创建PV和PVC资源
使用kubectl,执行kubectl create -f bos-pv.yaml完成PV的创建
对应的bos-pv.yaml文件如下所示:
1apiVersion: v1
2kind: PersistentVolume
3metadata:
4 name: pv-bos
5 namespace: "default"
6spec:
7 accessModes:
8 - ReadWriteOnce
9 - ReadOnlyMany
10 capacity:
11 storage: 5Gi
12 storageClassName: csi-bos
13 csi:
14 driver: "csi-bosplugin"
15 volumeHandle: "v-XXXXXX"
16 nodePublishSecretRef:
17 name: "csi-bos-secret"
18 namespace: "default"
19 mountOptions:
20 - "-o meta_expires=0 -o preload_blocks=100"
21 persistentVolumeReclaimPolicy: Retain
* yaml中volumeHandle:对应的是BOS的 bucketName, 支持挂载 BOS bucket子目录 , 如: bucketName/dirName
* nodePublishSecretRef:填写步骤1中的 secret 名
* mountOptions: 由于 BOS bucket 挂载依赖 Bosfs,因此支持通过 mountOptions 指定 Bosfs 的启动参数,支持的参数详情见[BOS参数说明](https://cloud.baidu.com/doc/BOS/s/Kjwvyqg72),常用参数和说明如下:
     * meta_expires: meta缓存过期时间,单位为秒。不设置该参数代表永不过期。上述PV yaml示例中该参数被设置为0,代表不缓存。缓存过期时间过短可能影响写入性能,过长可能导致挂载点内看不到其他客户端写入同一bucket的数据。同一bucket一写多读场景建议设置为0,纯写入场景建议设置为3600,单点读写场景可以不设置。
     * preload_blocks: 指定预读blocks数, 单次预读数据为: preload_blocks*1MB。默认0, 如进行大文件下载(顺序读), 建议配置, 若进行随机读, 则不建议配置。
* BOS 支持一写多读,对应的 accessMode 只支持 ReadWriteOnce + ReadOnlyMany
创建PV后,输入kubectl get pv可以看见一个available状态的PV,如下所示:
1$ kubectl get pv
2NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
3bos-pv 5Gi RWO,ROX Retain Available csi-bos 3s
3.建立一个能够与该PV绑定的PVC
使用kubectl,执行kubectl create -f bos-pvc.yaml完成PVC的创建
对应的bos-pvc.yaml文件如下所示:
1apiVersion: v1
2kind: PersistentVolumeClaim
3metadata:
4 name: bos-pvc
5spec:
6 accessModes:
7 - ReadWriteOnce
8 - ReadOnlyMany
9 resources:
10 requests:
11 storage: 5Gi
12 storageClassName: csi-bos
绑定前,PVC为pending状态
1$ kubectl get pvc
2NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
3bos-pvc Pending csi-bos 2s
绑定后,PV和PVC状态变为Bound
1$ kubectl get pv
2NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
3bos-pv 5Gi RWX Retain Bound default/bos-pvc 36s
4$ kubectl get pvc
5NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
6bos-pvc Bound bos-pv 5Gi RWO,ROX csi-bos 1m
有关PV和PVC的更多设置和字段说明,见k8s官方文档
4.在Pod内挂载PVC
在Pod spec内指定相应的PVC名称即可,使用kubectl,执行kubectl create -f demo-bos-pod.yaml完成pod的创建
对应的demo-bos-pod.yaml文件如下所示:
1apiVersion: v1
2kind: Pod
3metadata:
4 name: nginx01
5 namespace: default
6spec:
7 containers:
8 - image: nginx
9 imagePullPolicy: Always
10 name: nginx01
11 volumeMounts:
12 - mountPath: /var/lib/www/html
13 name: bos-pvc
14 - mountPath: /var/lib/www/html000
15 name: bos-pvc
16 readOnly: true
17 livenessProbe:
18 exec:
19 command:
20 - stat
21 - /var/lib/www/html
22 volumes:
23 - name: bos-pvc
24 persistentVolumeClaim:
25 claimName: bos-pvc
26 readOnly: false
Pod创建后,可以读写容器内的/var/lib/www/html路径来访问相应的BOS存储上的内容, 同时该路径支持读写,/var/lib/www/html000支持只读。
同时,支持在其余机器上挂载只读盘,kubectl create -f demo-bos-pod1.yaml创建一个包含只读 bos bucket的 pod
1apiVersion: v1
2kind: Pod
3metadata:
4 name: nginx01-bbaa
5spec:
6 containers:
7 - image: nginx
8 imagePullPolicy: Always
9 name: nginx01
10 terminationMessagePath: /dev/termination-log
11 terminationMessagePolicy: File
12 volumeMounts:
13 - mountPath: /var/lib/www/html000
14 name: bos-pvc
15 readOnly: true
16 livenessProbe:
17 exec:
18 command:
19 - stat
20 - /var/lib/www/html000
21 volumes:
22 - name: bos-pvc
23 persistentVolumeClaim:
24 claimName: bos-pvc
25 readOnly: true
5.释放PV和PVC资源
完成存储资源的使用后,可以释放PVC和PV资源
使用以下命令可以释放PVC
1$ kubectl delete -f bos-pvc.yaml
释放PVC后,原来与之绑定的PV状态会变为Release,如下所示:
1NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
2bos-pv 5Gi RWO,ROX Retain Released default/bos-pvc csi-bos 16m
输入以下指令释放PV资源
1$ kubectl delete -f bos-pv.yaml