1 - CSI

1.1 - 安装前准备

本章节将对安装前的准备工作进行详细说明。

前提条件

  • 容器管理平台已部署完成,正常运行且满足 兼容性和特性 章节中的容器平台兼容性要求。
  • (企业存储必选)已完成对接华为企业存储初始化配置,包括存储池划分、端口配置等。且存储产品的版本满足 兼容性和特性 章节中的存储兼容性要求。
  • (分布式存储必选)已完成对接华为分布式存储初始化配置,包括存储池划分、端口配置等。且存储产品的版本满足 兼容性和特性 章节中的存储兼容性要求。
  • 完成华为存储和容器平台主机连通性配置,例如运行huawei-csi-controller的worker节点与待接入的存储设备的管理IP地址通信正常,运行huawei-csi-node的worker节点与待接入的存储设备的业务IP地址通信正常,iSCSI场景下允许使用ping命令进行连通性校验等。
  • 请确保操作系统的语言是英文。
  • 请确保存储池、租户名称等相关存储资源名称是英文。

1.1.1 - 下载华为CSI软件包

本章节详细说明了下载方法以及软件包组件结构。

  1. 打开浏览器,访问仓库地址: https://github.com/Huawei/eSDK_K8S_Plugin/releases

  2. 根据CPU架构,下载对应的4.12.0版本软件包。

    • 软件包命名规范:插件名称(eSDK_Storage_CSI)+版本号+CPU架构。
    • CSI支持的CPU架构包括:X86、ARM和PPC64LE。
  3. 将下载的软件包解压。软件包组件结构如下表所示。

    表 1 软件包组件描述

    组件

    组件描述

    image/huawei-csi-v4.12.0-arch.tar

    huawei-csi-driver镜像,"arch"为CPU架构。

    image/storage-backend-controller-v4.12.0-arch.tar

    后端管理控制器镜像,"arch"为CPU架构。

    image/storage-backend-sidecar-v4.12.0-arch.tar

    后端管理sidecar镜像,"arch"为CPU架构。

    image/huawei-csi-extender-v4.12.0-arch.tar

    huawei-csi-extender镜像,"arch"为CPU架构。

    bin/

    华为提供的镜像使用的二进制文件。

    bin/oceanctl

    华为提供的命令行工具,可用于管理存储后端。

    helm/

    Helm工程,用于部署华为CSI。

    manual/

    用于手动安装部署华为CSI。

    examples/

    CSI使用过程中的yaml示例文件。

    examples/backend

    创建存储后端的yaml示例文件。

1.1.2 - 上传华为CSI镜像

华为提供huawei-csi镜像供用户使用,镜像文件获取请参考 下载华为CSI软件包

为了后续在容器管理平台中可以使用CSI镜像,需要提前将CSI镜像导入到集群中:

上传镜像到镜像仓库

安装华为CSI依赖如下华为提供的镜像文件,请按照说明依次导入并上传下列镜像文件,镜像文件获取请参考 下载华为CSI软件包

  • huawei-csi-v4.12.0-arch.tar
  • storage-backend-controller-v4.12.0-arch.tar
  • storage-backend-sidecar-v4.12.0-arch.tar
  • huawei-csi-extender-v4.12.0-arch.tar

前提条件

已准备一台已安装Docker的Linux主机,且该主机支持访问镜像仓库。

操作步骤

  1. 执行以下命令,将CSI镜像导入当前节点。其中arch为CPU架构。

    docker load -i huawei-csi-v4.12.0-<arch>.tar 
    
  2. 执行以下命令,添加镜像仓库地址到镜像标签。其中repo.huawei.com表示镜像仓库的地址。

    docker tag huawei-csi:4.12.0 <repo.huawei.com>/huawei-csi:4.12.0
    
  3. 执行以下命令,将CSI镜像上传到镜像仓库。其中repo.huawei.com表示镜像仓库的地址。

    docker push <repo.huawei.com>/huawei-csi:4.12.0
    

  • 需根据容器运行时环境(如Docker/Containerd),执行对应的CLI命令完成镜像加载与推送操作。
  • CCE或CCE Agile平台请参考该平台用户手册完成镜像导入和上传。

