设置对象存储挂载参数
本章节主要介绍如何设置对象存储的挂载参数。您可以在PV中设置挂载参数,然后通过PVC绑定PV,也可以在StorageClass中设置挂载参数,然后使用StorageClass创建PVC,动态创建出的PV会默认带有StorageClass中设置的挂载参数。
前提条件
CCE容器存储(Everest)版本要求1.2.8及以上版本。插件主要负责将挂载参数识别并传递给底层存储,指定参数是否有效依赖于底层存储是否支持。
约束与限制
挂载参数暂不支持安全容器。
对象存储挂载参数
CCE的存储插件everest在挂载对象存储时默认设置了表1和表2的参数,其中表1中的参数不可取消。
参数 |
支持的对象存储类型 |
参数值 |
描述 |
---|---|---|---|
use_ino |
并行文件系统 |
无需填写 |
使用该选项,由obsfs分配inode编号。读写模式下自动开启。 |
big_writes |
并行文件系统 对象桶 |
无需填写 |
配置后可更改写缓存最大值大小。 |
nonempty |
并行文件系统 对象桶 |
无需填写 |
允许挂载目录非空。 |
allow_other |
并行文件系统 对象桶 |
无需填写 |
允许其他用户访问挂载目录。 |
no_check_certificate |
并行文件系统 对象桶 |
无需填写 |
不校验服务端证书。 |
enable_noobj_cache |
对象桶 |
无需填写 |
为不存在的对象启用缓存条目,可提高性能。对象桶读写模式下自动使用。 从everest 1.2.40版本开始不再默认设置enable_noobj_cache参数。 |
sigv2 |
对象桶 |
无需填写 |
签名版本。对象桶自动使用。 |
public_bucket |
对象桶 |
1 |
设置为1时匿名挂载公共桶。对象桶只读模式下自动使用。 |
compat_dir |
对象桶 |
无需填写 |
使用1.92版本的s3fs时自动添加该参数。支持显示桶内的多级目录对象。 |
参数 |
支持的对象存储类型 |
参数值 |
描述 |
---|---|---|---|
max_write |
并行文件系统 对象桶 |
131072 |
仅配置big_writes的情况下才生效,推荐使用128KB。 |
multipart_size |
对象桶 |
20 |
以多段上传模式上传文件时,段的大小,会影响能够上传的文件大小,单位为MB。 |
ssl_verify_hostname |
并行文件系统 对象桶 |
0 |
不根据主机名验证SSL证书。 |
max_background |
并行文件系统 对象桶 |
100 |
可配置后台最大等待请求数。并行文件系统自动使用。 |
umask |
并行文件系统 对象桶 |
0 |
配置文件权限的掩码。 例如,如果umask值为022,而目录最大权限为777,则设置umask后该目录权限为777 - 022 = 755,即rwxr-xr-x。 |
在PV中设置挂载参数
在PV中设置挂载参数可以通过mountOptions字段实现,如下所示,mountOptions支持挂载的字段请参见对象存储挂载参数。
- 使用kubectl连接集群,详情请参见通过kubectl连接集群。
- 在PV中设置挂载参数,示例如下:
apiVersion: v1 kind: PersistentVolume metadata: annotations: pv.kubernetes.io/provisioned-by: everest-csi-provisioner everest.io/reclaim-policy: retain-volume-only # 可选字段,删除PV,保留底层存储卷 name: pv-obs # PV的名称 spec: accessModes: - ReadWriteMany # 访问模式,对象存储必须为ReadWriteMany capacity: storage: 1Gi # 对象存储容量大小 csi: driver: obs.csi.everest.io # 挂载依赖的存储驱动 fsType: obsfs # 实例类型 volumeHandle: <your_volume_id> # 对象存储的名称 volumeAttributes: storage.kubernetes.io/csiProvisionerIdentity: everest-csi-provisioner everest.io/obs-volume-type: STANDARD everest.io/region: <your_region> # 对象存储的区域 everest.io/enterprise-project-id: <your_project_id> # 可选字段,企业项目ID,如果指定企业项目,则创建PVC时也需要指定相同的企业项目,否则PVC无法绑定PV。 nodePublishSecretRef: # 设置对象存储的自定义密钥 name: <your_secret_name> # 自定义密钥的名称 namespace: <your_namespace> # 自定义密钥的命名空间 persistentVolumeReclaimPolicy: Retain # 回收策略 storageClassName: csi-obs # 存储类名称 mountOptions: # 挂载参数 - umask=027
- PV创建后,可以创建PVC关联PV,然后在工作负载的容器中挂载,具体操作步骤请参见通过静态存储卷使用已有对象存储。
- 验证挂载参数是否生效。
本例中将PVC挂载至使用nginx:latest镜像的工作负载,可以登录到运行挂载对象存储卷的Pod所在节点上通过进程详情观察。
执行以下命令:- 对象桶:ps -ef | grep s3fs
root 22142 1 0 Jun03 ? 00:00:00 /usr/bin/s3fs {your_obs_name} /mnt/paas/kubernetes/kubelet/pods/{pod_uid}/volumes/kubernetes.io~csi/{your_pv_name}/mount -o url=https://{endpoint}:443 -o endpoint={region} -o passwd_file=/opt/everest-host-connector/***_obstmpcred/{your_obs_name} -o nonempty -o big_writes -o sigv2 -o allow_other -o no_check_certificate -o ssl_verify_hostname=0 -o umask=027 -o max_write=131072 -o multipart_size=20
- 并行文件系统:ps -ef | grep obsfs
root 1355 1 0 Jun03 ? 00:03:16 /usr/bin/obsfs {your_obs_name} /mnt/paas/kubernetes/kubelet/pods/{pod_uid}/volumes/kubernetes.io~csi/{your_pv_name}/mount -o url=https://{endpoint}:443 -o endpoint={region} -o passwd_file=/opt/everest-host-connector/***_obstmpcred/{your_obs_name} -o allow_other -o nonempty -o big_writes -o use_ino -o no_check_certificate -o ssl_verify_hostname=0 -o max_background=100 -o umask=027 -o max_write=131072
- 对象桶:ps -ef | grep s3fs
在StorageClass中设置挂载参数
在StorageClass中设置挂载参数同样可以通过mountOptions字段实现,如下所示,mountOptions支持挂载的字段请参见对象存储挂载参数。
- 使用kubectl连接集群,详情请参见通过kubectl连接集群。
- 创建自定义的StorageClass,示例如下:
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: csi-obs-mount-option provisioner: everest-csi-provisioner parameters: csi.storage.k8s.io/csi-driver-name: obs.csi.everest.io csi.storage.k8s.io/fstype: s3fs everest.io/obs-volume-type: STANDARD reclaimPolicy: Delete volumeBindingMode: Immediate mountOptions: # 挂载参数 - umask=027
- StorageClass设置好后,就可以使用这个StorageClass创建PVC,动态创建出的PV会默认带有StorageClass中设置的挂载参数,具体操作步骤请参见通过动态存储卷使用对象存储。
- 验证挂载参数是否生效。
本例中将PVC挂载至使用nginx:latest镜像的工作负载,可以登录到运行挂载对象存储卷的Pod所在节点上通过进程详情观察。
执行以下命令:- 对象桶:ps -ef | grep s3fs
root 22142 1 0 Jun03 ? 00:00:00 /usr/bin/s3fs {your_obs_name} /mnt/paas/kubernetes/kubelet/pods/{pod_uid}/volumes/kubernetes.io~csi/{your_pv_name}/mount -o url=https://{endpoint}:443 -o endpoint={region} -o passwd_file=/opt/everest-host-connector/***_obstmpcred/{your_obs_name} -o nonempty -o big_writes -o sigv2 -o allow_other -o no_check_certificate -o ssl_verify_hostname=0 -o umask=027 -o max_write=131072 -o multipart_size=20
- 并行文件系统:ps -ef | grep obsfs
root 1355 1 0 Jun03 ? 00:03:16 /usr/bin/obsfs {your_obs_name} /mnt/paas/kubernetes/kubelet/pods/{pod_uid}/volumes/kubernetes.io~csi/{your_pv_name}/mount -o url=https://{endpoint}:443 -o endpoint={region} -o passwd_file=/opt/everest-host-connector/***_obstmpcred/{your_obs_name} -o allow_other -o nonempty -o big_writes -o use_ino -o no_check_certificate -o ssl_verify_hostname=0 -o max_background=100 -o umask=027 -o max_write=131072
- 对象桶:ps -ef | grep s3fs