背景信息
容器使用云存储的时候是将云存储挂载到容器上,挂载完成后就可以像使用本地目录一样使用云存储。
本节主要介绍在挂载云存储的时候如何设置挂载参数,包括文件系统存储卷和对象存储卷的挂载参数设置。您可以在PV中设置挂载参数,然后通过PVC绑定PV;也可以在StorageClass中设置挂载参数,然后使用StorageClass创建PVC,从而动态创建出的PV会默认带有StorageClass中设置挂载参数。
文件存储挂载参数
CCE的存储插件Everest在挂载文件存储时默认设置了下表所示的参数。除了这些参数外,您还可以设置其他的文件存储挂载参数。
文件存储挂载参数
参数 | 描述 |
---|---|
keep-original-ownership | 表示是否保留文件挂载点的ownership,使用该参数时,要求Everest插件版本为1.2.63或2.1.2以上。 默认为不添加该参数,此时挂载文件存储时将会默认把挂载点的ownership修改为root:root。 如添加该参数,挂载文件存储时将保持文件系统原有的ownership。 |
vers=3 | 文件系统版本,目前只支持NFSv3。取值:3 |
nolock | 选择是否使用NLM协议在服务器上锁文件。当选择nolock选项时,锁对于同一主机的应用有效,对不同主机不受锁的影响。 |
timeo=600 | NFS客户端重传请求前的等待时间(单位为0.1秒)。建议值:600。 |
hard/soft | 挂载方式类型。 取值为hard,即使用硬连接方式,若NFS请求超时,则客户端一直重新请求直至成功。 取值为soft,即软挂载方式挂载系统,若NFS请求超时,则客户端向调用程序返回错误。默认为hard。 |
对象存储挂载参数
CCE的存储插件Everest在挂载文件存储时默认设置了下表参数。除了这些参数外,您还可以设置其他的对象存储挂载参数。
默认使用且不可取消的挂载参数
参数 | 描述 |
---|---|
keep-original-ownership | 表示是否保留文件挂载点的ownership,使用该参数时,要求Everest插件版本为1.2.63或2.1.2以上。 默认为不添加该参数,此时挂载文件存储时将会默认把挂载点的ownership修改为root:root。 如添加该参数,挂载文件存储时将保持文件系统原有的ownership。 |
vers=3 | 文件系统版本,目前只支持NFSv3。取值:3 |
nolock | 选择是否使用NLM协议在服务器上锁文件。当选择nolock选项时,锁对于同一主机的应用有效,对不同主机不受锁的影响。 |
timeo=600 | NFS客户端重传请求前的等待时间(单位为0.1秒)。建议值:600。 |
hard/soft | 挂载方式类型。 取值为hard,即使用硬连接方式,若NFS请求超时,则客户端一直重新请求直至成功。 取值为soft,即软挂载方式挂载系统,若NFS请求超时,则客户端向调用程序返回错误。默认为hard。 |
默认使用且可取消的挂载参数
参数 | 描述 |
---|---|
max_write=131072 | 使用该选项,由obsfs分配inode编号。读写模式下自动开启。 |
ssl_verify_hostname=0 | 不根据主机名验证SSL证书。 |
max_background=100 | 可配置后台最大等待请求数。并行文件系统自动使用。 |
public_bucket=1 | 设置为1时匿名挂载公共桶。对象桶读写模式下自动使用。 |
对象存储卷挂载时使用的所有参数,可以登录到运行挂载对象存储卷的Pod所在节点上通过进程详情观察:
- 对象桶:ps -ef | grep s3fs
root 22142 1 0 Jun03 ? 00:00:00 /usr/bin/s3fs pvc-82fe2cbe-3838-43a2-8afb-f994e402fb9d /mnt/paas/kubernetes/kubelet/pods/0b13ff68-4c8e-4a1c-b15c-724fd4d64389/volumes/kubernetes.io~csi/pvc-82fe2cbe-3838-43a2-8afb-f994e402fb9d/mount -o url=https://{{endpoint}}:443 -o endpoint=xxxxxx -o passwd_file=/opt/everest-host-connector/1622707954357702943_obstmpcred/pvc-82fe2cbe-3838-43a2-8afb-f994e402fb9d -o nonempty -o big_writes -o enable_noobj_cache -o sigv2 -o allow_other -o no_check_certificate -o ssl_verify_hostname=0 -o max_write=131072 -o multipart_size=20 -o umask=0
- 并行文件系统:ps -ef | grep obsfs
root 1355 1 0 Jun03 ? 00:03:16 /usr/bin/obsfs pvc-86720bb9-5aa8-4cde-9231-5253994f8468 /mnt/paas/kubernetes/kubelet/pods/c959a91d-eced-4b41-91c6-96cbd65324f9/volumes/kubernetes.io~csi/pvc-86720bb9-5aa8-4cde-9231-5253994f8468/mount -o url=https://{{endpoint}}:443 -o endpoint=xxxxxx -o passwd_file=/opt/everest-host-connector/1622714415305160399_obstmpcred/pvc-86720bb9-5aa8-4cde-9231-5253994f8468 -o allow_other -o nonempty -o big_writes -o use_ino -o no_check_certificate -o ssl_verify_hostname=0 -o umask=0027 -o max_write=131072 -o max_background=100 -o uid=10000 -o gid=10000
前提条件
- Everest插件版本要求1.2.8及以上版本。
- 插件主要负责将挂载参数识别并传递给底层存储,指定参数有否有效依赖于底层存储是否支持。
约束与限制
挂载参数暂不支持安全容器。
在PV中设置挂载参数
在PV中设置挂载参数可以通过mountOptions字段实现,如下所示,mountOptions支持挂载的字段请参见文件存储挂载参数和对象存储挂载参数。
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-obs-example
annotations:
pv.kubernetes.io/provisioned-by: everest-csi-provisioner
spec:
mountOptions:umask=0027uid=10000gid=10000
accessModes:ReadWriteMany
capacity:
storage: 1Gi
claimRef:
apiVersion: v1
kind: PersistentVolumeClaim
name: pvc-obs-example
namespace: default
csi:
driver: obs.csi.everest.io
fsType: obsfs
volumeAttributes:
everest.io/obs-volume-type: STANDARD
everest.io/region: cn-north-4
storage.kubernetes.io/csiProvisionerIdentity: everest-csi-provisioner
volumeHandle: obs-normal-static-pv
persistentVolumeReclaimPolicy: Delete
storageClassName: csi-obs
PV创建后,可以创建PVC关联PV,然后在工作负载的容器中挂载。
在StorageClass中设置挂载参数
在StorageClass中设置挂载参数同样可以通过mountOptions字段实现,如下所示,mountOptions支持挂载的字段请参见文件存储挂载参数和对象存储挂载参数。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: csi-obs-mount-option
mountOptions:umask=0027uid=10000gid=10000
parameters:
csi.storage.k8s.io/csi-driver-name: obs.csi.everest.io
csi.storage.k8s.io/fstype: s3fs
everest.io/obs-volume-type: STANDARD
provisioner: everest-csi-provisioner
reclaimPolicy: Delete
volumeBindingMode: Immediate
StorageClass设置好后,就可以使用这个StorageClass创建PVC,从而动态创建出的PV会默认带有StorageClass中设置挂载参数。