上传镜像到本地节点

若镜像已上传至镜像仓库,则跳过本章节。

前提条件

  • 该节点已获取对应的华为CSI镜像文件,镜像文件获取请参考 下载华为CSI软件包
  • 该节点已经安装Docker或其他容器引擎。

操作步骤

  1. 使用远程访问工具(以PuTTY为例),通过管理IP地址,登录需要导入镜像的节点。
  2. 将Kubernetes CSI组件包中的"image"目录拷贝到当前节点的任意目录下。
  3. 执行cd image命令,进入到image的工作目录。工具路径请参见 表1
  4. 执行命令依次将image目录下的所有华为CSI镜像导入至本地节点,其中name参数是镜像tar包的名字。
    • 使用Docker容器引擎执行:

      docker load -i <name>.tar
      
    • 使用containerd容器引擎执行:

      ctr -n k8s.io image import <name>.tar
      
    • 使用Podman容器引擎执行:

      podman load -i <name>.tar
      


      当节点主机安装的是其他容器引擎时,请使用对应容器引擎的导入镜像命令。

1.1.3 - 检查华为存储上的用户配置

当华为存储接入容器平台后,华为CSI需要在华为存储上根据业务要求管理存储资源,如创建卷、映射卷等操作。此时,华为CSI需要使用华为存储上已经创建的用户和华为存储进行通信。针对不同存储设备所需要的用户信息如下表所示。

表 1 存储对接CSI时使用的用户要求

存储类型

用户类型

角色

级别

类型

OceanStor V5

系统用户

管理员

管理员

本地用户/LDAP用户2

租户用户

租户管理员

管理员

本地用户/LDAP用户2

OceanStor

系统用户

管理员/自定义角色1

N/A

本地用户/LDAP用户2

OceanStor Dorado

系统用户

管理员/自定义角色1

N/A

本地用户/LDAP用户2

租户用户

租户管理员

N/A

本地用户/LDAP用户2

OceanStor A系列

系统用户

管理员

N/A

本地用户/LDAP用户2

OceanStor Pacific系列

系统用户

管理员

N/A

本地用户

OceanDisk

系统用户

管理员

N/A

本地用户

  • 使用自定义角色,需要给角色配置权限,最小权限请参考 配置自定义权限 章节配置。
  • 使用LDAP认证方式,需要在创建后端时配置authenticationMode参数,参考 配置存储后端 中的参数说明。
  • 基于最小权限原则和系统安全要求,不推荐使用“超级管理员”角色下的用户。

1.1.4 - 检查卷快照依赖组件

本章节介绍如何检查集群中卷快照依赖组件情况。


Kubernetes v1.20之前版本部署华为CSI,请按照以下步骤检查。

  1. 执行以下命令查看Kubernetes版本。以Kubernetes版本v1.16.0为例。

    kubectl get node
    

    命令结果示例如下:

    NAME          STATUS       ROLES     AGE    VERSION
    test-master   Ready        master    311d   v1.16.0
    test-node     Ready        <none>    311d   v1.16.0
    
  2. 将Kubernetes CSI组件包中的"helm"目录拷贝到master节点的任意目录下。Helm工具路径请参见 表1

  3. 进入helm/esdk/crds/snapshot-crds目录,执行以下命令,删除快照CRD安装文件。

    rm -rf ./huawei-csi-snapshot-crd-v1.yaml
    

1.1.5 - 检查主机多路径配置

当您计划在容器环境中使用FC/iSCSI/NVMe over RoCE/NVMe over FC协议对华为存储进行访问时,推荐您使用主机多路径软件增强主机和存储的链路冗余和性能。如果您不准备使用多路径软件,请跳过本章节。

华为CSI软件支持对接的操作系统和多路径软件请参考 兼容性和特性 章节中的操作系统兼容性。

  • 如果您准备使用FC/iSCSI协议对接华为存储时,推荐使用操作系统自带的原生DM-Multipath。
  • 如果您准备使用NVMe over RoCE/NVMe over FC协议对接华为存储时,推荐使用华为自研的UltraPath-NVMe。
  • 如果您使用SCSI协议对接华为存储时,请关闭操作系统自带的DM-Multipath。

