Helm values.yaml参数说明

在使用Helm安装CSI时,需要您根据部署时需要使用的特性准备Helm工程的values.yaml文件。华为CSI已经在软件包的helm/esdk目录下提供了values.yaml模板文件。

本章节将详细说明values.yaml中的配置项以及典型场景下的后端配置示例。

images参数配置说明

values.yaml中的images配置项主要配置华为CSI运行时依赖的组件镜像信息。需要配置的参数如下:

表 1 images配置项说明

参数

描述

必选参数

默认值

images.huaweiCSIService

huawei-csi镜像。

huawei-csi:4.12.0

images.storageBackendSidecar

华为后端管理sidecar镜像。

storage-backend-sidecar:4.12.0

images.storageBackendController

华为后端管理控制器镜像。

storage-backend-controller:4.12.0

images.huaweiCSIExtender

huawei-csi-extender镜像

huawei-csi-extender:4.12.0

images.sidecar.livenessProbe

livenessprobe sidecar镜像。

registry.k8s.io/sig-storage/livenessprobe:v2.15.0

images.sidecar.provisioner

csi-provisioner sidecar镜像。

registry.k8s.io/sig-storage/csi-provisioner:v5.2.0

images.sidecar.attacher

csi-attacher sidecar镜像。

registry.k8s.io/sig-storage/csi-attacher:v4.8.0

images.sidecar.resizer

csi-resizer sidecar镜像。

registry.k8s.io/sig-storage/csi-resizer:v1.13.2

images.sidecar.snapshotter

csi-snapshotter sidecar镜像。

registry.k8s.io/sig-storage/csi-snapshotter:v8.2.0

images.sidecar.snapshotController

snapshot-controller sidecar镜像。

registry.k8s.io/sig-storage/snapshot-controller:v8.2.0

images.sidecar.registrar

csi-node-driver-registrar sidecar镜像。

registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.13.0

images.sidecar.healthMonitorController

health-monitor-controller sidecar镜像

registry.k8s.io/sig-storage/csi-external-health-monitor-controller:v0.17.0

  • huaweiCSIService、storageBackendSidecar、storageBackendController、huaweiCSIExtender参数的值,请参考 上传华为CSI镜像 章节的说明,使用最终生成镜像的名称和版本。
  • 其他sidecar镜像参数,请参考 检查CSI依赖的镜像 章节的说明,使用最终上传的镜像的名称和版本。

controller参数配置说明

controller配置项用于配置huawei-csi-controller组件的相关配置。

表 2 controller配置项说明

参数

描述

必选参数

默认值

备注

controller.controllerCount

huawei-csi-controller组件的副本数

1

Kubernetes版本低于v1.17时,由于Kubernetes社区提供的csi-provisioner sidecar镜像不支持--leader-election参数,只能通过单副本方式部署huawei-csi-controller组件。

因此,当Kubernetes版本低于v1.17版本时,该参数仅支持配置为1。

controller.volumeNamePrefix

PV名称的前缀,默认值为pvc,即创建的PV名称为:pvc-<uuid>。前缀必须满足DNS 子域名的命名规则,且PV名称总长度不得超过253个字符。

pvc

对应的provisioner参数名称为:--volume-name-prefix。

建议前缀不超过20个字符。

详细配置请参考配置PV名称前缀

  • 对接后端是OceanStor V5 SAN时,建议前缀不超过5个字符。
  • 对接后端是OceanStor V5 NAS存储时,前缀只能包含小写字母、'-',以及数字。
  • 对接后端是OceanStor Dorado,OceanStor,OceanDisk或者OceanStor A系列存储时,前缀只能包含小写字母、'-',以及数字。
  • 对接后端是OceanStor Pacific系列存储时,前缀只能包含字母、数字、“_”、“-”和“.”,且总长度限制为58字符。
  • 对接后端是FusionStorage Block时,前缀只能包含字母、数字、“_”和“-”,且总长度限制为58字符。

controller.webhookPort

webhook服务使用的端口。

4433

如果存在端口冲突可修改为其他未占用的端口。

controller.snapshot.enabled

是否开启快照特性。

true

如果要使用快照相关功能,请开启该特性。

