1 - 安装前准备

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

前提条件

在进行本章节所说明的操作前,请确保如下条件已经具备:

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

1.1 - 下载华为CSI软件包

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

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

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


    软件包命名规范:插件名称(eSDK_Huawei_Storage_Kubernetes_CSI_Plugin)+版本号+CPU架构。 CSI支持的CPU架构包括:X86、ARM和PPC64LE。

  3. 将下载的软件包解压。软件包组件结构如下表所示。

    表 1 软件包组件描述

    组件

    组件描述

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

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

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

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

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

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

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

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

    bin/

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

    bin/oceanctl

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

    helm/

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

    manual/

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

    examples/

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

    examples/backend

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

1.2 - 上传华为CSI镜像

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

为了后续在容器管理平台中可以使用CSI镜像,需要按照以下方式中的一种提前将CSI镜像导入到集群中:

  • 使用Docker工具,将CSI镜像上传至镜像仓库(推荐)。
  • 手动将CSI镜像导入到所有需要部署华为CSI的节点。

上传镜像到镜像仓库

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

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

前提条件

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

操作步骤

  1. 执行以下命令,将CSI镜像导入当前节点。其中,arch为X86、ARM或PPC64LE。

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

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

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

  • 也可以使用containerd来进行镜像的导入和上传。
  • 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.3 - 检查华为存储上的用户配置

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

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

存储类型

用户类型

角色

级别

类型

OceanStor V5

系统用户

管理员

管理员

本地用户

租户用户

租户管理员

管理员

本地用户

OceanStor Dorado V3

系统用户

管理员

管理员

本地用户

OceanStor

系统用户

管理员/自定义角色1

N/A

本地用户

OceanStor Dorado

系统用户

管理员/自定义角色1

N/A

本地用户

租户用户

租户管理员

N/A

本地用户

OceanStor Pacific系列

系统用户

管理员

N/A

本地用户

  • 注释1 使用自定义角色,需要给角色配置权限,最小权限请参考 配置自定义权限 章节配置。


不推荐使用“超级管理员”角色下的用户。

1.4 - 检查卷快照依赖组件

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


由于Kubernetes v1.17.0之前不支持快照功能,如果部署快照CRD可能导致集群出现问题,因此在低于Kubernetes v1.17.0版本上部署华为CSI,请务必按照 Kubernetes低于v1.17.0 章节检查。

Kubernetes低于v1.17.0

Kubernetes低于v1.17.0时,部署快照时将会导致集群出现问题,请按照以下步骤删除快照CRD安装文件。

  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. 进入/helm/esdk/crds/snapshot-crds目录,执行以下命令,删除快照CRD安装文件。组件包路径请参考 表1

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

1.5 - 检查主机多路径配置

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

华为CSI软件支持对接的操作系统和多路径软件请参考 表2

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

前提条件

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

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

操作步骤

  1. 如果您使用iSCSI/FC协议对接华为企业存储,请参考 OceanStor Dorado & OceanStor在Red Hat下的主机连通性指南 ,对主机多路径进行配置和检查。

  2. 如果您使用NVMe over RoCE/NVMe over FC协议对接华为企业存储,请参考 OceanStor Dorado & OceanStor在Red Hat下的主机连通性指南 ,对主机多路径进行配置和检查。

  3. 如果您使用iSCSI协议对接华为分布式存储,请参考 《FusionStorage 8.0.1 块存储基础业务配置指南》 中的“ 应用服务器配置多路径 ”章节,对主机多路径进行配置和检查。

  4. 如果您使用了操作系统原生多路径时,需要检查/etc/multipath.conf文件,检查文件是否存在如下配置:

    defaults {
            user_friendly_names yes
            find_multipaths no
    }
    

    如果配置不存在,请在/etc/multipath.conf文件开始处增加该配置项。


    user_friendly_names 和find_multipaths 的参数作用请参考: dm_multipath/config_file_defaults

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
    

1.7 - 检查CSI依赖的镜像

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

huawei-csi-controller服务依赖的sidecar镜像:livenessprobe、csi-provisioner、csi-attacher、csi-resizer、csi-snapshotter、snapshot-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.12.0

v1.16+

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

csi-resizer

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

v1.16+

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

csi-node-driver-registrar

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

v1.16+

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

csi-snapshotter

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

v1.20+

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

registry.k8s.io/sig-storage/csi-snapshotter:v4.2.1

v1.17-v1.19

snapshot-controller

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

v1.20+

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

registry.k8s.io/sig-storage/snapshot-controller:v4.2.1

v1.17-v1.19

csi-provisioner