前提条件

主机多路径软件已经被正确的安装在主机上。

  • 如果您使用的是操作系统自带的原生DM-Multipath,请咨询您的主机或操作系统提供商获取安装所需的资料和软件包。
  • 如果您使用的是华为自研的UltraPath或者UltraPath-NVMe,请联系华为工程师获取UltraPath或者UltraPath-NVMe的资料和软件包。软件包版本请参考 兼容性和特性 章节中的操作系统兼容性。

操作步骤

1.1.6 - 检查主机依赖软件状态

本章节介绍如何检查集群中工作节点上主机依赖软件状态是否正常。以主机操作系统为CentOS 7.9 x86_64为例。

  • 检查iSCSI客户端状态。

    systemctl status iscsi iscsid 
    
  • 检查NFS客户端状态。

    systemctl status rpcbind 
    
  • 检查DM-Multipath多路径软件状态。

    systemctl status multipathd.socket multipathd
    
  • 检查UltraPath多路径软件状态。

    systemctl status nxup
    
  • 检查UltraPath-NVMe多路径软件状态。

    systemctl status upudev upService_plus
    
  • 检查NVMe-Native多路径软件状态,回显“Y”。

    cat /sys/module/nvme_core/parameters/multipath
    
  • 检查DataTurbo客户端状态,请参考 《AI Storage Kit 25.x.x DTFS 用户指南》

  • 检查NFS+客户端状态,请参考 《NFS+客户端 1.x 用户指南》

1.1.7 - 检查主机名长度

使用华为CSI对接NAS存储,可跳过本步骤。

使用华为CSI对接SAN存储,在安装华为CSI前,请检查集群中节点的主机名称长度,需要小于等于27个字符。

若主机名称超过27个字符,名称中超长部分会在存储上创建主机时被截断,这可能会导致集群多个节点映射到存储上同一个主机。

1.1.8 - 检查CSI依赖的镜像

华为CSI安装过程中需要依赖下表中的镜像,若集群中的所有worker节点已连接互联网且能够在线拉取镜像,则可跳过本章节。若集群中的节点无法连接互联网,则请根据使用的Kubernetes版本,下载对应的镜像文件并上传到镜像仓库中或者导入Kubernetes集群的所有worker节点中。

huawei-csi-controller服务依赖的sidecar镜像:livenessprobe、csi-provisioner、csi-attacher、csi-resizer、csi-snapshotter、snapshot-controller、health-monitor-controller、storage-backend-controller、storage-backend-sidecar、huawei-csi-driver和huawei-csi-extender。huawei-csi-node服务依赖的sidecar镜像:livenessprobe、csi-node-driver-registrar和huawei-csi-driver。

关于每个镜像的功能和详情,请参考下表。

表 1 Huawei CSI依赖的镜像

容器名称

容器镜像

K8s版本要求

功能描述

livenessprobe

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

v1.16+

Kubernetes社区提供,提供用于监控CSI的健康状态,并上报给Kubernetes,使Kubernetes能够自动检测CSI程序的问题并重启Pod尝试修改该问题。

csi-resizer

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

v1.16+

Kubernetes社区提供,在扩容PVC时,调用CSI给PVC提供更多的存储容量空间。

csi-node-driver-registrar

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

v1.16+

Kubernetes社区提供,用于获取CSI信息,并通过kubelet的插件注册机制将节点注册到kubelet中,从而Kubernetes能够感知该节点与华为存储的对接。

csi-snapshotter

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

v1.25+

Kubernetes社区提供,在创建/删除VolumeSnapshot时,调用CSI在存储侧完成快照的创建和删除。

registry.k8s.io/sig-storage/csi-snapshotter:v6.3.0

v1.20-v1.24

snapshot-controller

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

v1.25+

Kubernetes社区提供,在创建/删除VolumeSnapshot时,监听Kubernetes API中关于VolumeSnapshot和VolumeSnapshotContent的对象,并触发csi-snapshotter在存储上完成快照的创建。

registry.k8s.io/sig-storage/snapshot-controller:v6.3.0

v1.20-v1.24

csi-provisioner

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

v1.20+

