安装部署
- 1: 安装前准备
- 1.1: 下载华为CSI软件包
- 1.2: 上传华为CSI镜像
- 1.3: 检查华为存储上的用户配置
- 1.4: 检查卷快照依赖组件
- 1.5: 检查主机多路径配置
- 1.6: 检查主机依赖软件状态
- 1.7: 检查CSI依赖的镜像
- 2: 安装华为CSI
- 2.1: 使用Helm安装华为CSI
- 2.1.1: Kubernetes、OpenShift、Tanzu安装华为CSI
- 2.1.2: CCE和CCE Agile平台安装华为CSI
- 2.1.3: Helm values.yaml参数说明
- 2.2: 手动安装华为CSI
- 3: 卸载华为CSI
- 3.1: Helm卸载华为CSI
- 3.1.1: Kubernetes、OpenShift、Tanzu卸载华为CSI
- 3.1.2: CCE和CCE Agile卸载华为CSI
- 3.1.3: 卸载CSI依赖组件服务
- 3.2: 手动卸载华为CSI
- 4: 升级/回退华为CSI
- 4.1: 使用Helm升级/回退华为CSI
- 4.1.1: 升级华为CSI
- 4.1.1.1: 从2.x或3.x升级至4.x版本
- 4.1.1.2: Kubernetes、OpenShift、Tanzu升级华为CSI
- 4.1.1.3: CCE和CCE Agile升级华为CSI
- 4.1.2: 回退华为CSI
- 4.1.2.1: Kubernetes、OpenShift、Tanzu回退华为CSI
- 4.1.2.2: CCE和CCE Agile回退华为CSI
- 4.2: 手动升级/回退
1 - 安装前准备
本章节将对安装前的准备工作进行详细说明。
前提条件
在进行本章节所说明的操作前,请确保如下条件已经具备:
- 容器管理平台已部署完成并正常运行,且兼容性满足Kubernetes及操作系统兼容性章节的要求。
- (企业存储必选)已完成对接华为企业存储初始化配置,包括存储池划分、端口配置等。且存储产品的版本满足华为企业存储兼容性章节的要求。
- (分布式存储必选)已完成对接华为分布式存储初始化配置,包括存储池划分、端口配置等。且存储产品的版本满足华为分布式存储兼容性章节的要求。
- 完成华为存储和容器平台主机连通性配置,例如运行huawei-csi-controller的worker节点与待接入的存储设备的管理IP地址通信正常,运行huawei-csi-node的worker节点与待接入的存储设备的业务IP地址通信正常,iSCSI场景下允许使用ping命令进行连通性校验。
- 请确保操作系统的语言是英文。
- 请确保存储池、租户名称等相关存储资源名称是英文。
1.1 - 下载华为CSI软件包
本章节详细说明了下载方法以及软件包组件结构。
打开浏览器,访问仓库地址:https://github.com/Huawei/eSDK_K8S_Plugin/releases。
根据CPU架构,下载对应的4.5.0版本软件包。
软件包命名规范:插件名称(eSDK_Huawei_Storage_Kubernetes_CSI_Plugin)+版本号+CPU架构
将下载的软件包解压。软件包组件结构如下表所示。
表 1 软件包组件描述
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主机,且该主机支持访问镜像仓库。
操作步骤
执行docker load -i huawei-csi-v4.5.0-arch.tar命令,将CSI镜像导入当前节点。
docker load -i huawei-csi-v4.5.0-arch.tar
执行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
执行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或其他容器引擎。
操作步骤
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录需要导入镜像的节点。
将Kubernetes CSI组件包中的"image"目录拷贝到当前节点的任意目录下。
执行cd image命令,进入到image的工作目录。工具路径请参见表 软件包组件描述。
执行命令依次将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 Dorado 6.1.0, 6.1.2, 6.1.3, 6.1.5, 6.1.6, 6.1.7, 6.1.8 | ||||
- 注释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安装文件。
执行以下命令查看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
进入/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的资料和软件包。软件包版本请参考表 软件包组件描述。
操作步骤
如果您使用iSCSI/FC协议对接华为企业存储,请参考OceanStor Dorado & OceanStor在Red Hat下的主机连通性指南,对主机多路径进行配置和检查。
如果您使用NVMe over RoCE/NVMe over FC协议对接华为企业存储,请参考OceanStor Dorado & OceanStor在Red Hat下的主机连通性指南,对主机多路径进行配置和检查。
如果您使用iSCSI协议对接华为分布式存储,请参考 《FusionStorage 8.0.1 块存储基础业务配置指南》中的“应用服务器配置多路径”章节,对主机多路径进行配置和检查。
如果您使用了操作系统原生多路径时,需要检查/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依赖的镜像
集群若未连接互联网,需要手动下载容器镜像并上传到集群中,具体操作请参考下载容器镜像。
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的获取、安装请参考:https://helm.sh/docs/intro/install/
- Helm与Kubernetes版本对应关系请参考:https://helm.sh/docs/topics/version_skew/
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
安装步骤
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录集群的任意master节点。
将Kubernetes CSI组件包中的"helm"目录拷贝到master节点的任意目录下。Helm工具路径请参见表 软件包组件描述。
进入到helm/esdk的工作目录下。
cd helm/esdk
准备values.yaml文件,华为CSI已经在软件包的helm/esdk目录下提供了values.yaml模板文件,您也可以根据Helm values.yaml参数说明修改参数对华为CSI进行定制。
安装前配置:
- 若容器平台为Kubernetes,可跳过该步骤。
- 若容器平台为Openshift,请根据OpenShift平台安装配置进行配置。
- 若容器平台为Tanzu,请根据Tanzu平台安装配置进行配置。
执行命令,更新存储后端CRD
kubectl apply -f ./crds/backend/
(可选) 请务必按照检查卷快照依赖组件章节检查快照依赖组件,确认无误后执行执行命令更新快照CRD,如果controller.snapshot.enabled参数设置为false或Kubernetes版本低于v1.17,可跳过本步骤,详情请参考表 controller配置项说明。
kubectl apply -f ./crds/snapshot-crds/ --validate=false
执行如下命令安装华为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
完成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资源。
执行命令,编辑helm_scc.yaml文件。
vi helm_scc.yaml
修改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
执行命令,创建SecurityContextConstraints。
oc create -f helm_scc.yaml
Tanzu平台安装配置
Tanzu平台请执行以下命令配置kubelet安装目录。
进入到安装包的helm/esdk目录下,执行命令打开配置文件,修改后保存。安装包目录请参见表 软件包组件描述。
vi values.yaml
修改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权限
执行命令, 创建rbac.yaml文件。
vi rbac.yaml
粘贴如下内容至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
执行命令,创建RBAC权限。
kubectl create -f rbac.yaml
2.1.2 - CCE和CCE Agile平台安装华为CSI
本章节介绍如何在CCE / CCE Agile平台安装华为CSI。
制作Helm安装包
CCE和CCE Agile平台无法直接通过Helm安装华为CSI,需要手动制作Helm安装包后上传至平台模板市场进行安装。
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录已部署Helm的任意节点。
将华为CSI组件包中的"helm"目录拷贝到节点的任意目录下。Helm工具路径请参见表 软件包组件描述。
进入到helm的工作目录下。
cd helm/
修改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
执行命令制作Helm安装包,该命令会将安装包生成到当前路径下。
helm package ./esdk/ -d ./
安装华为CSI
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录已部署CCE Agile平台master的任意节点。
执行命令创建部署华为CSI的命名空间,huawei-csi为自定义的命名空间。
kubectl create namespace huawei-csi
导出Helm安装包,具体请参考制作Helm安装包。
在主页单击“模板市场> 我的模板>上传模板”,进入上传模板对话框。将导出的Helm安装包导入CCE Agile平台。
安装包上传完毕,在主页单击“模板市场>我的模板”,进入我的模板页面,单击“安装>提交”。其中模板实例名称可自定义填写。
在主页单击“模板市场>模板实例”,选择安装时指定的项目(例如样例中的项目是“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配置项说明
livenessprobe sidecar镜像。 | |||
csi-provisioner sidecar镜像。 | |||
csi-attacher sidecar镜像。 | |||
csi-resizer sidecar镜像。 | |||
csi-snapshotter sidecar镜像。 | |||
snapshot-controller sidecar镜像。 | |||
csi-node-driver-registrar sidecar镜像。 |
- huaweiCSIService、storageBackendSidecar、storageBackendController、huaweiCSIExtender参数的值,请参考上传华为CSI镜像章节的说明,使用最终生成镜像的名称和版本。
- 其他sidecar镜像参数,请参考检查CSI依赖的镜像章节的说明,使用最终上传的镜像的名称和版本。
controller参数配置说明
controller配置项用于配置huawei-csi-controller组件的相关配置。
表 2 controller配置项说明
PV名称的前缀,默认值为pvc,即创建的PV名称为:pvc-<uuid>。前缀必须满足DNS 子域名的命名规则,且PV名称总长度不得超过253个字符。 | 对应的provisioner参数名称为:--volume-name-prefix。 详细配置请参考配置PV名称前缀。
| |||
huawei-csi-controller的节点选择器。配置后huawei-csi-controller仅会调度到存在该标签的节点上。 | 节点选择器的详细说明请参考:将 Pod 分配给节点 | |||
huawei-csi-controller的污点容忍。配置后huawei-csi-controller能够容忍节点上存在该污点。 | 污点和容忍度的详细说明请参考:污点和容忍度 | |||
当controller.snapshot.enabled参数配置为true时,需要安装“helm/crd/snapshot-crds”目录下的卷快照CRD资源。
node参数配置说明
node配置项用于配置huawei-csi-node组件的相关配置。
表 3 node配置项说明
详细说明请参考:Volume Limits | ||||
节点选择器的详细说明请参考:将 Pod 分配给节点 | ||||
- 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" | 污点和容忍度的详细说明请参考:污点和容忍度 | |||
当一个块设备被成功挂载之后,挂载路径的目录结构应该如下所示: /var/lib/kubelet/plugins/kubernetes.io/csi/{kubeletVolumeDevicesDirName}/publish/{specName}/{podUID} |
csiDriver参数配置说明
csiDriver配置项包括了华为CSI运行时的基本配置,如华为驱动名称、多路径类型等配置信息。
表 4 csiDriver配置项说明
如果您的容器环境已经部署了华为CSI,请确保csiDriver.driverName的设置和之前部署时的配置保持一致。否则会导致系统中已存在的有华为CSI发放的卷/快照无法被新部署的华为CSI管理。
其他参数配置说明
其他配置项包括了CSI插件某些特性的开关或者镜像获取策略。
表 5 其他配置项说明
华为CSI运行时所在Kubernetes命名空间,支持用户自定义。名称必须由小写字母、数字和“-”组成,例如:my-name、123-abc。 | ||||
| ||||
CSIDriver特性在Kubernetes v1.18成为GA版本,因此要求Kubernetes版本高于v1.18,当Kubernetes版本低于 v1.18时,请设置该参数为false。 | ||||
| 参数attachRequired在Kubernetes v1.18支持配置。 如果CSIDriverObject.isCreate为true并且attachRequired参数设置为false时,huawei-csi插件将不会部署csi-attacher这个sidecar。
| |||
基础卷是否支持在装载之前更改卷的所有权和权限。支持配置如下参数:
| 参数fsGroupPolicy在Kubernetes v1.20支持配置,并且当CSIDriverObject.isCreate为true时该参数生效。 该特性在Kubernetes v1.20中为Beta版本,在Kubernetes v1.23成为GA版本,因此要求Kubernetes版本高于v1.20。 | |||
请确保此kubernetes.namespace填入的命名空间在Kubernetes上已经存在,如果不存在请使用如下命令创建对应的命名空间。本例中,华为CSI运行的命名空间为“huawei-csi”。kubectl create namespace huawei-csi
2.2 - 手动安装华为CSI
本章节介绍如何手动安装华为CSI。
手动安装华为CSI当前仅支持Kubernetes平台。
安装步骤
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录集群的任意master节点。
将Kubernetes CSI组件包中的"manual"目录拷贝到master节点的任意目录下。
执行命令创建一个命名空间。
kubectl create ns huawei-csi
进入到manual/esdk的工作目录下。具体路径请参见表 软件包组件描述。
cd manual/esdk
执行命令,更新存储后端CRD
kubectl apply -f ./crds/backend/
(可选) 请务必按照检查卷快照依赖组件章节检查快照依赖组件,确认无误后执行执行命令更新快照CRD,如果Kubernetes版本低于v1.17,跳过本步骤。
kubectl apply -f ./crds/snapshot-crds/ --validate=false
(可选) 执行命令安装CSIDriver。如果不使用CSIDriver特性,可跳过本步骤,详情请参考CSIDriver特性。
kubectl apply -f ./deploy/csidriver.yaml
执行命令安装huawei-csi-controller服务。如果Kubernetes版本低于v1.17,删除名称为csi-snapshotter和snapshot-controller的容器,并根据检查CSI依赖的镜像中的版本要求,修改其它容器镜像版本。
kubectl apply -f ./deploy/huawei-csi-controller.yaml
执行命令安装huawei-csi-node服务。
kubectl apply -f ./deploy/huawei-csi-node.yaml
执行命令检查服务是否启动。
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。
操作步骤
卸载huawei-csi-host-info对象使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行以下命令卸载华为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
卸载huawei-csi-host-info对象,请参考卸载huawei-csi-host-info对象进行操作。
卸载webhook资源,请参考卸载Webhook资源进行操作。
(可选)卸载快照依赖组件服务,请参考卸载Snapshot依赖组件服务进行操作。
(可选)卸载Lease资源,请参考卸载Lease资源进行操作。
3.1.2 - CCE和CCE Agile卸载华为CSI
本章节介绍如何在CCE / CCE Agile平台卸载华为CSI,以CCE Agile v22.3.2为例。
操作步骤
登录CCE Agile平台。
在主页单击“模板市场> 模板实例 ”,进入模板实例页面。
选择华为CSI模板实例,单击“卸载”,在弹出的提示框中单击“确定”。
卸载huawei-csi-host-info对象,请参考卸载huawei-csi-host-info对象进行操作。
卸载webhook资源,请参考卸载Webhook资源进行操作。
(可选)卸载快照依赖组件服务,请参考卸载Snapshot依赖组件服务进行操作。
3.1.3 - 卸载CSI依赖组件服务
本章节介绍如何卸载CSI依赖组件服务。
卸载huawei-csi-host-info对象
名称为huawei-csi-host-info的Secret对象中保存着集群中各个节点的启动器信息,例如iSCSI启动器。使用helm uninstall命令时不会卸载该资源,若需卸载该资源,请参考以下步骤:
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行以下命令卸载Secret对象,其中huawei-csi-host-info是Secret对象的名称,huawei-csi是Secret对象所在的命名空间。
kubectl delete secret huawei-csi-host-info -n huawei-csi
执行以下命令检查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命令时不会卸载该资源,若需卸载该资源,请参考以下步骤:
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行以下命令,查询webhook依赖组件服务。
kubectl get validatingwebhookconfigurations.admissionregistration.k8s.io storage-backend-controller.xuanwu.huawei.io
命令结果如下。
NAME WEBHOOKS AGE storage-backend-controller.xuanwu.huawei.io 1 12d
执行以下命令,卸载webhook依赖组件服务。
kubectl delete validatingwebhookconfigurations.admissionregistration.k8s.io storage-backend-controller.xuanwu.huawei.io
执行以下命令,检查服务是否已成功卸载。如果结果为空,表示已成功卸载。
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资源。
操作步骤
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行以下命令,卸载Snapshot依赖组件服务。
kubectl delete crd volumesnapshotclasses.snapshot.storage.k8s.io volumesnapshotcontents.snapshot.storage.k8s.io volumesnapshots.snapshot.storage.k8s.io
执行以下命令,检查服务是否已成功卸载。如果结果为空,表示已成功卸载。
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配置项说明。
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行以下命令,查询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
执行以下命令,卸载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-
执行以下命令,检查是否已成功卸载。
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服务
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行以下命令卸载 huawei-csi-node 服务,huawei-csi 替换为华为CSI所在的命名空间。
kubectl delete daemonset huawei-csi-node -n huawei-csi
执行以下命令检查服务是否已成功卸载(如果提示NotFound错误,表示已成功卸载)。
kubectl get daemonset huawei-csi-node -n huawei-csi
卸载huawei-csi-controller服务
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行以下命令卸载 huawei-csi-controller 服务,huawei-csi 替换为华为CSI所在的命名空间。
kubectl delete deployment huawei-csi-controller -n huawei-csi
执行以下命令检查服务是否已成功卸载(如果提示NotFound错误,表示已成功卸载)。
kubectl get deployment huawei-csi-controller -n huawei-csi
卸载csidriver对象
如果安装时未使用CSIDriver特性,可跳过本步骤。
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行以下命令卸载csidriver对象。
kubectl delete csidriver csi.huawei.com
执行以下命令检查服务是否已成功卸载(如果提示NotFound错误,表示已成功卸载)。
kubectl get csidriver csi.huawei.com
删除RBAC权限
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
删除RBAC权限。
kubectl -n huawei-csi -l provisioner=csi.huawei.com delete ServiceAccount,Service,role,rolebinding,ClusterRole,ClusterRoleBinding
其它资源卸载
- 卸载huawei-csi-host-info对象,请参考卸载huawei-csi-host-info对象进行操作。
- 卸载webhook资源,请参考卸载Webhook资源进行操作。
- (可选)卸载快照依赖组件服务,请参考卸载Snapshot依赖组件服务进行操作。
- (可选)卸载Lease资源,请参考卸载Lease资源进行操作。
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版本,请按照以下操作步骤备份存储后端配置:
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行以下命令备份后端信息到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。
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
将目标版本CSI组件包拷贝到master节点的任意目录下。
进入到helm/esdk的工作目录下,目录路径请参见表 软件包组件描述。
cd helm/esdk
执行kubectl apply -f ./crds/backend/命令,更新存储后端CRD
kubectl apply -f ./crds/backend/
(可选) 请务必按照检查卷快照依赖组件章节检查快照依赖组件,确认无误后执行执行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
执行以下命令,获取原有服务配置文件。其中helm-huawei-csi为旧版本安装时指定的Helm Chart名称,huawei-csi为旧版本安装时指定的Helm Chart命名空间。
helm get values helm-huawei-csi -n huawei-csi -a > ./update-values.yaml
执行vi update-values.yaml命令打开6中获取的文件,修改images配置项,更新镜像至最新版本。需要修改的参数请参考表 images配置项。
表 1 images配置项
livenessprobe sidecar镜像。
csi-provisioner sidecar镜像。
csi-attacher sidecar镜像。
csi-resizer sidecar镜像。
csi-snapshotter sidecar镜像。
snapshot-controller sidecar镜像。
csi-node-driver-registrar sidecar镜像。
(可选)在升级过程中如需自定义更新配置项信息或者需要新增配置信息,可参考Helm values.yaml参数说明修改update-values.yaml文件中配置信息。
升级时,如果update-values.yaml与values.yaml配置文件中存在相同配置项,update-values.yaml中的配置将会优先生效。
执行以下命令,升级华为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
完成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的软件包。
操作步骤
- 参考CCE和CCE Agile卸载华为CSI卸载CSI。
- 参考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的更新。
操作步骤
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
进入到helm/esdk的工作目录下,目录路径请参见表 软件包组件描述。
cd helm/esdk
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
执行命令,回退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的软件包。
操作步骤
- 使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
- 参考操作步骤卸载CSI。
- 参考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版本,请按照以下操作步骤升级:
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行命令备份后端信息到configmap.json文件中。OpenShift平台使用oc替换kubectl命令。
kubectl get cm huawei-csi-configmap -n huawei-csi -o json > configmap.json
参考手动卸载华为CSI卸载CSI。
参考手动安装华为CSI安装当前版本的CSI。
从4.x版本的CSI升级至4.5.0版本。
如果您从4.x版本的CSI升级至4.5.0版本,请按照以下操作步骤升级: