这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

安装

本章节介绍如何安装华为CSI。


当前版本的华为CSI添加了资源请求和限制,具体详情请参考 华为CSI资源管理

前提条件

  • 已完成 安装前准备
  • 集群的所有worker节点与待接入的存储设备的业务组网通信正常,iSCSI场景下允许使用ping命令进行连通性校验。
  • 集群的所有worker节点已安装对应协议所需要的软件客户端,如iSCSI客户端、NFS客户端等。

1 - 使用Helm安装

本章节介绍如何使用Helm安装部署华为CSI,Helm软件版本要求3.0以上。

Helm安装说明

  • 华为CSI的安装支持root用户和非root用户。使用非root用户安装华为CSI时,需要保证当前用户能够访问Kubernetes集群的API Server,配置非root用户访问Kubernetes集群请参考 配置非root用户访问Kubernetes集群
  • 华为CSI必须在root用户权限下运行。

Helm是Kubernetes生态系统中的一个软件包管理工具,类似Ubuntu的APT、CentOS的YUM、或Python的pip一样,专门负责管理Kubernetes的应用资源。

使用Helm可以对Kubernetes应用进行统一打包、分发、安装、升级以及回退等操作。

Helm在安装huawei-csi-controller时,将在指定命名空间的Deployment类型的工作负载中部署以下组件:

  • huawei-csi-driver:华为CSI驱动。
  • storage-backend-controller:华为后端管理控制器,管理storageBackendClaim资源。
  • storage-backend-sidecar:用于管理storageBackendContent资源。
  • Kubernetes External Provisioner:用于提供/删除卷。
  • Kubernetes External Attacher:用于挂载/解挂载卷。
  • Kubernetes External Resizer:用于扩容卷。
  • Kubernetes External liveness-probe: 用来判断Pod健康状态。
  • (可选)huawei-csi-extender:提供变更持久卷支持。
  • (可选)Kubernetes External Snapshotter:提供快照支持(作为CRD安装)。
  • (可选)Kubernetes External Snapshot Controller :用于卷快照控制。
  • (可选)Kubernetes External Health Monitor Controller :用于卷健康监控控制。

Helm在安装huawei-csi-node时,将在指定命名空间的DaemonSet类型的工作负载中部署以下组件:

  • huawei-csi-driver:华为CSI驱动。
  • Kubernetes Node Registrar:处理驱动程序注册。
  • liveness-probe: 用来判断Pod健康状态。

1.1 - Kubernetes、OpenShift、Tanzu安装华为CSI

安装步骤

  1. 使用远程访问工具(以PuTTY为例),通过管理IP地址,登录集群的任意master节点。

  2. 将Kubernetes CSI组件包中的"helm"目录拷贝到master节点的任意目录下。Helm工具路径请参见 表1

  3. 进入到helm/esdk的工作目录下。

    cd helm/esdk
    
  4. 准备values.yaml文件,华为CSI已经在软件包的helm/esdk目录下提供了values.yaml模板文件,您也可以根据 Helm values.yaml参数说明 修改参数对华为CSI进行定制。

  5. 安装前配置:

  6. 执行命令,更新存储后端CRD

    kubectl apply -f ./crds/backend/
    
  7. (可选) 请务必按照 检查卷快照依赖组件 章节检查快照依赖组件,确认无误后执行执行命令更新快照CRD,如果controller.snapshot.enabled参数设置为false或Kubernetes版本低于v1.20,可跳过本步骤,详情请参考 表2

    kubectl apply -f ./crds/snapshot-crds/ --validate=false
    
  8. 执行如下命令安装华为CSI。其中,helm-huawei-csi为自定义的Helm Chart名称,./表示使用当前目录下的Helm工程,huawei-csi为自定义的Helm Chart命名空间。

    helm install helm-huawei-csi ./ -n huawei-csi --create-namespace
    

    命令结果示例如下:

    NAME: helm-huawei-csi
    LAST DEPLOYED: Wed Jun  8 11:50:28 2022
    NAMESPACE: huawei-csi
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
    
  9. 完成huawei-csi服务部署后,可执行如下命令检查服务是否启动。

    kubectl get pod -n huawei-csi
    

    命令结果示例如下,Pod状态为“Running“则安装成功。

    NAME                                     READY   STATUS    RESTARTS   AGE
    huawei-csi-controller-6dfcc4b79f-9vjtq   9/9     Running   0          24m
    huawei-csi-controller-6dfcc4b79f-csphc   9/9     Running   0          24m
    huawei-csi-node-g6f4k                    3/3     Running   0          20m
    huawei-csi-node-tqs87                    3/3     Running   0          20m
    