要求Kubernetes版本高于v1.20。

controller.resizer.enabled

是否开启扩容特性。

true

要求Kubernetes版本高于v1.16。

controller.resizer.kubeApiQps

表示客户端每秒能发送到kube-apiserver的请求数量。

5

  

controller.resizer.kubeApiBurst

表示客户端在短时间内能够发送的最大请求数量。

10

  

controller.nodeSelector

huawei-csi-controller的节点选择器。配置后huawei-csi-controller仅会调度到存在该标签的节点上。

-

节点选择器的详细说明请参考:将 Pod 分配给节点

controller.tolerations

huawei-csi-controller的污点容忍。配置后huawei-csi-controller能够容忍节点上存在该污点。

-

污点和容忍度的详细说明请参考:污点和容忍度

controller.affinity

huawei-csi-controller的节点亲和性。配置后huawei-csi-controller会优先调度到存在该标签的节点上。

-

节点亲和性的详细说明请参考:将Pod指派给节点

controller.livenessProbePort

huawei-csi-controller的存活性探针端口,用于健康检查。

9808

如果存在端口冲突可修改为其他未占用的端口

controller.csiExtender.volumeModify.enabled

是否开启PVC变更特性。

false

如果要PVC变更相关功能,请开启该特性。

controller.csiExtender.volumeModify.retryBaseDelay

PVC变更创建任务失败时的最小重试间隔。

5s

建议使用默认值。

controller.csiExtender.volumeModify.retryMaxDelay

PVC变更创建任务失败时的最大重试间隔。

5m

建议使用默认值。

controller.csiExtender.volumeModify.reconcileDelay

调协VolumeModifyClaim对象的间隔。

1s

建议使用默认值。

controller.exportCsiService.enabled

是否开启将CSI服务运行在Kubernetes集群的Service上。

false

开启后,Kubernetes集群内其他服务可通过gRPC访问CSI服务。

controller.exportCsiService.port

CSI服务运行在Kubernetes集群的Service时使用的端口。

9090

如果存在端口冲突可修改为其他未占用的端口。

controller.healthMonitor.enabled

是否开启卷监控服务

false

开启后,可使用卷监控相关特性

controller.healthMonitor.monitorInterval

监控轮询间隔

60s

配置卷监控轮询间隔时间

controller.healthMonitor.workThreads

监控PV工作线程数

10

配置监控PV工作线程数

controller.provisioner.kubeApiQps

表示客户端每秒能发送到kube-apiserver的请求数量。

5

  

controller.provisioner.kubeApiBurst

表示客户端在短时间内能够发送的最大请求数量。

10

  

controller.attacher.kubeApiQps

表示客户端每秒能发送到kube-apiserver的请求数量。

5

  

controller.attacher.kubeApiBurst

表示客户端在短时间内能够发送的最大请求数量。

10

  

controller.snapshotter.kubeApiQps

表示客户端每秒能发送到kube-apiserver的请求数量。

5

  

controller.snapshotter.kubeApiBurst

表示客户端在短时间内能够发送的最大请求数量。

10

  

controller.storageBackendController.kubeApiQps

表示客户端每秒能发送到kube-apiserver的请求数量。

5

  

controller.storageBackendController.kubeApiBurst

表示客户端在短时间内能够发送的最大请求数量。

10

  

controller.storageBackendSidecar.kubeApiQps

表示客户端每秒能发送到kube-apiserver的请求数量。

5

  

controller.storageBackendSidecar.kubeApiBurst

表示客户端在短时间内能够发送的最大请求数量。

10

  

controller.huaweiCsiExtender.kubeApiQps

表示客户端每秒能发送到kube-apiserver的请求数量。

5

  

controller.huaweiCsiExtender.kubeApiBurst

表示客户端在短时间内能够发送的最大请求数量。

10

  

controller.huaweiCsiDriver.kubeApiQps

表示客户端每秒能发送到kube-apiserver的请求数量。

5

  

controller.huaweiCsiDriver.kubeApiBurst

表示客户端在短时间内能够发送的最大请求数量。

10

  


当controller.snapshot.enabled参数配置为true时,需要安装“helm/crd/snapshot-crds”目录下的卷快照CRD资源。