Kubernetes社区提供,用于完成PVC创建/删除。

  • 在创建PVC时,调用huawei-csi-controller服务在存储上创建LUN/文件系统作为PV。
  • 在删除PVC时,调用huawei-csi-controller服务在存储上删除该PV对应的LUN/文件系统。

registry.k8s.io/sig-storage/csi-provisioner:v3.0.0

v1.17-v1.19

quay.io/k8scsi/csi-provisioner:v1.4.0

v1.16.x

csi-attacher

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

v1.17+

在创建/删除Pod时,调用huawei-csi-controller服务执行Publish/Unpublish Volume操作。

quay.io/k8scsi/csi-attacher:v1.2.1

v.1.16.x

storage-backend-controller

storage-backend-controller:4.12.0

v1.16+

华为CSI软件包提供、用于管理storageBackendClaim资源。

storage-backend-sidecar

storage-backend-sidecar:4.12.0

v1.16+

华为CSI软件包提供、用于管理storageBackendContent资源。

huawei-csi-driver

huawei-csi:4.12.0

v1.16+

华为CSI软件包提供、用于提供华为CSI支持的所有特性。

huawei-csi-extender

huawei-csi-extender:4.12.0

v1.16+

华为CSI软件包提供、用于提供华为CSI的扩展特性。

health-monitor-controller

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

v1.16+

Kubernetes社区提供,用于健康卷健康状态。


集群若未连接互联网,需要手动下载容器镜像并上传到集群中,具体操作请参考 下载容器镜像

1.2 - 安装

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


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

前提条件

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

1.2.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.2.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.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.2.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

1.2.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使配置生效。

1.3 - 卸载

本章节介绍如何卸载华为CSI。根据您安装时的方式,请使用不同的方式进行卸载。


如果您不是出于升级的目的卸载华为CSI,请确保卸载华为CSI前已经在您的容器平台中将华为CSI发放的资源(PV、PVC、快照、存储后端等)全部清理。否则一旦您卸载华为CSI后,这些资源将无法被自动调度、管理或者清理。

1.3.1 - 使用Helm卸载

1.3.1.1 - Kubernetes、OpenShift、Tanzu卸载华为CSI

本章节介绍如何在Kubernetes、OpenShift、Tanzu平台卸载华为CSI。

操作步骤

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

  2. 执行以下命令卸载华为CSI,其中 helm-huawei-csi 是自定义的Helm Chart名称,huawei-csi 是该Helm Chart所在的命名空间。该卸载命令将会卸载华为CSI的huawei-csi-controller、huawei-csi-node和RBAC资源。

    helm uninstall helm-huawei-csi -n huawei-csi
    

    卸载命令执行后,还需要检查卸载是否成功。其中 huawei-csi 为chart所在的命名空间。

    helm list -n huawei-csi
    

    命令结果示例如下,如果回显为空,则表示服务卸载成功。

    NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
    
  3. 卸载huawei-csi-host-info对象,请参考 卸载huawei-csi-host-info对象 进行操作。

  4. 卸载webhook资源,请参考 卸载Webhook资源 进行操作。

  5. (可选)卸载快照依赖组件服务,请参考 卸载Snapshot依赖组件服务 进行操作。

  6. (可选)卸载Lease资源,请参考 卸载Lease资源 进行操作。

  7. (可选)执行以下命令,删除华为CSI所在的命名空间,这里以默认命名空间 huawei-csi 为例:

    kubectl delete ns huawei-csi
    

1.3.1.2 - CCE或CCE Agile卸载华为CSI

本章节介绍如何在CCE或CCE Agile平台卸载华为CSI,以CCE Agile v22.3.2为例。

操作步骤

  1. 登录CCE Agile平台。

  2. 在主页单击“模板市场 > 模板实例 ”,进入模板实例页面。

  3. 选择华为CSI模板实例,单击“卸载”,在弹出的提示框中单击“确定”。

  4. 卸载huawei-csi-host-info对象,请参考 卸载huawei-csi-host-info对象 进行操作。

  5. 卸载webhook资源,请参考 卸载Webhook资源 进行操作。

  6. (可选)卸载快照依赖组件服务,请参考 卸载Snapshot依赖组件服务 进行操作。

  7. (可选)执行以下命令,删除华为CSI所在的命名空间,这里命名空间以 huawei-csi 为例:

    kubectl delete ns huawei-csi
    

