使用对象存储BOSFS 1.0
概述
容器引擎 CCE 支持通过创建 PV/PVC,并为工作负载挂载数据卷的方式使用百度智能云 对象存储BOS。本文介绍在集群中静态挂载对象存储,并提供通过 kubectl 命令行和 CCE 控制台两种挂载方式。
使用限制
- 集群 Kubernetes 版本需大于或等于 1.16。
- 请注意创建的 BOS Bucket 所处地域,需要和CCE集群在同一个地域。
- 挂载BOS Bucket子目录时需要提前在Bucket上创建对应目录,否则会造成Pod挂载失败。
前提条件
- 已创建符合使用限制要求的 CCE 集群。
- 集群已安装对象存储组件,更多信息请见 CCE CSI BOS Plugin 说明。
- 已准备可正常访问同地域 BOS Bucket 的 AK/SK。
- 使用
kubectl方式时,已在本地安装kubectl并通过集群kubeconfig完成连接。
操作步骤
本文介绍通过 Kubectl 或者 CCE 控制台创建 PV/PVC 实现静态挂载 BOS。
方式一:通过 kubectl 命令行操作
1. 在集群中创建 AK/SK 的 Secret,用以访问 BOS 存储
11kubectl create secret generic csi-bos-secret \
22 --from-literal=ak=<Your-AK> \
33 --from-literal=sk=<Your-SK>
说明: 关于 AK/SK 的更多信息参考 如何获取 AK 和 SK
2. 创建持久卷 PV
1apiVersion: v1
2kind: PersistentVolume
3metadata:
4 name: bos-pv
5spec:
6 accessModes:
7 - ReadWriteOnce
8 - ReadOnlyMany
9 capacity:
10 storage: 5Gi
11 storageClassName: csi-bos
12 csi:
13 driver: csi-bosplugin
14 volumeHandle: <bucket-name> # 对应 BOS 的 bucketName,支持挂载 BOS Bucket 子目录,如 <bucket-name>/<dir-name>
15 nodePublishSecretRef:
16 name: csi-bos-secret
17 namespace: default
18 mountOptions:
19 - "-o meta_expires=0"
20 persistentVolumeReclaimPolicy: Retain
说明:
mountOptions : 由于 BOS bucket 挂载依赖 Bosfs,因此支持通过 mountOptions 指定 Bosfs 的启动参数,支持的参数详情见 BOSFS 1.0参数说明,常用参数和说明如下:
meta_expires: meta 缓存过期时间,单位为秒。不设置该参数代表永不过期。上述PV yaml示例中该参数被设置为0,代表不缓存。缓存过期时间过短可能影响写入性能,过长可能导致挂载点内看不到其他客户端写入同一bucket的数据。同一bucket一写多读场景建议设置为0,纯写入场景建议设置为3600,单点读写场景可以不设置。allow_other: 是否允许非 root 用户读取挂载点内数据,默认只有 root 用户可读写,容器内非 root 进程如果要读取挂载点内数据需要设置该参数,更细粒度权限的管理可以配合mount_umask参数一同使用。- BOS 支持一写多读,对应的 accessMode 只支持 ReadWriteOnce + ReadOnlyMany
创建 PV 后,输入 kubectl get pv 可以看见一个 available 状态的 PV,如下所示:
11 $ kubectl get pv
22 NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
33 bos-pv 5Gi RWO,ROX Retain Available csi-bos 3s
3. 创建持久卷声明 PVC
11apiVersion: v1
22kind: PersistentVolumeClaim
33metadata:
44 name: bos-pvc
55spec:
66 accessModes:
77 - ReadWriteOnce
88 - ReadOnlyMany
99 resources:
1010 requests:
1111 storage: 5Gi
1212 storageClassName: csi-bos
说明:YAML 中 storageClassName 字段用于和 PV 关联,建议填写,如果集群中定义了多种存储类,通过指定 storageClassName,用户可以请求特定类存储资源 PV。
绑定前,PVC 为 pending 状态
11 $ kubectl get pvc
22 NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
33 bos-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 RWO,ROX Retain Bound default/bos-pvc csi-bos 36s
4
5$ kubectl get pvc
6NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
7bos-pvc Bound bos-pv 5Gi RWO,ROX csi-bos 1m
有关 PV 和 PVC 的更多设置和字段说明,参见 Kubernetes官方文档。
4. 在 Pod 内挂载 PVC
11apiVersion: v1
22kind: Pod
33metadata:
44 name: nginx01
55 namespace: default
66spec:
77 containers:
88 - image: nginx
99 imagePullPolicy: Always
1010 name: nginx01
1111 volumeMounts:
1212 - mountPath: /var/lib/www/html
1313 name: bos-pvc
1414 - mountPath: /var/lib/www/html000
1515 name: bos-pvc
1616 readOnly: true
1717 livenessProbe:
1818 exec:
1919 command:
2020 - stat
2121 - /var/lib/www/html
2222 volumes:
2323 - name: bos-pvc
2424 persistentVolumeClaim:
2525 claimName: bos-pvc
2626 readOnly: false
Pod 创建后,可以读写容器内的 /var/lib/www/html 路径来访问相应的 BOS 存储上的内容, 同时该路径支持读写,/var/lib/www/html000 支持只读。
注意:
由于 CSI bosplugin 依赖 bosfs,在 Pod 中配置
livenessProbe检查挂载点状态可以避免容器无法感知 bosfs 异常重启后的挂载点失效的问题,强烈建议添加该配置。
同时,支持在其余机器上挂载只读盘,如创建一个包含只读 BOS bucket 的 Pod
11 apiVersion: v1
22 kind: Pod
33 metadata:
44 name: nginx01-bbaa
55 spec:
66 containers:
77 - image: nginx
88 imagePullPolicy: Always
99 name: nginx01
1010 terminationMessagePath: /dev/termination-log
1111 terminationMessagePolicy: File
1212 volumeMounts:
1313 - mountPath: /var/lib/www/html000
1414 name: bos-pvc
1515 readOnly: true
1616 livenessProbe:
1717 exec:
1818 command:
1919 - stat
2020 - /var/lib/www/html000
2121 volumes:
2222 - name: bos-pvc
2323 persistentVolumeClaim:
2424 claimName: bos-pvc
2525 readOnly: true
5. 释放 PV 和 PVC 资源
注意: 删除 PVC 和 PV 会释放挂载关系。请确认业务不再使用相关存储资源后再执行删除操作。
完成存储资源的使用后,可以释放 PVC 和 PV 资源。
使用以下命令可以释放 PVC:
1$ kubectl delete -f bos-pvc.yaml
释放 PVC 后,原来与之绑定的 PV 状态会变为 Released,如下所示:
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
方式二:通过控制台操作
- 登陆 CCE 控制台,点击集群名称进入集群详情页面。
- 在集群中创建 AK/SK 的 Secret,用以访问 BOS 存储。获取 AK/SK 参见 如何获取AK/SK。
a. 左侧导航栏选择配置管理 > 保密字典,点击保密字典列表上方创建保密字典。
b. 在新建保密字典页面中配置相关信息,补充 data,确认无误后点击确定。