node参数配置说明

node配置项用于配置huawei-csi-node组件的相关配置。

表 3 node配置项说明

参数

描述

必选参数

默认值

备注

node.maxVolumesPerNode

节点可使用的华为CSI发放卷的最大数量。不定义或者配置为0时则认为不限制。

如果创建Pod时,指定 nodeName,则会忽略该配置。

100

详细说明请参考:Volume Limits

node.nodeSelector

huawei-csi-node的节点选择器。配置后huawei-csi-node仅会调度到存在该标签的节点上。

-

节点选择器的详细说明请参考:将 Pod 分配给节点

node.tolerations

huawei-csi-node的污点容忍。配置后huawei-csi-node能够容忍节点上存在该污点。

- key: "node.kubernetes.io/memory-pressure"
  operator: "Exists"
  effect: "NoExecute"
- key: "node.kubernetes.io/disk-pressure"
  operator: "Exists"
  effect: "NoExecute"
- key: "node.kubernetes.io/network-unavailable"
  operator: "Exists"
  effect: "NoExecute"

污点和容忍度的详细说明请参考:污点和容忍度

node.affinity

huawei-csi-node的节点亲和性。配置后huawei-csi-node会优先调度到存在该标签的节点上。

-

节点亲和性的详细说明请参考:将Pod指派给节点

node.livenessProbePort

huawei-csi-node的存活性探针端口,用于健康检查。

9800

如果存在端口冲突可修改为其他未占用的端口

node.kubeletVolumeDevicesDirName

kubelet挂载块设备时的目录名称。

volumeDevices

当一个块设备被成功挂载之后,挂载路径的目录结构应该如下所示:

/var/lib/kubelet/plugins/kubernetes.io/csi/{kubeletVolumeDevicesDirName}/publish/{specName}/{podUID}

node.huaweiCsiDriver.kubeApiQps

表示客户端每秒能发送到kube-apiserver的请求数量。

5

  

node.huaweiCsiDriver.kubeApiBurst

表示客户端在短时间内能够发送的最大请求数量。

10

  

csiDriver参数配置说明

csiDriver配置项包括了华为CSI运行时的基本配置,如华为驱动名称、多路径类型等配置信息。

表 4 csiDriver配置项说明

参数

描述

必选参数

默认值

备注

csiDriver.driverName

注册的驱动名称。

csi.huawei.com

  • 直接使用默认值。
  • 对于CCE Agile平台,需要修改该字段,例如:csi.oceanstor.com。

csiDriver.endpoint

通信端点。

/csi/csi.sock

直接使用默认值。

csiDriver.connectorThreads

最大并发扫盘/卸盘数。参数格式为整型,支持范围为1~10。

4

该值设置越大,同一时间单个节点中的针对多路径的扫盘、卸盘并发操作就越多。在使用DM-Multipath时,并发数过大可能会导致未知问题,影响整体时间。

csiDriver.volumeUseMultipath

是否使用多路径软件。参数格式为布尔值。

true

强烈建议开启多路径软件,以增强存储链路的冗余度和性能。

csiDriver.scsiMultipathType

存储协议为fc/iscsi时,使用的多路径软件。支持配置如下参数:

  • DM-multipath
  • HW-UltraPath
  • HW-UltraPath-NVMe

当volumeUseMultipath为true时必填。

DM-multipath

建议使用DM-multipath取值。

csiDriver.nvmeMultipathType

存储协议为NVMe类型时,使用的多路径软件。支持配置如下参数:

  • HW-UltraPath-NVMe
  • NVMe-Native

当volumeUseMultipath为true时必填。

HW-UltraPath-NVMe

  • roce-nvme、fc-nvme协议仅支持配置HW-UltraPath-NVMe。
  • tcp-nvme协议仅支持配置NVMe-Native。

csiDriver.scanVolumeTimeout

在主机上使用DM-Multipath多路径时,等待多路径聚合的超时时间,支持范围为1~600,单位秒。

3

-

csiDriver.execCommandTimeout

在主机上执行命令的超时时间

30

CSI插件在挂载,扩容盘符等场景下,需要运行一些主机命令,例如使用mount命令挂载文件系统。该配置用于控制执行单条命令的超时时间。