1.3.1.3 - 卸载CSI依赖组件服务

本章节介绍如何卸载CSI依赖组件服务。

卸载huawei-csi-host-info对象

名称为huawei-csi-host-info的Secret对象中保存着集群中各个节点的启动器信息,例如iSCSI启动器。使用helm uninstall命令时不会卸载该资源,若需卸载该资源,请参考以下步骤:

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

  2. 执行以下命令检查Secret对象是否存在,其中huawei-csi是Secret对象所在的命名空间

    kubectl get secret -n huawei-csi -l secret-provisioner=csi.huawei.com
    
  3. 若步骤 2 中Secret存在,执行以下命令删除Secret。

    kubectl delete secret -n huawei-csi -l secret-provisioner=csi.huawei.com
    
  4. 执行以下命令检查Secret对象是否存在,其中huawei-csi是Secret对象所在的命名空间

    kubectl get secret huawei-csi-host-info -n huawei-csi
    
  5. 若步骤 4 中Secret存在,执行以下命令卸载Secret对象,其中huawei-csi-host-info是Secret对象的名称。

    kubectl delete secret huawei-csi-host-info -n huawei-csi
    

卸载Webhook资源

名称为storage-backend-controller.xuanwu.huawei.io的webhook资源用于校验Backend的秘钥信息和与存储的连通性,使用helm uninstall命令时不会卸载该资源,若需卸载该资源,请参考以下步骤:

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

  2. 执行以下命令,查询webhook依赖组件服务。

    kubectl get validatingwebhookconfigurations.admissionregistration.k8s.io storage-backend-controller.xuanwu.huawei.io
    

    命令结果示例如下:

    NAME                                          WEBHOOKS   AGE
    storage-backend-controller.xuanwu.huawei.io   1          12d
    
  3. 执行以下命令,卸载webhook依赖组件服务。

    kubectl delete validatingwebhookconfigurations.admissionregistration.k8s.io storage-backend-controller.xuanwu.huawei.io
    
  4. 执行以下命令,检查服务是否已成功卸载。如果结果为空,表示已成功卸载。

    kubectl get validatingwebhookconfigurations.admissionregistration.k8s.io storage-backend-controller.xuanwu.huawei.io
    

卸载Snapshot依赖组件服务

  • 请勿在存在快照时卸载Snapshot依赖组件服务,否则Kubernetes会自动删除所有的用户快照且无法恢复。详细说明请参见 删除 CustomResourceDefinition
  • 请勿在CSI升级时卸载Snapshot依赖组件服务。

场景说明

  • 当前华为CSI使用了快照特性。
  • 当前Kubernetes集群仅存在华为CSI,且不再使用华为CSI。
  • 在卸载前请确保在Kubernetes集群中已经没有华为CSI管理的VolumeSnapshot资源。

操作步骤

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

  2. 执行以下命令,卸载Snapshot依赖组件服务。

    kubectl delete crd volumesnapshotclasses.snapshot.storage.k8s.io volumesnapshotcontents.snapshot.storage.k8s.io volumesnapshots.snapshot.storage.k8s.io
    
  3. 执行以下命令,检查服务是否已成功卸载。如果结果为空,表示已成功卸载。

    kubectl get crd | grep snapshot.storage.k8s.io
    

卸载Lease资源

当使用多副本方式部署huawei-csi-controller时,会生成Lease资源,用于保存当前Holder信息。使用helm uninstall命令时不会卸载该资源,若需卸载该资源,请参考以下步骤:

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

  2. 执行以下命令,查询Lease信息。

    kubectl get lease -n huawei-csi
    

    命令结果示例如下:

    NAME                                         HOLDER    AGE
    csi-huawei-com                               node-1    24d
    external-attacher-leader-csi-huawei-com      node-1    24d
    external-resizer-csi-huawei-com              node-1    24d
    external-snapshotter-leader-csi-huawei-com   node-1    24d
    snapshot-controller-leader                   node-1    24d
    storage-backend-controller                   node-1    24d
    huawei-csi-extender                          node-1    24d
    
  3. 执行以下命令,卸载Lease资源。

    kubectl delete lease -n huawei-csi csi-huawei-com external-attacher-leader-csi-huawei-com external-resizer-csi-huawei-com external-snapshotter-leader-csi-huawei-com snapshot-controller-leader storage-backend-controller huawei-csi-extender
    
  4. 执行以下命令,检查是否已成功卸载。

    kubectl get lease -n huawei-csi
    

    命令结果示例如下,如果结果为空,表示已成功卸载。

    No resources found in huawei-csi namespace.
    