registry.k8s.io/sig-storage/csi-provisioner:v3.6.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.4.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.6.0

v1.16+

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

storage-backend-sidecar

storage-backend-sidecar:4.6.0

v1.16+

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

huawei-csi-driver

huawei-csi:4.6.0

v1.16+

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

huawei-csi-extender

huawei-csi-extender:4.6.0

v1.16+

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


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

2 - 安装华为CSI

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


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

前提条件

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

2.1 - 使用Helm安装华为CSI

Helm安装说明

本章节介绍如何使用Helm 3安装部署华为CSI。

  • 华为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:华为CSI扩展。
  • (可选)Kubernetes External Snapshotter:提供快照支持(作为CRD安装)。
  • (可选)Kubernetes External Snapshot Controller :用于卷快照控制。

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

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

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.17,可跳过本步骤,详情请参考 表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
    

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”)。安装成功后执行状态将回显为“安装成功”。

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.6.0

images.storageBackendSidecar

华为后端管理sidecar镜像。

storage-backend-sidecar:4.6.0

images.storageBackendController

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

storage-backend-controller:4.6.0

images.huaweiCSIExtender

huawei-csi-extender镜像

huawei-csi-extender:4.6.0

images.sidecar.livenessProbe

livenessprobe sidecar镜像。

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

images.sidecar.provisioner

csi-provisioner sidecar镜像。

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

images.sidecar.attacher

csi-attacher sidecar镜像。

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

images.sidecar.resizer

csi-resizer sidecar镜像。

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

images.sidecar.snapshotter

csi-snapshotter sidecar镜像。

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

images.sidecar.snapshotController

snapshot-controller sidecar镜像。

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

images.sidecar.registrar

csi-node-driver-registrar sidecar镜像。

registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.9.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存储时,前缀只能包含小写字母、'-',以及数字。
  • 对接后端是OceanStor Pacific系列存储时,前缀只能包含字母、数字、“_”、“-”和“.”,且总长度限制为58字符。
  • 对接后端是FusionStorage Block时,前缀只能包含字母、数字、“_”和“-”,且总长度限制为58字符。

controller.webhookPort

webhook服务使用的端口。

4433

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

controller.snapshot.enabled

是否开启快照特性。

true

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

要求Kubernetes版本高于v1.17。

controller.resizer.enabled

是否开启扩容特性。

true

要求Kubernetes版本高于v1.16。

controller.nodeSelector

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

-

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

controller.tolerations

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

-

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

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.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.livenessProbePort

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

9800

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

node.kubeletVolumeDevicesDirName

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

volumeDevices

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

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

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

存储协议为roce/fc-nvme时,使用的多路径软件。仅支持配置HW-UltraPath-NVMe。

当volumeUseMultipath为true时必填。

HW-UltraPath-NVMe

-

csiDriver.scanVolumeTimeout

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

3

-

csiDriver.execCommandTimeout

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

30

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

csiDriver.allPathOnline

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

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

当csiDriver.scsiMultipathType为DM-multipath时必填。

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

-


如果您的容器环境已经部署了华为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

-

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并且卷的accessModes包含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场景生效。


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

kubectl create namespace huawei-csi

2.2 - 手动安装华为CSI

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


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

安装步骤

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

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

  3. 执行命令创建一个命名空间。

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

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

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

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

    kubectl apply -f ./deploy/csidriver.yaml 
    
  8. 执行命令安装huawei-csi-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

3 - 卸载华为CSI

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


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

3.1 - Helm卸载华为CSI

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
    

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
    

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-host-info是Secret对象的名称,huawei-csi是Secret对象所在的命名空间。

    kubectl delete secret huawei-csi-host-info -n huawei-csi
    
  3. 执行以下命令检查Secret对象是否卸载成功。

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

    命令结果示例如下,如果命令回显提示“NotFound”表示huawei-csi-host-info对象已成功卸载。

    Error from server (NotFound): secrets "huawei-csi-host-info" not found
    

卸载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资源

values.yaml文件中controller.controllerCount配置项的值大于1时,huawei-csi-controller将使用多副本部署,huawei-csi-controller服务的多副本使用Kubernetes的LeaderElection机制实现,该机制会创建Lease对象用于保存当前Holder信息。使用helm uninstall命令时不会卸载该资源,若需卸载该资源,请参考以下步骤,若controller.controllerCount配置项的值等于1是时,可跳过本步骤。配置项描述可参考 表2

  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-
    
  4. 执行以下命令,检查是否已成功卸载。

    kubectl get lease -n huawei-csi
    

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

    No resources found in huawei-csi namespace.
    