csiDriver.enableRoCEConnect

使用roce-nvme或tcp-nvme协议时,是否开启CSI自动扫盘

true

如果使用外部工具建立NVMe_over_RoCE或NVMe_over_TCP连接,可以设置为false。例如:存储开启SNSD自动建连时,可以配置为false。

csiDriver.allPathOnline

是否检查DM-Multipath或NVMe-Native原生多路径软件聚合的路径数等于实际在线的路径数,支持配置如下参数:

  • true:多路径软件聚合的路径数等于实际在线的路径数才满足盘符挂载条件。
  • false:默认不检查多路径软件聚合的路径数量,只要聚合出虚拟盘符,即满足盘符挂载条件。

当csiDriver.scsiMultipathType为DM-multipath,或csiDriver.nvmeMultipathType为NVMe-Native时必填。

false

-

csiDriver.backendUpdateInterval

后端能力的更新时间间隔,支持范围60~600,单位秒。

60

-

csiDriver.controllerLogging.module

controller日志记录类型。支持配置如下参数:

  • file
  • console

file

使用file选项时,日志将被保留在节点指定的目录下,当CSI所在的Pod被销毁时,日志仍然被保留。

使用console选项时,日志将被保留在CSI所在Pod的临时空间中,当CSI所在的Pod被销毁时,日志也随之被销毁。

csiDriver.controllerLogging.level

controller日志输出级别。支持配置如下参数:

  • debug
  • info
  • warning
  • error
  • fatal

info

-

csiDriver.controllerLogging.fileDir

controller日志在file输出模式下的日志目录。

/var/log/huawei

请确保该目录下有足够的空间保留日志。空间大小建议不小于200 MB。

csiDriver.controllerLogging.fileSize

controller日志在file输出模式下单个日志文件大小。

20M

-

csiDriver.controllerLogging.maxBackups

controller日志在file输出模式下日志文件备份上限。

9

-

csiDriver.nodeLogging.module

node日志记录类型。支持配置如下参数:

  • file
  • console

file

使用file选项时,日志将被保留在节点指定的目录下,当CSI所在的Pod被销毁时,日志仍然被保留。

使用console选项时,日志将被保留在CSI所在Pod的临时空间中,当CSI所在的Pod被销毁时,日志也随之被销毁。

csiDriver.nodeLogging.level

node日志输出级别。支持配置如下参数:

  • debug
  • info
  • warning
  • error
  • fatal

info

-

csiDriver.nodeLogging.fileDir

node日志在file输出模式下的日志目录。

/var/log/huawei

请确保该目录下有足够的空间保留日志。空间大小建议不小于200 MB。

csiDriver.nodeLogging.fileSize

node日志在file输出模式下单个日志文件大小。

20M

-

csiDriver.nodeLogging.maxBackups

node日志在file输出模式下日志文件备份上限。

9

-

csiDriver.reportNodeIP

是否上报节点IP

false

开启后,CSI node将自动上报节点IP

csiDriver.enablePerNodeSecret

是否为每个节点创建Secret

fasle

默认情况下,将会把所有节点上CSI需要的信息保存到一个Secret中;开启后,将会为每个节点创建独立的Secret用于保存信息。

须知:

开启该开关后需要满足以下两个条件

  • K8S节点名称需要满足K8S命名规范
  • 集群中不能存在与K8S节点名称相同的存储后端。


如果您的容器环境已经部署了华为CSI,请确保csiDriver.driverName的设置和之前部署时的配置保持一致。否则会导致系统中已存在的有华为CSI发放的卷/快照无法被新部署的华为CSI管理。

其他参数配置说明

其他配置项包括了CSI插件某些特性的开关或者镜像获取策略。

表 5 其他配置项说明

参数

描述

必选参数

默认值

备注

kubernetes.namespace

华为CSI运行时所在Kubernetes命名空间,支持用户自定义。名称必须由小写字母、数字和“-”组成,例如:my-name、123-abc。

huawei-csi

-

kubeletConfigDir

kubelet工作目录。