1.3.2 - 手动卸载

本章节介绍如何手动卸载华为CSI。


如果您不是出于升级的目的卸载华为CSI,请确保卸载华为CSI前已经在您的容器平台中将华为CSI发放的资源(PV、PVC、快照、存储后端等)全部清理。否则一旦您卸载华为CSI后,这些资源将无法被自动调度、管理或者清理。

卸载huawei-csi-node服务

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

  2. 执行以下命令卸载 huawei-csi-node 服务,huawei-csi 替换为华为CSI所在的命名空间。

    kubectl delete daemonset huawei-csi-node -n huawei-csi
    
  3. 执行以下命令检查服务是否已成功卸载(如果提示NotFound错误,表示已成功卸载)。

    kubectl get daemonset huawei-csi-node -n huawei-csi
    

卸载huawei-csi-controller服务

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

  2. 执行以下命令卸载 huawei-csi-controller 服务,huawei-csi 替换为华为CSI所在的命名空间。

    kubectl delete deployment huawei-csi-controller -n huawei-csi
    
  3. 执行以下命令检查服务是否已成功卸载(如果提示NotFound错误,表示已成功卸载)。

    kubectl get deployment huawei-csi-controller -n huawei-csi
    

卸载csidriver对象

如果 安装时未使用CSIDriver特性 ,可跳过本步骤。

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

  2. 执行以下命令卸载csidriver对象。

    kubectl delete csidriver csi.huawei.com
    
  3. 执行以下命令检查服务是否已成功卸载(如果提示NotFound错误,表示已成功卸载)。

    kubectl get csidriver csi.huawei.com
    

删除RBAC权限

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

  2. 删除RBAC权限。

    kubectl -n huawei-csi -l provisioner=csi.huawei.com delete ServiceAccount,Service,role,rolebinding,ClusterRole,ClusterRoleBinding
    

其它资源卸载

1.4 - 升级

本章节介绍如何升级华为CSI。


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

1.4.1 - 使用Helm升级

本章节介绍如何升级华为CSI。

  • 部分2.x版本CSI已经下架,若升级失败,可能无法回退到已下架版本的CSI。
  • 在升级/回退过程中,不能使用华为CSI创建新的资源,或者对已有的PVC做挂载/卸载操作。
  • 在升级/回退过程中,请勿卸载Snapshot依赖组件服务。
  • 升级/回退过程中,已经存在的PVC/快照/Pod等资源会正常运行,不会影响您的业务访问。

1.4.1.1 - 从2.x或3.x升级至4.x版本

备份存储后端配置

如果您已按照以上须知评估风险后,确认需要从2.x或3.x版本的CSI升级至4.12.0版本,请按照以下操作步骤备份存储后端配置:

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

  2. 执行以下命令备份后端信息到configmap.json文件中。OpenShift平台使用oc替换kubectl命令。

    kubectl get cm huawei-csi-configmap -n huawei-csi -o json > configmap.json
    

升级华为CSI

请按照 升级华为CSI 中的步骤进行升级。

配置存储后端

  1. 请将 备份存储后端配置 中备份的后端信息,按照 存储后端管理 章节的说明配置存储后端。其中通过备份后端信息配置存储后端命令如下。

    oceanctl create backend -f configmap.json -i json -n huawei-csi
    

1.4.1.2 - Kubernetes、OpenShift、Tanzu升级华为CSI

前提条件

  • 旧版本华为CSI使用Helm安装。
  • 新版本华为CSI镜像已制作完成,并且按照 上传华为CSI镜像 章节说明,上传到镜像仓库或者导入到所有节点。

升级华为CSI

