使用对象存储BOS
更新时间:2023-09-12
容器引擎CCE支持通过创建PV/PVC,并为工作负载挂载数据卷方式使用百度智能云对象存储BOS。本文将介绍如何在集群中静态挂载对象存储。
使用限制
- 集群Kubernetes版本需大于或等于1.16。
- 请注意创建的BOS Bucket所处地域。如果创建的BOS Bucket与容器集群分属不同地域,要求挂载点所在BCC/BBC开放公网访问,同地域则可以通过内网读写。
前提条件
- 集群已安装对象存储组件,更多信息请见CCE CSI BOS Plugin 说明。
操作步骤
本文介绍通过Kubectl创建PV/PVC实现静态挂载BOS。
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: # 填写步骤1中的secret名
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关联,建议填写,如果集群中使用多类存储系统的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