使用对象存储BOS
概述
容器引擎 CCE 支持通过创建 PV/PVC,并为工作负载挂载数据卷方式使用百度智能云对象存储BOS。本文将介绍如何在集群中静态挂载对象存储。
使用限制
- 集群 Kubernetes 版本需大于或等于 1.16。
- 请注意创建的 BOS Bucket 所处地域。如果创建的 BOS Bucket 与容器集群分属于不同地域,要求挂载点所在 BCC/BBC 开放公网访问,同地域则可以通过内网读写。
前提条件
- 集群已安装对象存储组件,更多信息请见 CCE CSI BOS Plugin 说明。
操作步骤
本文介绍通过 Kubectl 或者 CCE 控制台创建 PV/PVC 实现静态挂载 BOS。
方式一:通过 kubectl 命令行操作
1. 在集群中创建 AK/SK 的 Secret,用以访问 BOS 存储
kubectl create secret generic csi-bos-secret \
--from-literal=ak=<Your-AK> \
--from-literal=sk=<Your-SK>
说明: 关于 AK/SK 的更多信息参考 如何获取 AK 和 SK
2. 创建持久卷 PV
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-bos
namespace: default
spec:
accessModes:
- ReadWriteOnce
- ReadOnlyMany
capacity:
storage: 5Gi
storageClassName: csi-bos
csi:
driver: csi-bosplugin
volumeHandle: v-XXXXXX # 对应的BOS的bucketName, 支持挂载BOS bucket子目录,如: bucketName/dirName
nodePublishSecretRef:
name: csi-bos-secret
namespace: default
mountOptions:
- "-o meta_expires=0"
persistentVolumeReclaimPolicy: Retain
说明:
mountOptions : 由于 BOS bucket 挂载依赖 Bosfs,因此支持通过 mountOptions 指定 Bosfs 的启动参数,支持的参数详情见 BOS参数说明,常用参数和说明如下:
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,如下所示:
$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
bos-pv 5Gi RWO,ROX Retain Available csi-bos 3s
3. 创建持久卷声明 PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: bos-pvc
spec:
accessModes:
- ReadWriteOnce
- ReadOnlyMany
resources:
requests:
storage: 5Gi
storageClassName: csi-bos
说明:YAML 中 storageClassName 字段用于和 PV 关联,建议填写,如果集群中定义了多种存储类,通过指定 storageClassName,用户可以请求特定类存储资源 PV。
绑定前,PVC 为 pending 状态
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
bos-pvc Pending csi-bos 2s
绑定后,PV 和 PVC 状态变为 Bound
$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
bos-pv 5Gi RWX Retain Bound default/bos-pvc 36s
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
bos-pvc Bound bos-pv 5Gi RWO,ROX csi-bos 1m
有关 PV 和 PVC 的更多设置和字段说明,参见 Kubernetes官方文档。
4. 在 Pod 内挂载 PVC
apiVersion: v1
kind: Pod
metadata:
name: nginx01
namespace: default
spec:
containers:
- image: nginx
imagePullPolicy: Always
name: nginx01
volumeMounts:
- mountPath: /var/lib/www/html
name: bos-pvc
- mountPath: /var/lib/www/html000
name: bos-pvc
readOnly: true
livenessProbe:
exec:
command:
- stat
- /var/lib/www/html
volumes:
- name: bos-pvc
persistentVolumeClaim:
claimName: bos-pvc
readOnly: false
Pod 创建后,可以读写容器内的 /var/lib/www/html
路径来访问相应的 BOS 存储上的内容, 同时该路径支持读写,/var/lib/www/html000
支持只读。
注意:
由于 CSI bosplugin 依赖 bosfs,在 Pod 中配置
livenessProbe
检查挂载点状态可以避免容器无法感知 bosfs 异常重启后的挂载点失效的问题,强烈建议添加该配置。
同时,支持在其余机器上挂载只读盘,如创建一个包含只读 BOS bucket 的 Pod
apiVersion: v1
kind: Pod
metadata:
name: nginx01-bbaa
spec:
containers:
- image: nginx
imagePullPolicy: Always
name: nginx01
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/lib/www/html000
name: bos-pvc
readOnly: true
livenessProbe:
exec:
command:
- stat
- /var/lib/www/html000
volumes:
- name: bos-pvc
persistentVolumeClaim:
claimName: bos-pvc
readOnly: true
5. 释放 PV 和 PVC 资源
完成存储资源的使用后,可以释放 PVC 和 PV 资源。
使用以下命令可以释放 PVC:
$ kubectl delete -f bos-pvc.yaml
释放 PVC 后,原来与之绑定的 PV 状态会变为 Release,如下所示:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
bos-pv 5Gi RWO,ROX Retain Released default/bos-pvc csi-bos 16m
输入以下指令释放 PV 资源:
$ 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 资源。