OpenShift平台安装配置

OpenShift平台请根据以下步骤创建SecurityContextConstraints资源。

  1. 执行命令,编辑helm_scc.yaml文件。

    vi helm_scc.yaml
    
  2. 修改helm_scc.yaml文件。其中huawei-csi是指创建的命名空间,请根据实际情况填写。

    apiVersion: security.openshift.io/v1
    kind: SecurityContextConstraints
    metadata:
      name: helm-scc
    allowHostDirVolumePlugin: true
    allowHostIPC: true
    allowHostNetwork: true
    allowHostPID: true
    allowHostPorts: true
    allowPrivilegeEscalation: true
    allowPrivilegedContainer: true
    
    defaultAddCapabilities:
    - SYS_ADMIN
    runAsUser:
      type: RunAsAny
    seLinuxContext:
      type: RunAsAny
    fsGroup:
      type: RunAsAny
    users:
    - system:serviceaccount:huawei-csi:huawei-csi-controller
    - system:serviceaccount:huawei-csi:huawei-csi-node
    
  3. 执行命令,创建SecurityContextConstraints。

    oc create -f helm_scc.yaml
    

Tanzu平台安装配置

Tanzu平台请执行以下命令配置kubelet安装目录。

  1. 进入到安装包的helm/esdk目录下,执行以下命令打开配置文件。安装包目录请参见 表1

    vi values.yaml
    
  2. 修改kubeletConfigDir参数如下并保存:

    # Specify kubelet config dir path.
    # kubernetes and openshift is usually /var/lib/kubelet
    # Tanzu is usually /var/vcap/data/kubelet
    # CCE is usually /mnt/paas/kubernetes/kubelet
    kubeletConfigDir: /var/vcap/data/kubelet
    

Tanzu平台TKGI 1.16版本及以下请执行以下命令配置RBAC权限

  1. 执行命令, 创建rbac.yaml文件。

    vi rbac.yaml
    
  2. 粘贴如下内容至rbac.yaml,保存并退出:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: huawei-csi-psp-role
    rules:
    - apiGroups: ['policy']
      resources: ['podsecuritypolicies']
      verbs: ['use']
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: huawei-csi-psp-role-cfg
    roleRef:
      kind: ClusterRole
      name: huawei-csi-psp-role
      apiGroup: rbac.authorization.k8s.io
    subjects:
    - kind: Group
      apiGroup: rbac.authorization.k8s.io
      name: system:serviceaccounts:huawei-csi
    - kind: Group
      apiGroup: rbac.authorization.k8s.io
      name: system:serviceaccounts:default
    
  3. 执行命令,创建RBAC权限。

    kubectl create -f rbac.yaml
    

1.2 - CCE或CCE Agile平台安装华为CSI

本章节介绍如何在CCE或CCE Agile平台安装华为CSI。

制作Helm安装包

CCE或CCE Agile平台无法直接通过Helm安装华为CSI,需要手动制作Helm安装包后上传至平台模板市场进行安装。

  1. 使用远程访问工具(以PuTTY为例),通过管理IP地址,登录已部署Helm的任意节点。

  2. 将华为CSI组件包中的"helm"目录拷贝到节点的任意目录下。Helm工具路径请参见 表1

  3. 进入到helm的工作目录下。

    cd helm/
    
  4. 修改helm/esdk/values.yaml文件中kubeletConfigDir和csiDriver.driverName参数。

    vi ./esdk/values.yaml
    

    修改如下参数:

    # Specify kubelet config dir path.
    # kubernetes and openshift is usually /var/lib/kubelet
    # Tanzu is usually /var/vcap/data/kubelet
    # CCE is usually /mnt/paas/kubernetes/kubelet
    kubeletConfigDir: /mnt/paas/kubernetes/kubelet
    
    # The CSI driver parameter configuration
    csiDriver:
      # Driver name, it is strongly recommended not to modify this parameter
      # The CCE platform needs to modify this parameter, e.g. csi.oceanstor.com
      driverName: csi.oceanstor.com
    
  5. 执行命令制作Helm安装包,该命令会将安装包生成到当前路径下。

    helm package ./esdk/ -d ./
    