3.2 - 手动卸载华为CSI

本章节介绍如何手动卸载华为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. 卸载huawei-csi-host-info对象,请参考 卸载huawei-csi-host-info对象 进行操作。

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

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

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

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

    kubectl delete ns huawei-csi
    

4 - 升级/回退华为CSI

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


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

4.1 - 使用Helm升级/回退华为CSI

4.1.1 - 升级华为CSI

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

如果您从2.x版本升级至4.6.0版本,请参考旧版本用户指南卸载CSI,然后参考 使用Helm安装华为CSI 章节安装华为CSI。

如果您从2.x或3.x版本升级至4.6.0版本,请参考 从2.x或3.x升级至4.x版本 章节升级华为CSI。

如果您从4.x版本升级至4.6.0版本,请参考 Kubernetes、OpenShift、Tanzu升级华为CSI 章节升级华为CSI。

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

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


在CSI 2.x或3.x 版本中,使用块存储时,与存储建立映射的操作是在huawei-csi-node服务进行的,所以huawei-csi-node服务需要和存储管理网络通信。又由于huawei-csi-node服务是以DaemonSet部署的,在集群中每个节点都会部署一个huawei-csi-node服务,这样部署模型导致了在大规模集群下,每个huawei-csi-node服务都会向存储发起请求,可能导致存储连接数被占满,使得huawei-csi-node不能提供正常服务。 在CSI 4.x版本优化了该部署模型,将与存储建立映射操作迁移至huawei-csi-controller服务,huawei-csi-node服务不再需要和存储管理网络通信,降低了华为CSI依赖的组网复杂度,同时huawei-csi-controller服务以Deployment形式部署,副本数根据客户可靠性要求设置,一般情况下,副本数为1~3。所以极大的减少了华为CSI与存储的连接数量,使得华为CSI服务能够接入大规模集群。 该架构变化可能会导致一个问题:升级后,使用2.x或3.x发放的工作负载,升级CSI至4.x版本之后,如果产生了一次新的挂载流程,并且CO(Container Orchestration system)未调用华为CSI提供的huawei-csi-controller服务,会导致挂载失败。问题请参考 创建Pod失败,Events日志显示“publishInfo doesn’t exist”

备份存储后端配置

如果您已按照以上须知评估风险后,确认需要从2.x或3.x版本的CSI升级至4.6.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 中的步骤进行升级。

配置存储后端

请将 备份存储后端配置 中备份的后端信息,按照 管理存储后端 章节的说明配置存储后端,存储后端配置成功后,请务必按照以上须知所述的风险处理方法进行操作,避免Pod在漂移过程中出现问题。

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

    storage-backend-sidecar

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

    v1.16+

    storage-backend-sidecar:4.6.0

    huawei-csi-driver

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

    v1.16+

    huawei-csi:4.6.0

    huawei-csi-extender

    huawei-csi-extender镜像

    v1.16+

    huawei-csi-extender:4.6.0

    images.sidecar.livenessProbe

    livenessprobe sidecar镜像。

    v1.16+

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

    images.sidecar.resizer

    csi-resizer sidecar镜像。

    v1.16+

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

    images.sidecar.registrar

    csi-node-driver-registrar sidecar镜像。

    v1.16+

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

    images.sidecar.snapshotter

    csi-snapshotter sidecar镜像。

    v1.20+

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

    v1.17-v1.19

    registry.k8s.io/sig-storage/csi-snapshotter:v4.2.1

    images.sidecar.snapshotController

    snapshot-controller sidecar镜像。

    v1.20+

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

    v1.17-v1.19

    registry.k8s.io/sig-storage/snapshot-controller:v4.2.1

    images.sidecar.provisioner

    csi-provisioner sidecar镜像。

    v1.20+

    registry.k8s.io/sig-storage/csi-provisioner:v3.6.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.4.0

    v.1.16.x

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

  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
    

4.1.1.3 - CCE或CCE Agile升级华为CSI

前提条件

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

操作步骤

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

4.1.2 - 回退华为CSI

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

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

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

前提条件

  • 已使用Helm 3完成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.6.0	4.6.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!
    

4.1.2.2 - CCE或CCE Agile回退华为CSI

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

前提条件

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

操作步骤

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

4.2 - 手动升级/回退

4.2.1 - 升级华为CSI

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

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

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

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

如果您从2.x和3.x版本的CSI升级至4.6.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 卸载CSI。

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

  5. 2 中备份的后端信息,按照 管理存储后端 章节的说明安装。

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

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

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

4.2.2 - 回退华为CSI

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

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

前提条件

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

操作步骤

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