如果您旧版本CSI使用Helm部署,请按照以下操作步骤升级华为CSI。

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

  2. 将目标版本CSI组件包拷贝到master节点的任意目录下。

  3. 进入到helm/esdk的工作目录下,目录路径请参见 表1

    cd helm/esdk
    
  4. 执行kubectl apply -f ./crds/backend/命令,更新存储后端CRD

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

    kubectl apply -f ./crds/snapshot-crds/ --validate=false
    
  6. 执行以下命令,获取原有服务配置文件。其中helm-huawei-csi为旧版本安装时指定的Helm Chart名称,huawei-csi为旧版本安装时指定的Helm Chart命名空间。

    helm get values helm-huawei-csi -n huawei-csi -a > ./update-values.yaml
    
  7. 执行vi update-values.yaml命令打开 6 中获取的文件,修改images配置项,更新镜像至最新版本。需要修改的参数请参考 表1

    表 1 images配置项

    容器名称

    描述

    K8s版本要求

    修改为

    storage-backend-controller

    huawei-csi镜像。

    v1.16+

    storage-backend-controller:4.12.0

    storage-backend-sidecar

    华为后端管理storageBackendContent资源的镜像

    v1.16+

    storage-backend-sidecar:4.12.0

    huawei-csi-driver

    华为后端管理storageBackendClaim资源的镜像。

    v1.16+

    huawei-csi:4.12.0

    huawei-csi-extender

    huawei-csi-extender镜像

    v1.16+

    huawei-csi-extender:4.12.0

    images.sidecar.livenessProbe

    livenessprobe sidecar镜像。

    v1.16+

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

    images.sidecar.resizer

    csi-resizer sidecar镜像。

    v1.16+

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

    images.sidecar.registrar

    csi-node-driver-registrar sidecar镜像。

    v1.16+

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

    images.sidecar.snapshotter

    csi-snapshotter sidecar镜像。

    v1.25+

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

    v1.20-v1.24

    registry.k8s.io/sig-storage/csi-snapshotter:v6.3.0

    images.sidecar.snapshotController

    snapshot-controller sidecar镜像。

    v1.25+

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

    v1.20-v1.24

    registry.k8s.io/sig-storage/snapshot-controller:v6.3.0

    images.sidecar.provisioner

    csi-provisioner sidecar镜像。

    v1.20+

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

    v1.17-v1.19

    registry.k8s.io/sig-storage/csi-provisioner:v3.0.0

    v1.16.x

    quay.io/k8scsi/csi-provisioner:v1.4.0

    images.sidecar.attacher

    csi-attacher sidecar镜像。

    v1.17+

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

    v.1.16.x

    quay.io/k8scsi/csi-attacher:v1.2.1

    images.sidecar.healthMonitorController

    health-monitor-controller sidecar镜像

    v.1.16.x

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

  8. (可选)在升级过程中如需自定义更新配置项信息或者需要新增配置信息,可参考 Helm values.yaml参数说明 修改update-values.yaml文件中配置信息。


    升级时,如果update-values.yaml与values.yaml配置文件中存在相同配置项,update-values.yaml中的配置将会优先生效。

  9. 执行以下命令,升级华为CSI。其中helm-huawei-csi为指定的Helm Chart名称,huawei-csi为指定的Helm Chart命名空间,update-values.yaml为步骤 6 中获取的文件。

    helm upgrade helm-huawei-csi ./ -n huawei-csi -f ./values.yaml -f ./update-values.yaml
    
  10. 完成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
    

1.4.1.3 - CCE或CCE Agile升级华为CSI

前提条件

已下载新版本CSI的软件包。

操作步骤

  1. 参考 CCE或CCE Agile卸载华为CSI 卸载CSI。
  2. 参考 CCE或CCE Agile平台安装华为CSI 安装新版本的CSI。

1.4.2 - 手动升级

本章节介绍如何手动升级华为CSI。

升级/回退过程中,已经存在的PVC/快照/Pod等资源会正常运行,不会影响您的业务访问。

  • 部分2.x版本CSI已经下架,若升级失败,可能无法回退到已下架版本的CSI。
  • 在升级/回退过程中,不能使用华为CSI创建新的资源,或者对已有的PVC做挂载/卸载操作。
  • 在升级/回退过程中,请勿卸载Snapshot依赖组件服务。