安装华为CSI

  1. 使用远程访问工具(以PuTTY为例),通过管理IP地址,登录已部署CCE Agile平台master的任意节点。

  2. 执行命令创建部署华为CSI的命名空间,其中huawei-csi为自定义的命名空间。

    kubectl create namespace huawei-csi
    
  3. 导出Helm安装包,具体请参考 制作Helm安装包

  4. 在主页单击“模板市场 > 我的模板 > 上传模板”,进入上传模板对话框。将导出的Helm安装包导入CCE Agile平台。

  5. 安装包上传完毕,在主页单击“模板市场 > 我的模板”,进入我的模板页面,单击“安装 > 提交”。其中模板实例名称可自定义填写。

  6. 在主页单击“模板市场 > 模板实例”,选择安装时指定的项目(例如样例中的项目是“default”)。安装成功后执行状态将回显为“安装成功”。

1.3 - 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

2 - 手动安装

本章节介绍如何手动安装华为CSI。


手动安装华为CSI当前仅支持Kubernetes平台。

安装步骤

  1. 使用远程访问工具(以PuTTY为例),通过管理IP地址,登录集群的任意master节点。

  2. 将Kubernetes CSI组件包中的"manual"目录拷贝到master节点的任意目录下。

  3. 执行命令创建一个命名空间,此处空间名称以huawei-csi为例。

    kubectl create ns huawei-csi
    
  4. 进入到manual/esdk的工作目录下。具体路径请参见 表1

    cd manual/esdk
    
  5. 执行命令,更新存储后端CRD

    kubectl apply -f ./crds/backend/
    
  6. (可选) 请务必按照 检查卷快照依赖组件 章节检查快照依赖组件,确认无误后执行执行命令更新快照CRD,如果Kubernetes版本低于v1.20,跳过本步骤。

    kubectl apply -f ./crds/snapshot-crds/ --validate=false
    
  7. (可选) 执行命令安装CSIDriver。如果不使用CSIDriver特性,可跳过本步骤,详情请参考 CSIDriver 特性。

    kubectl apply -f ./deploy/csidriver.yaml
    
  8. 执行命令安装huawei-csi-controller服务。


    如果Kubernetes版本低于v1.20,需要对 ./deploy/huawei-csi-controller.yaml 文件进行如下修改:

    • Kubernetes版本低于v1.20时,不支持快照特性,删除名称为csi-snapshotter和snapshot-controller这两个与快照相关的容器配置。 如果Kubernetes版本低于v1.17,需要对 ./deploy/huawei-csi-controller.yaml 文件进行如下修改:
    • Kubernetes版本低于v1.17时,不支持快照特性,删除名称为csi-snapshotter和snapshot-controller这两个与快照相关的容器配置。
    • Kubernetes版本低于v1.17时,由于Kubernetes社区提供的csi-provisioner sidecar镜像不支持–leader-election参数,删除csi-provisioner容器leader-election参数配置,且仅支持单副本部署。
    • 根据 检查CSI依赖的镜像 中的版本要求,修改依赖的镜像版本。
    kubectl apply -f ./deploy/huawei-csi-controller.yaml
    
  9. 执行命令安装huawei-csi-node服务。

    kubectl apply -f ./deploy/huawei-csi-node.yaml 
    
  10. 执行命令检查服务是否启动。

    kubectl get pod -n huawei-csi
    

    回显示例如下,Pod状态为“Running“则安装成功。

    NAME                                     READY   STATUS    RESTARTS   AGE
    huawei-csi-controller-68745d489c-v5xkj   9/9     Running   0          13m
    huawei-csi-node-4hbqp                    3/3     Running   0          13m
    huawei-csi-node-f7dkf                    3/3     Running   0          13m
    huawei-csi-node-xrntc                    3/3     Running   0          13m
    


多副本controller部署场景下可以通过修改 ./deploy/huawei-csi-controller.yaml 文件中Deployment资源的spec.replica字段来指定副本个数,修改完成后,执行kubectl apply -f ./deploy/huawei-csi-controller.yaml使配置生效。