- 创建持久卷 PV。
a. 左侧导航栏选择存储 > 存储卷,点击持久卷列表上方新建存储卷。
b. 可选择表单创建或 yaml 创建,若选择表单创建则需进行相关配置。
c. 根据需求配置存储容量,存储类型选择对象存储 BOS,输入 BOS Bucket 的存储路径,存储路径可前往 BOS 控制台 查看。
d. 输入保存 AK/SK 的 Secret 名称,并选择 Secret 所在命名空间。
e. 在确认配置弹窗中确认配置无误后,点击确定创建 PV。


- 创建存储声明 PVC。
a. 左侧导航栏选择存储 > 存储声明,点击存储声明列表上方新建存储声明。
b. 根据需求配置存储容量、访问模式后点击确定,在二次弹窗中确认相关配置,其中storageClassName 字段用于和 PV 关联,建议您填写。确认无误后点击确定创建 PVC。
c. 在存储声明列表中可以看见 PVC 的绑定状态,若绑定成功则为 Bound,并且在存储卷列中可以看见对应绑定的 PV 名称。

- 创建工作负载并在 Pod 中挂载 PVC。
a. 左侧导航栏选择工作负载 > 无状态,选择通过表单 / YAML 创建并配置挂载参数。
b. 由于 CSI bosplugin 依赖 bosfs,强烈建议添加 livenessProbe ,通过 livenessProbe 可以确保在 bosfs 异常重启后,容器能够感知到挂载点是否失效,从而避免相关服务中断。
- 完成存储资源的使用后,可以释放 PVC 和 PV 资源。可以通过对应列表的操作列 > 删除释放 PV 和 PVC 资源。
评价此篇文章
