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.5.0版本软件包。

    软件包命名规范:插件名称(eSDK_Huawei_Storage_Kubernetes_CSI_Plugin)+版本号+CPU架构

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

    表 1 软件包组件描述

    组件

    组件描述

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

    huawei-csi-driver镜像,"arch"为X86或ARM。

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

    后端管理控制器镜像,"arch"为X86或ARM。

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

    后端管理sidecar镜像,"arch"为X86或ARM。

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

    huawei-csi-extender镜像,"arch"为X86或ARM。

    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.5.0-arch.tar
  • storage-backend-controller-v4.5.0-arch.tar
  • storage-backend-sidecar-v4.5.0-arch.tar
  • huawei-csi-extender-v4.5.0-arch.tar

前提条件

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

操作步骤

  1. 执行docker load -i huawei-csi-v4.5.0-arch.tar命令,将CSI镜像导入当前节点。

    docker load -i huawei-csi-v4.5.0-arch.tar 
    
  2. 执行docker tag huawei-csi:4.5.0 repo.huawei.com/huawei-csi:4.5.0命令,添加镜像仓库地址到镜像标签。其中repo.huawei.com表示镜像仓库的地址。

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

    docker push repo.huawei.com/huawei-csi:4.5.0
    

  • 也可以使用containerd来进行镜像的导入和上传。
  • CCE / CCE Agile平台请参考该平台用户手册完成镜像导入和上传。

上传镜像到本地节点

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

前提条件

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

操作步骤

  1. 使用远程访问工具(以PuTTY为例),通过管理IP地址,登录需要导入镜像的节点。

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

  3. 执行cd image命令,进入到image的工作目录。工具路径请参见表 软件包组件描述

  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 6.1.3, 6.1.5, 6.1.6, 6.1.7, 6.1.8

系统用户

管理员/自定义角色1

N/A

本地用户

OceanStor Dorado 6.1.0, 6.1.2, 6.1.3, 6.1.5, 6.1.6, 6.1.7, 6.1.8

系统用户

管理员/自定义角色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安装文件。组件包路径请参考表 软件包组件描述

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

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. 如果您使用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

k8s.gcr.io/sig-storage/livenessprobe:v2.5.0

v1.16+

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

csi-resizer

k8s.gcr.io/sig-storage/csi-resizer:v1.4.0

v1.16+

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

csi-node-driver-registrar

k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.3.0

v1.16+

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

csi-snapshotter

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

v1.17+

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

snapshot-controller

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

v1.17+

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

csi-provisioner

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

v1.17+

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

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

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

v1.16.x

csi-attacher

k8s.gcr.io/sig-storage/csi-attacher:v3.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.5.0

v1.16+

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

storage-backend-sidecar

storage-backend-sidecar:4.5.0

v1.16+

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

huawei-csi-driver

huawei-csi:4.5.0

v1.16+

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

huawei-csi-extender

huawei-csi-extender:4.5.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工具路径请参见表 软件包组件描述

  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,可跳过本步骤,详情请参考表 controller配置项说明

    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目录下,执行命令打开配置文件,修改后保存。安装包目录请参见表 软件包组件描述

    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工具路径请参见表 软件包组件描述

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

images.storageBackendSidecar

华为后端管理sidecar镜像。

storage-backend-sidecar:4.5.0

images.storageBackendController

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

storage-backend-controller:4.5.0

images.huaweiCSIExtender

huawei-csi-extender镜像

huawei-csi-extender:4.5.0

images.sidecar.livenessProbe

livenessprobe sidecar镜像。

k8s.gcr.io/sig-storage/livenessprobe:v2.5.0

images.sidecar.provisioner

csi-provisioner sidecar镜像。

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

images.sidecar.attacher

csi-attacher sidecar镜像。

k8s.gcr.io/sig-storage/csi-attacher:v3.4.0

images.sidecar.resizer

csi-resizer sidecar镜像。

k8s.gcr.io/sig-storage/csi-resizer:v1.4.0

images.sidecar.snapshotter

csi-snapshotter sidecar镜像。

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

images.sidecar.snapshotController

snapshot-controller sidecar镜像。

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

images.sidecar.registrar

csi-node-driver-registrar sidecar镜像。

k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.3.0

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

controller参数配置说明

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

表 2 controller配置项说明

参数

描述

必选参数

默认值

备注

controller.controllerCount

huawei-csi-controller组件的副本数

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.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的工作目录下。具体路径请参见表 软件包组件描述

    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,删除名称为csi-snapshotter和snapshot-controller的容器,并根据检查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. 卸载huawei-csi-host-info对象使用远程访问工具(以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资源进行操作。

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依赖组件服务进行操作。

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是时,可跳过本步骤。配置项描述可参考表 controller配置项说明

  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资源进行操作。

4 - 升级/回退华为CSI

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

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

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

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

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

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

4.1.1 - 升级华为CSI

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

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

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

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.5.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的工作目录下,目录路径请参见表 软件包组件描述

    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,可跳过本步骤,详情请参考表 controller配置项说明

    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配置项,更新镜像至最新版本。需要修改的参数请参考表 images配置项

    表 1 images配置项

    参数

    描述

    修改为

    images.huaweiCSIService

    huawei-csi镜像。

    huawei-csi:4.5.0

    images.storageBackendSidecar

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

    storage-backend-sidecar:4.5.0

    images.storageBackendController

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

    storage-backend-controller:4.5.0

    images.huaweiCSIExtender

    huawei-csi-extender镜像

    huawei-csi-extender:4.5.0

    images.sidecar.livenessProbe

    livenessprobe sidecar镜像。

    k8s.gcr.io/sig-storage/livenessprobe:v2.5.0

    images.sidecar.provisioner

    csi-provisioner sidecar镜像。

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

    images.sidecar.attacher

    csi-attacher sidecar镜像。

    k8s.gcr.io/sig-storage/csi-attacher:v3.4.0

    images.sidecar.resizer

    csi-resizer sidecar镜像。

    k8s.gcr.io/sig-storage/csi-resizer:v1.4.0

    images.sidecar.snapshotter

    csi-snapshotter sidecar镜像。

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

    images.sidecar.snapshotController

    snapshot-controller sidecar镜像。

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

    images.sidecar.registrar

    csi-node-driver-registrar sidecar镜像。

    k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.3.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
    

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.5.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的工作目录下,目录路径请参见表 软件包组件描述

    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.5.0	4.5.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.5.0版本

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

如果您从4.x版本的CSI升级至4.5.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。