2.x和3.x版本的CSI升级至4.12.0版本

如果您从2.x和3.x版本的CSI升级至4.12.0版本,请按照以下操作步骤升级:

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

  2. 执行命令备份后端信息到configmap.json文件中。OpenShift平台使用oc替换kubectl命令。

    kubectl get cm huawei-csi-configmap -n huawei-csi -o json > configmap.json
    
  3. 参考 手动卸载 卸载CSI。

  4. 参考 手动安装 安装当前版本的CSI。

  5. 2 中备份的后端信息,按照 存储后端管理 章节的说明安装。其中通过备份后端信息配置存储后端命令如下。

    oceanctl create backend -f configmap.json -i json -n huawei-csi
    

从4.x版本的CSI升级至4.12.0版本。

如果您从4.x版本的CSI升级至4.12.0版本,请按照以下操作步骤升级:

  1. 使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
  2. 参考 手动卸载 卸载CSI。
  3. 参考 手动安装 安装当前版本的CSI。

1.5 - 回退

1.5.1 - 使用Helm回退

如果您从2.x和3.x版本的CSI升级至4.12.0版本失败,需要回退时,请参考 使用Helm卸载 卸载CSI,然后下载安装升级之前版本的CSI。

  • 在升级/回退过程中,已经存在的PVC/快照/Pod等资源会正常运行,不会影响您的业务访问。
  • 在升级/回退过程中,不能使用华为CSI创建新的资源,或者对已有的PVC做挂载/卸载操作。
  • 在升级/回退过程中,请勿卸载Snapshot依赖组件服务。

1.5.1.1 - Kubernetes、OpenShift、Tanzu回退华为CSI

前提条件

  • 已使用Helm完成CSI的更新。

操作步骤

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

  2. 进入到helm/esdk的工作目录下,目录路径请参见 表1

    cd helm/esdk
    
  3. 执行命令,查看Helm部署CSI服务的历史版本。

    helm history helm-huawei-csi -n huawei-csi 
    

    命令结果示例如下:

    REVISION        UPDATED                         STATUS          CHART           APP VERSION     DESCRIPTION     
    1       	Mon Jan  8 04:15:40 2024	superseded	esdk-4.4.0	4.4.0      	Install complete
    2       	Mon Jan  8 04:16:12 2024	deployed  	esdk-4.12.0	4.12.0      	Upgrade complete
    
  4. 执行命令,回退CSI服务到指定版本。

    其中,revision-number为 3 查询到的版本号。例如版本为:1。

    helm rollback helm-huawei-csi -n huawei-csi 1
    

    命令结果示例如下,回显中有Rollback was a success,则表示回退CSI服务到指定版本成功。

    Rollback was a success! Happy Helming!
    

1.5.1.2 - CCE或CCE Agile回退华为CSI

  • 在升级/回退过程中,已经存在的PVC/快照/Pod等资源会正常运行,不会影响您的业务访问。
  • 在升级/回退过程中,不能使用华为CSI创建新的资源,或者对已有的PVC做挂载/卸载操作。
  • 在升级/回退过程中,请勿卸载Snapshot依赖组件服务。

前提条件

已下载原版本CSI的软件包。

操作步骤

  1. 使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
  2. 参考 操作步骤 卸载CSI。
  3. 参考 CCE或CCE Agile平台安装华为CSI 重新安装原版本的CSI。

1.5.2 - 手动回退

请参考 手动卸载 卸载CSI,然后下载安装升级之前版本的CSI。

  • 在升级/回退过程中,已经存在的PVC/快照/Pod等资源会正常运行,不会影响您的业务访问。
  • 在升级/回退过程中,不能使用华为CSI创建新的资源,或者对已有的PVC做挂载/卸载操作。
  • 在升级/回退过程中,请勿卸载Snapshot依赖组件服务。

前提条件

已下载原版本CSI的软件包。

操作步骤

  1. 使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
  2. 参考 手动卸载 卸载CSI。
  3. 参考 手动安装 重新安装原版本的CSI。