/var/lib/kubelet

  • 直接使用默认值。
  • 对于Tanzu平台,需要修改该字段为/var/vcap/data/kubelet。
  • 对于CCE Agile平台,需要修改该字段为/mnt/paas/kubernetes/kubelet。

sidecarImagePullPolicy

sidecar镜像的拉取策略。

IfNotPresent

-

huaweiImagePullPolicy

huawei-csi镜像的拉取策略。

IfNotPresent

-

imagePullSecrets

用于Kubernetes集群通过镜像仓库的身份验证,进而提取私有镜像。

-

详细说明请参考:从私有仓库拉取镜像

CSIDriverObject.isCreate

是否创建CSIDriver对象

false

CSIDriver特性在Kubernetes v1.18成为GA版本,因此要求Kubernetes版本高于v1.18,当Kubernetes版本低于 v1.18时,请设置该参数为false。

CSIDriverObject.attachRequired

CSI插件是否跳过attach操作。支持配置如下参数:

  • true:需要attach操作。
  • false:跳过attach操作。

true

参数attachRequired在Kubernetes v1.18支持配置。

如果CSIDriverObject.isCreate为true并且attachRequired参数设置为false时,huawei-csi插件将不会部署csi-attacher这个sidecar。

  • 使用NAS存储时支持配置为false。
  • 使用SAN存储时,请配置为true。

CSIDriverObject.fsGroupPolicy

基础卷是否支持在装载之前更改卷的所有权和权限。支持配置如下参数:

  • "ReadWriteOnceWithFSType":仅当定义了fsType并且卷的acfsTypecessModes包含ReadWriteOnce时,才支持卷所有权和权限更改。
  • "File":Kubernetes可以使用fsGroup更改卷的权限和所有权,以匹配Pod安全策略中用户请求的fsGroup,而不管fsGroup或accessModes如何。
  • "None":将在不进行修改的情况下装载卷。
  • "null":将不设置fsGroupPolicy参数

null

参数fsGroupPolicy在Kubernetes v1.20支持配置,并且当CSIDriverObject.isCreate为true时该参数生效。

该特性在Kubernetes v1.20中为Beta版本,在Kubernetes v1.23成为GA版本,因此要求Kubernetes版本高于v1.20。

leaderElection.leaseDuration

领导者持续时间。

8s

仅多controller场景生效。

leaderElection.renewDeadline

领导者重新选举时间。

6s

仅多controller场景生效。

leaderElection.retryPeriod

领导者选举重试时间。

2s

仅多controller场景生效。

service.ipFamilyPolicy

service的IP协议栈选择策略。

SingleStack

可配置参数:

  • SingleStack:service只使用一种 IP 地址族(IPv4 或 IPv6)。
  • PreferDualStack:service优先尝试使用双栈;如果集群不支持双栈,则回退单栈。
  • RequireDualStack:service必须使用双栈;如果集群不支持双栈,则service创建会失败。

service.ipFamilies

service支持的IP协议栈列表。

IPv4

可配置参数:

  • IPv4
  • IPv6

resources

可以对huawei-csi-controller和huawei-csi-node相关容器资源进行分配:

resources.<component>.<container-name>

<component>支持的参数:

  • node:配置huawei-csi-node组件中的sidecar时配置;
  • controller: 配置huawei-csi-controller组件中的sidecar时配置;

controller.<container-name>支持的参数:

  • livenessProbe
  • csiProvisioner
  • csiAttacher
  • csiResizer
  • csiSnapshotter
  • snapshotController
  • storageBackendController
  • storageBackendSidecar
  • huaweiCsiExtender
  • huaweiCsiDriver

node.<container-name>支持的参数:

  • huaweiCsiDriver
  • livenessProbe
  • csiNodeDriverRegistrar

各容器资源分配默认值,请参考:华为CSI资源管理

以huawei-csi-controller的livenessProbe为例:

resources:
  controller:
    limits:
      cpu: 100m
      memory: 128Mi
    requests:
      cpu: 10m
      memory: 128Mi


请确保此kubernetes.namespace填入的命名空间在Kubernetes上已经存在,如果不存在请使用如下命令创建对应的命名空间。本例中,华为CSI运行的命名空间为“huawei-csi”。

kubectl create namespace huawei-csi