您可以通过以下链接,获取PDF版用户指南:
PDF下载华为容器存储套件
- 1: 前言
- 2: 概述
- 3: 快速开始
- 4: 兼容性和特性
- 4.1: 闪存存储(OceanStor Dorado/OceanStor V5/OceanStor V6及以后)
- 4.2: 闪存存储(OceanStor A600/A800)
- 4.3: 海量存储(OceanStor Pacific系列)
- 4.4: 海量存储(OceanDisk系列)
- 5: 安装部署
- 5.1: CSI
- 5.1.1: 安装前准备
- 5.1.1.1: 下载华为CSI软件包
- 5.1.1.2: 上传华为CSI镜像
- 5.1.1.3: 检查华为存储上的用户配置
- 5.1.1.4: 检查卷快照依赖组件
- 5.1.1.5: 检查主机多路径配置
- 5.1.1.6: 检查主机依赖软件状态
- 5.1.1.7: 检查CSI依赖的镜像
- 5.1.2: 安装
- 5.1.2.1: 使用Helm安装
- 5.1.2.1.1: Kubernetes、OpenShift、Tanzu安装华为CSI
- 5.1.2.1.2: CCE或CCE Agile平台安装华为CSI
- 5.1.2.1.3: Helm values.yaml参数说明
- 5.1.2.2: 手动安装
- 5.1.3: 卸载
- 5.1.3.1: 使用Helm卸载
- 5.1.3.1.1: Kubernetes、OpenShift、Tanzu卸载华为CSI
- 5.1.3.1.2: CCE或CCE Agile卸载华为CSI
- 5.1.3.1.3: 卸载CSI依赖组件服务
- 5.1.3.2: 手动卸载
- 5.1.4: 升级
- 5.1.4.1: 使用Helm升级
- 5.1.4.1.1: 从2.x或3.x升级至4.x版本
- 5.1.4.1.2: Kubernetes、OpenShift、Tanzu升级华为CSI
- 5.1.4.1.3: CCE或CCE Agile升级华为CSI
- 5.1.4.2: 手动升级
- 5.1.5: 回退
- 5.1.5.1: 使用Helm回退
- 5.1.5.1.1: Kubernetes、OpenShift、Tanzu回退华为CSI
- 5.1.5.1.2: CCE或CCE Agile回退华为CSI
- 5.1.5.2: 手动回退
- 6: 基础服务
- 6.1: 存储后端管理
- 6.1.1: 配置存储后端
- 6.1.1.1: 闪存存储(OceanStor Dorado/OceanStor V5/OceanStor V6及以后)
- 6.1.1.1.1: 文件系统
- 6.1.1.1.2: Dtree
- 6.1.1.1.3: 块业务
- 6.1.1.1.3.1: iSCSI
- 6.1.1.1.3.2: FC
- 6.1.1.1.3.3: NVMe over RoCE
- 6.1.1.1.3.4: FC-NVMe
- 6.1.1.2: 闪存存储(OceanStor A600/A800)
- 6.1.1.3: 海量存储(OceanStor Pacific系列)
- 6.1.1.4: 海量存储(OceanDisk系列)
- 6.1.2: 管理存储后端
- 6.2: 存储类管理
- 6.2.1: 配置存储类
- 6.2.1.1: 闪存存储(OceanStor Dorado/OceanStor V5/OceanStor V6及以后)
- 6.2.1.2: 闪存存储(OceanStor A600/A800)
- 6.2.1.2.1: 文件系统
- 6.2.1.3: 海量存储(FusionStorage Block/OceanStor Pacific系列)
- 6.2.1.4: 海量存储(OceanDisk系列)
- 6.2.2: 管理存储类
- 6.3: 持久卷管理
- 7: 高阶服务
- 8: 常见运维操作
- 8.1: 安装Helm 3
- 8.2: 信息收集
- 8.2.1: 如何获取CSI版本信息
- 8.2.2: 如何查看华为CSI日志
- 8.2.3: 日志收集
- 8.3: 下载容器镜像
- 8.4: 更新huawei-csi-controller或huawei-csi-node服务
- 8.5: 修改日志输出模式
- 8.6: 开启ReadWriteOncePod功能门
- 8.7: 配置非root用户访问Kubernetes集群
- 8.8: 配置IPv6
- 8.8.1: 首次安装华为CSI时配置IPv6
- 8.8.2: 华为CSI由IPv4切换至IPv6
- 8.9: 配置存储拓扑感知
- 8.10: 配置ALUA特性
- 8.10.1: 配置华为企业存储后端的ALUA参数
- 8.10.2: 配置分布式存储后端的ALUA参数
- 8.10.3: OceanStor V5系列ALUA特性配置策略样例
- 8.10.4: OceanStor Dorado ALUA特性配置策略样例
- 8.10.5: 分布式存储ALUA特性配置策略样例
- 9: 故障处理
- 9.1: 华为CSI服务相关问题
- 9.1.1: 启动huawei-csi-node失败,提示错误为:“/var/lib/iscsi is not a directory”
- 9.1.2: 启动华为CSI服务失败,提示错误:“/etc/localtime is not a file”
- 9.1.3: 启动huawei-csi服务时,服务启动异常, 状态显示InvalidImageName
- 9.2: 存储后端相关问题
- 9.2.1: 使用oceanctl工具创建后端失败,报错:context deadline exceeded
- 9.2.2: 使用oceanctl工具获取存储后端时,ONLINE字段值为false
- 9.2.3: 存储侧更新密码后账户被锁定
- 9.3: PVC相关问题
- 9.3.1: 创建PVC时, PVC的状态为Pending
- 9.3.2: 删除PVC前,PVC的状态为Pending
- 9.3.3: 通用临时卷扩容失败
- 9.3.4: PVC扩容的目标容量超过存储池容量导致扩容失败
- 9.4: Pod相关问题
- 9.4.1: 集群中worker节点宕机并恢复后,Pod完成failover,但是Pod所在源主机出现盘符残留
- 9.4.2: 创建Pod时,Pod的状态为ContainerCreating
- 9.4.3: 创建Pod时,Pod的状态长时间处于ContainerCreating状态
- 9.4.4: 创建Pod失败,日志显示执行mount命令超时
- 9.4.5: 创建Pod失败,日志显示执行mount命令失败
- 9.4.6: 创建Pod失败,Events日志显示“publishInfo doesn't exist”
- 9.4.7: 创建Pod失败或重启kubelet后,日志显示挂载点已存在
- 9.4.8: Pod挂载卷目录提示I/O error
- 9.4.9: Kubernetes平台第一次搭建时, iscsi_tcp服务没有正常启动,导致创建Pod失败
- 9.4.10: 创建Pod失败,日志显示启动器已关联至其他主机
- 9.4.11: 创建Pod失败,日志显示“Get DMDevice by alias: dm-x failed”
- 9.5: 对接Tanzu Kubernetes集群常见问题及解决方法
- 9.5.1: 未创建PSP权限导致Pod无法创建
- 9.5.2: 修改主机挂载点
- 9.5.3: 修改livenessprobe容器的默认端口
- 9.5.4: 创建临时卷失败
- 10: CLI命令说明
- 10.1: oceanctl命令说明
- 11: 附录
- 11.1: 通信矩阵
- 11.2: 配置自定义权限
- 11.3: 华为CSI资源管理
- 11.4: Kubernetes特性矩阵
1 - 前言
读者对象
本文档主要适用于以下读者对象:
- 技术支持工程师
- 运维工程师
- 具备存储和Kubernetes基础知识的工程师
符号约定
在本文中可能出现下列标志,它们所代表的含义如下。
2 - 概述
容器存储接口( Container Storage Interface ),简称 CSI,是一种行业标准协议,用于对接Kubernetes等容器平台与底层存储系统。华为CSI插件作为必备组件,实现华为企业存储和分布式存储产品与Kubernetes集群的对接,为容器工作负载提供持久化存储服务。
Kubernetes通过其官方维护的一系列sidecar组件负责注册监听Kubernetes对象资源,并调用CSI驱动程序,触发华为存储的物理操作。如创建一个 持久卷(Persistent Volume,PV) 时,华为CSI驱动会在存储设备中创建对应的LUN(块存储)或文件系统。Kubernetes、华为CSI以及华为存储的整体结构如 图1 所示:
华为CSI主要有两大组件,分别为huawei-csi-controller和huawei-csi-node:
- huawei-csi-controller:包含Controller Service和Identity Service,以Deployment方式运行的一个或多个Pod,主要负责与华为存储交互,使用RESTful方式进行通信,因此运行huawei-csi-controller组件的节点需要连通存储的管理面网络。
- huawei-csi-node:包含Node Service和Identity Service,以DaemonSet方式运行在Kubernetes工作节点上的Pod,用于在工作节点上对华为存储提供的LUN/文件系统资源进行挂载和卸载等操作,因此运行huawei-csi-node组件的节点需要连通存储的业务面网络。
华为CSI的部署模型如 图2 所示:
本文档主要介绍华为CSI V4.9.0插件的安装部署和使用。
3 - 快速开始
本章节说明如何快速上手安装并使用华为CSI管理PVC。
华为CSI使用流程概览
兼容性和特性
使用前请先了解对接的华为存储、容器平台和主机操作系统相关的兼容性以及支持的特性,具体请参考 兼容性和特性 。
安装前准备
安装华为CSI前,需要对容器平台、主机等环境做相关配置准备,参考 安装前准备 。
安装部署
华为CSI提供了Helm和手动安装两种安装方式,并适用于包含Kubernetes、OpenShift等不同的容器平台,参考 安装部署 。
创建存储后端
在使用华为CSI前,需要先创建存储后端资源,参考 配置存储后端 。
使用华为CSI
4 - 兼容性和特性
4.1 - 闪存存储(OceanStor Dorado/OceanStor V5/OceanStor V6及以后)
4.1.1 - 文件业务
4.1.1.1 - 兼容性
4.1.1.1.1 - 存储
华为CSI存储兼容性
表 1 支持的华为存储产品
6.1.0, 6.1.2, 6.1.3, 6.1.5, 6.1.6, 6.1.7, 6.1.8, V700R001C00, V700R001C10 |
表 2 华为企业存储Dtree支持的华为存储版本
6.1.0, 6.1.2, 6.1.3, 6.1.5, 6.1.6, 6.1.7, 6.1.8, V700R001C00, V700R001C10 |
4.1.1.1.2 - 容器平台
华为CSI平台兼容性
表 1 支持的容器管理平台
4.1.1.1.3 - 操作系统
华为CSI操作系统兼容性
表 1 支持的主机操作系统
4.1.1.2 - 特性
4.1.1.2.1 - 华为CSI
表 1 华为存储支持的特性及约束
表 2 华为企业存储Dtree支持的特性
4.1.2 - 块业务
4.1.2.1 - 兼容性
4.1.2.1.1 - 存储
华为CSI存储兼容性
表 1 支持的华为存储产品
6.1.0, 6.1.2, 6.1.3, 6.1.5, 6.1.6, 6.1.7, 6.1.8, V700R001C00, V700R001C10 |
4.1.2.1.2 - 容器平台
华为CSI平台兼容性
表 1 支持的容器管理平台
4.1.2.1.3 - 操作系统
华为CSI操作系统兼容性
表 1 支持的主机操作系统
4.1.2.2 - 特性
4.1.2.2.1 - 华为CSI
表 1 华为存储支持的特性及约束
| |||
| |||
- 若客户的容器平台部署在虚拟化平台上,CSI对接SAN存储时建议使用iSCSI协议。
- 若客户要求使用FC/NVMe over FC/NVMe over RoCE协议,需要对虚拟化平台进行特定配置,需客户侧的虚拟化团队提供技术支持。
- 使用NVMe over RoCE或NVMe over FC时,支持的nvme-cli工具版本为1.9及以上,查询命令为:nvme version。
4.2 - 闪存存储(OceanStor A600/A800)
4.2.1 - 文件业务
4.2.1.1 - 兼容性
4.2.1.1.2 - 容器平台
华为CSI平台兼容性
表 1 支持的容器管理平台
4.2.1.2 - 特性
4.3 - 海量存储(OceanStor Pacific系列)
4.3.1 - 文件业务
4.3.1.1 - 兼容性
4.3.1.1.1 - 存储
华为CSI存储兼容性
表 1 支持的华为存储产品
8.1.0, 8.1.1, 8.1.2, 8.1.3, 8.1.5, 8.2.0, 8.2.1, V800R001C10 |
表 2 华为分布式存储Dtree支持的华为存储版本
8.1.0, 8.1.1, 8.1.2, 8.1.3, 8.1.5, 8.2.0, 8.2.1, V800R001C10 |
4.3.1.1.2 - 容器平台
华为CSI平台兼容性
表 1 支持的容器管理平台
4.3.1.1.3 - 操作系统
表 1 支持的主机操作系统
4.3.1.2 - 特性
4.3.1.2.1 - 华为CSI
表 1 华为存储支持的特性及约束
| |
表 2 华为分布式存储Dtree支持的特性
4.3.2 - 块业务
4.3.2.1 - 兼容性
4.3.2.1.2 - 容器平台
华为CSI平台兼容性
表 1 支持的容器管理平台
4.3.2.1.3 - 操作系统
华为CSI操作系统兼容性
表 1 支持的主机操作系统
4.3.2.2 - 特性
4.3.2.2.1 - 华为CSI
| ||
4.4 - 海量存储(OceanDisk系列)
4.4.1 - 文件业务
4.4.1.1 - 兼容性
4.4.1.1.2 - 容器平台
华为CSI平台兼容性
表 1 支持的容器管理平台
4.4.1.1.3 - 操作系统
表 1 支持的主机操作系统
4.4.1.2 - 特性
4.4.1.2.1 - 华为CSI
表 1 华为存储支持的特性及约束
4.4.2 - 块业务
4.4.2.1 - 兼容性
4.4.2.1.2 - 容器平台
华为CSI平台兼容性
表 1 支持的容器管理平台
4.4.2.1.3 - 操作系统
华为CSI操作系统兼容性
表 1 支持的主机操作系统
4.4.2.2 - 特性
4.4.2.2.1 - 华为CSI
- 若客户的容器平台部署在虚拟化平台上,CSI对接SAN存储时建议使用iSCSI协议。
- 若客户要求使用FC/NVMe over FC/NVMe over RoCE协议,需要对虚拟化平台进行特定配置,需客户侧的虚拟化团队提供技术支持。
- 使用NVMe over RoCE或NVMe over FC时,支持的nvme-cli工具版本为1.9及以上,查询命令为:nvme version。
5 - 安装部署
5.1 - CSI
5.1.1 - 安装前准备
本章节将对安装前的准备工作进行详细说明。
前提条件
- 容器管理平台已部署完成,正常运行且满足 兼容性和特性 章节中的容器平台兼容性要求。
- (企业存储必选)已完成对接华为企业存储初始化配置,包括存储池划分、端口配置等。且存储产品的版本满足 兼容性和特性 章节中的存储兼容性要求。
- (分布式存储必选)已完成对接华为分布式存储初始化配置,包括存储池划分、端口配置等。且存储产品的版本满足 兼容性和特性 章节中的存储兼容性要求。
- 完成华为存储和容器平台主机连通性配置,例如运行huawei-csi-controller的worker节点与待接入的存储设备的管理IP地址通信正常,运行huawei-csi-node的worker节点与待接入的存储设备的业务IP地址通信正常,iSCSI场景下允许使用ping命令进行连通性校验等。
- 请确保操作系统的语言是英文。
- 请确保存储池、租户名称等相关存储资源名称是英文。
5.1.1.1 - 下载华为CSI软件包
本章节详细说明了下载方法以及软件包组件结构。
打开浏览器,访问仓库地址: https://github.com/Huawei/eSDK_K8S_Plugin/releases 。
根据CPU架构,下载对应的4.9.0版本软件包。
- 软件包命名规范:插件名称(eSDK_Storage_CSI)+版本号+CPU架构。
- CSI支持的CPU架构包括:X86、ARM和PPC64LE。
将下载的软件包解压。软件包组件结构如下表所示。
表 1 软件包组件描述
5.1.1.2 - 上传华为CSI镜像
华为提供huawei-csi镜像供用户使用,镜像文件获取请参考 下载华为CSI软件包 。
为了后续在容器管理平台中可以使用CSI镜像,需要提前将CSI镜像导入到集群中:
上传镜像到镜像仓库
安装华为CSI依赖如下华为提供的镜像文件,请按照说明依次导入并上传下列镜像文件,镜像文件获取请参考 下载华为CSI软件包 。
- huawei-csi-v4.9.0-arch.tar
- storage-backend-controller-v4.9.0-arch.tar
- storage-backend-sidecar-v4.9.0-arch.tar
- huawei-csi-extender-v4.9.0-arch.tar
前提条件
已准备一台已安装Docker的Linux主机,且该主机支持访问镜像仓库。
操作步骤
执行以下命令,将CSI镜像导入当前节点。其中arch为CPU架构。
docker load -i huawei-csi-v4.9.0-<arch>.tar
执行以下命令,添加镜像仓库地址到镜像标签。其中repo.huawei.com表示镜像仓库的地址。
docker tag huawei-csi:4.9.0 <repo.huawei.com>/huawei-csi:4.9.0
执行以下命令,将CSI镜像上传到镜像仓库。其中repo.huawei.com表示镜像仓库的地址。
docker push <repo.huawei.com>/huawei-csi:4.9.0
- 需根据容器运行时环境(如Docker/Containerd),执行对应的CLI命令完成镜像加载与推送操作。
- CCE或CCE Agile平台请参考该平台用户手册完成镜像导入和上传。
上传镜像到本地节点
若镜像已上传至镜像仓库,则跳过本章节。
前提条件
- 该节点已获取对应的华为CSI镜像文件,镜像文件获取请参考 下载华为CSI软件包 。
- 该节点已经安装Docker或其他容器引擎。
操作步骤
- 使用远程访问工具(以PuTTY为例),通过管理IP地址,登录需要导入镜像的节点。
- 将Kubernetes CSI组件包中的"image"目录拷贝到当前节点的任意目录下。
- 执行cd image命令,进入到image的工作目录。工具路径请参见 表1 。
- 执行命令依次将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
当节点主机安装的是其他容器引擎时,请使用对应容器引擎的导入镜像命令。
5.1.1.3 - 检查华为存储上的用户配置
当华为存储接入容器平台后,华为CSI需要在华为存储上根据业务要求管理存储资源,如创建卷、映射卷等操作。此时,华为CSI需要使用华为存储上已经创建的用户和华为存储进行通信。针对不同存储设备所需要的用户信息如下表所示。
表 1 存储对接CSI时使用的用户要求
5.1.1.4 - 检查卷快照依赖组件
本章节介绍如何检查集群中卷快照依赖组件情况。
Kubernetes v1.20之前版本部署华为CSI,请按照以下步骤检查。
执行以下命令查看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
将Kubernetes CSI组件包中的"helm"目录拷贝到master节点的任意目录下。Helm工具路径请参见 表1 。
进入helm/esdk/crds/snapshot-crds目录,执行以下命令,删除快照CRD安装文件。
rm -rf ./huawei-csi-snapshot-crd-v1.yaml
5.1.1.5 - 检查主机多路径配置
当您计划在容器环境中使用FC/iSCSI/NVMe over RoCE/NVMe over FC协议对华为存储进行访问时,推荐您使用主机多路径软件增强主机和存储的链路冗余和性能。如果您不准备使用多路径软件,请跳过本章节。
华为CSI软件支持对接的操作系统和多路径软件请参考 兼容性和特性 章节中的操作系统兼容性。
- 如果您准备使用FC/iSCSI协议对接华为存储时,推荐使用操作系统自带的原生DM-Multipath。
- 如果您准备使用NVMe over RoCE/NVMe over FC协议对接华为存储时,推荐使用华为自研的UltraPath-NVMe。
- 如果您使用SCSI协议对接华为存储时,请关闭操作系统自带的DM-Multipath。
前提条件
主机多路径软件已经被正确的安装在主机上。
- 如果您使用的是操作系统自带的原生DM-Multipath,请咨询您的主机或操作系统提供商获取安装所需的资料和软件包。
- 如果您使用的是华为自研的UltraPath或者UltraPath-NVMe,请联系华为工程师获取UltraPath或者UltraPath-NVMe的资料和软件包。软件包版本请参考 兼容性和特性 章节中的操作系统兼容性。
操作步骤
如果您使用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
5.1.1.6 - 检查主机依赖软件状态
本章节介绍如何检查集群中工作节点上主机依赖软件状态是否正常。以主机操作系统为CentOS 7.9 x86_64为例。
检查iSCSI客户端状态。
systemctl status iscsi iscsid
检查NFS客户端状态。
systemctl status rpcbind
检查DM-Multipath多路径软件状态。
systemctl status multipathd.socket multipathd
检查UltraPath多路径软件状态。
systemctl status nxup
检查UltraPath-NVMe多路径软件状态。
systemctl status upudev upService_plus
检查DataTurbo客户端状态,请参考 《OceanStor DataTurbo 25.1.0 DTFS用户指南》 。
检查NFS+客户端状态,请参考 《NFS+客户端 1.x 用户指南》 。
5.1.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依赖的镜像
集群若未连接互联网,需要手动下载容器镜像并上传到集群中,具体操作请参考 下载容器镜像 。
5.1.2 - 安装
本章节介绍如何安装华为CSI。
当前版本的华为CSI添加了资源请求和限制,具体详情请参考 华为CSI资源管理 。
前提条件
- 已完成 安装前准备 。
- 集群的所有worker节点与待接入的存储设备的业务组网通信正常,iSCSI场景下允许使用ping命令进行连通性校验。
- 集群的所有worker节点已安装对应协议所需要的软件客户端,如iSCSI客户端、NFS客户端等。
5.1.2.1 - 使用Helm安装
本章节介绍如何使用Helm 3安装部署华为CSI。
Helm安装说明
- 华为CSI的安装支持root用户和非root用户。使用非root用户安装华为CSI时,需要保证当前用户能够访问Kubernetes集群的API Server,配置非root用户访问Kubernetes集群请参考 配置非root用户访问Kubernetes集群 。
- 华为CSI必须在root用户权限下运行。
Helm是Kubernetes生态系统中的一个软件包管理工具,类似Ubuntu的APT、CentOS的YUM、或Python的pip一样,专门负责管理Kubernetes的应用资源。
使用Helm可以对Kubernetes应用进行统一打包、分发、安装、升级以及回退等操作。
- Helm的获取、安装请参考: 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健康状态。
5.1.2.1.1 - Kubernetes、OpenShift、Tanzu安装华为CSI
安装步骤
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录集群的任意master节点。
将Kubernetes CSI组件包中的"helm"目录拷贝到master节点的任意目录下。Helm工具路径请参见 表1 。
进入到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.20,可跳过本步骤,详情请参考 表2 。
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目录下,执行以下命令打开配置文件。安装包目录请参见 表1 。
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
5.1.2.1.2 - CCE或CCE Agile平台安装华为CSI
本章节介绍如何在CCE或CCE Agile平台安装华为CSI。
制作Helm安装包
CCE或CCE Agile平台无法直接通过Helm安装华为CSI,需要手动制作Helm安装包后上传至平台模板市场进行安装。
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录已部署Helm的任意节点。
将华为CSI组件包中的"helm"目录拷贝到节点的任意目录下。Helm工具路径请参见 表1 。
进入到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”)。安装成功后执行状态将回显为“安装成功”。
5.1.2.1.3 - Helm values.yaml参数说明
在使用Helm安装CSI时,需要您根据部署时需要使用的特性准备Helm工程的values.yaml文件。华为CSI已经在软件包的helm/esdk目录下提供了values.yaml模板文件。
本章节将详细说明values.yaml中的配置项以及典型场景下的后端配置示例。
images参数配置说明
values.yaml中的images配置项主要配置华为CSI运行时依赖的组件镜像信息。需要配置的参数如下:
表 1 images配置项说明
livenessprobe sidecar镜像。 | |||
csi-provisioner sidecar镜像。 | |||
csi-attacher sidecar镜像。 | |||
csi-resizer sidecar镜像。 | |||
csi-snapshotter sidecar镜像。 | |||
snapshot-controller sidecar镜像。 | |||
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配置项说明
Kubernetes版本低于v1.17时,由于Kubernetes社区提供的csi-provisioner sidecar镜像不支持--leader-election参数,只能通过单副本方式部署huawei-csi-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能够容忍节点上存在该污点。 | 污点和容忍度的详细说明请参考:污点和容忍度 | |||
huawei-csi-controller的节点亲和性。配置后huawei-csi-controller会优先调度到存在该标签的节点上。 | 节点亲和性的详细说明请参考:将Pod指派给节点 | |||
当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" | 污点和容忍度的详细说明请参考:污点和容忍度 | |||
节点亲和性的详细说明请参考:将Pod指派给节点 | ||||
当一个块设备被成功挂载之后,挂载路径的目录结构应该如下所示: /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。 | |||
| ||||
| ||||
可以对huawei-csi-controller和huawei-csi-node相关容器资源进行分配: resources.<component>.<container-name>
controller.<container-name>支持的参数:
| 各容器资源分配默认值,请参考:华为CSI资源管理 | 以huawei-csi-controller的livenessProbe为例: resources: controller: limits: cpu: 100m memory: 128Mi requests: cpu: 10m memory: 128Mi |
请确保此kubernetes.namespace填入的命名空间在Kubernetes上已经存在,如果不存在请使用如下命令创建对应的命名空间。本例中,华为CSI运行的命名空间为“huawei-csi”。kubectl create namespace huawei-csi
5.1.2.2 - 手动安装
本章节介绍如何手动安装华为CSI。
手动安装华为CSI当前仅支持Kubernetes平台。
安装步骤
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录集群的任意master节点。
将Kubernetes CSI组件包中的"manual"目录拷贝到master节点的任意目录下。
执行命令创建一个命名空间,此处空间名称以huawei-csi为例。
kubectl create ns huawei-csi
进入到manual/esdk的工作目录下。具体路径请参见 表1 。
cd manual/esdk
执行命令,更新存储后端CRD
kubectl apply -f ./crds/backend/
(可选) 请务必按照 检查卷快照依赖组件 章节检查快照依赖组件,确认无误后执行执行命令更新快照CRD,如果Kubernetes版本低于v1.20,跳过本步骤。
kubectl apply -f ./crds/snapshot-crds/ --validate=false
(可选) 执行命令安装CSIDriver。如果不使用CSIDriver特性,可跳过本步骤,详情请参考 CSIDriver 特性。
kubectl apply -f ./deploy/csidriver.yaml
执行命令安装huawei-csi-controller服务。
如果Kubernetes版本低于v1.20,需要对 ./deploy/huawei-csi-controller.yaml 文件进行如下修改:- Kubernetes版本低于v1.20时,不支持快照特性,删除名称为csi-snapshotter和snapshot-controller这两个与快照相关的容器配置。 如果Kubernetes版本低于v1.17,需要对 ./deploy/huawei-csi-controller.yaml 文件进行如下修改:
- Kubernetes版本低于v1.17时,不支持快照特性,删除名称为csi-snapshotter和snapshot-controller这两个与快照相关的容器配置。
- Kubernetes版本低于v1.17时,由于Kubernetes社区提供的csi-provisioner sidecar镜像不支持–leader-election参数,删除csi-provisioner容器leader-election参数配置,且仅支持单副本部署。
- 根据 检查CSI依赖的镜像 中的版本要求,修改依赖的镜像版本。
kubectl apply -f ./deploy/huawei-csi-controller.yaml
执行命令安装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使配置生效。
5.1.3 - 卸载
本章节介绍如何卸载华为CSI。根据您安装时的方式,请使用不同的方式进行卸载。
如果您不是出于升级的目的卸载华为CSI,请确保卸载华为CSI前已经在您的容器平台中将华为CSI发放的资源(PV、PVC、快照、存储后端等)全部清理。否则一旦您卸载华为CSI后,这些资源将无法被自动调度、管理或者清理。
5.1.3.1 - 使用Helm卸载
5.1.3.1.1 - Kubernetes、OpenShift、Tanzu卸载华为CSI
本章节介绍如何在Kubernetes、OpenShift、Tanzu平台卸载华为CSI。
操作步骤
使用远程访问工具(以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资源 进行操作。
(可选)执行以下命令,删除华为CSI所在的命名空间,这里以默认命名空间 huawei-csi 为例:
kubectl delete ns huawei-csi
5.1.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依赖组件服务 进行操作。
(可选)执行以下命令,删除华为CSI所在的命名空间,这里命名空间以 huawei-csi 为例:
kubectl delete ns huawei-csi
5.1.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资源
当使用多副本方式部署huawei-csi-controller时,会生成Lease资源,用于保存当前Holder信息。使用helm uninstall命令时不会卸载该资源,若需卸载该资源,请参考以下步骤:
使用远程访问工具(以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.
5.1.3.2 - 手动卸载
本章节介绍如何手动卸载华为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资源 进行操作。
(可选)执行以下命令,删除华为CSI所在的命名空间,这里以默认命名空间 huawei-csi 为例:
kubectl delete ns huawei-csi
5.1.4.1 - 使用Helm升级
本章节介绍如何升级华为CSI。
- 如果您从2.x版本升级至4.9.0版本,请参考旧版本用户指南卸载CSI,然后参考 使用Helm安装 章节安装华为CSI。
- 如果您从2.x或3.x版本升级至4.9.0版本,请参考 从2.x或3.x升级至4.x版本 章节升级华为CSI。
- 如果您从4.x版本升级至4.9.0版本,请参考 Kubernetes、OpenShift、Tanzu升级华为CSI 章节升级华为CSI。
- 部分2.x版本CSI已经下架,若升级失败,可能无法回退到已下架版本的CSI。
- 从2.x或3.x版本或4.x版本升级至4.9.0版本,可能存在旧版本已发放Pod重新挂载时失败的问题,具体请参考 从2.x或3.x升级至4.x版本
- 在升级/回退过程中,不能使用华为CSI创建新的资源,或者对已有的PVC做挂载/卸载操作。
- 在升级/回退过程中,请勿卸载Snapshot依赖组件服务。
- 升级/回退过程中,已经存在的PVC/快照/Pod等资源会正常运行,不会影响您的业务访问。
5.1.4.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.x版本,请参考以下步骤进行操作。
备份存储后端配置
如果您已按照以上须知评估风险后,确认需要从2.x或3.x版本的CSI升级至4.9.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在漂移过程中出现问题。
5.1.4.1.2 - Kubernetes、OpenShift、Tanzu升级华为CSI
前提条件
- 旧版本华为CSI使用Helm安装。
- 新版本华为CSI镜像已制作完成,并且按照 上传华为CSI镜像 章节说明,上传到镜像仓库或者导入到所有节点。
升级华为CSI
如果您旧版本CSI使用Helm部署,请按照以下操作步骤升级华为CSI。
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
将目标版本CSI组件包拷贝到master节点的任意目录下。
进入到helm/esdk的工作目录下,目录路径请参见 表1 。
cd helm/esdk
执行kubectl apply -f ./crds/backend/命令,更新存储后端CRD
kubectl apply -f ./crds/backend/
(可选) 请务必按照 检查卷快照依赖组件 章节检查快照依赖组件,确认无误后执行执行以下命令更新快照CRD,如果controller.snapshot.enabled参数设置为false或Kubernetes版本低于v1.20,可跳过本步骤,详情请参考 表2 。
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配置项,更新镜像至最新版本。需要修改的参数请参考 表1 。
表 1 images配置项
livenessprobe sidecar镜像。
csi-resizer sidecar镜像。
csi-node-driver-registrar sidecar镜像。
registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.9.0
csi-snapshotter sidecar镜像。
snapshot-controller sidecar镜像。
csi-provisioner sidecar镜像。
csi-attacher 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
5.1.4.1.3 - CCE或CCE Agile升级华为CSI
前提条件
已下载新版本CSI的软件包。
操作步骤
- 参考 CCE或CCE Agile卸载华为CSI 卸载CSI。
- 参考 CCE或CCE Agile平台安装华为CSI 安装新版本的CSI。
5.1.4.2 - 手动升级
本章节介绍如何手动升级华为CSI。
升级/回退过程中,已经存在的PVC/快照/Pod等资源会正常运行,不会影响您的业务访问。
- 部分2.x版本CSI已经下架,若升级失败,可能无法回退到已下架版本的CSI。
- 在升级/回退过程中,不能使用华为CSI创建新的资源,或者对已有的PVC做挂载/卸载操作。
- 在升级/回退过程中,请勿卸载Snapshot依赖组件服务。
2.x和3.x版本的CSI升级至4.9.0版本
如果您从2.x和3.x版本的CSI升级至4.9.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。
从4.x版本的CSI升级至4.9.0版本。
如果您从4.x版本的CSI升级至4.9.0版本,请按照以下操作步骤升级:
5.1.5 - 回退
5.1.5.1 - 使用Helm回退
如果您从2.x和3.x版本的CSI升级至4.9.0版本失败,需要回退时,请参考 使用Helm卸载 卸载CSI,然后下载安装升级之前版本的CSI。
- 在升级/回退过程中,已经存在的PVC/快照/Pod等资源会正常运行,不会影响您的业务访问。
- 在升级/回退过程中,不能使用华为CSI创建新的资源,或者对已有的PVC做挂载/卸载操作。
- 在升级/回退过程中,请勿卸载Snapshot依赖组件服务。
5.1.5.1.1 - Kubernetes、OpenShift、Tanzu回退华为CSI
前提条件
- 已使用Helm 3完成CSI的更新。
操作步骤
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
进入到helm/esdk的工作目录下,目录路径请参见 表1 。
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.9.0 4.9.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!
5.1.5.1.2 - CCE或CCE Agile回退华为CSI
- 在升级/回退过程中,已经存在的PVC/快照/Pod等资源会正常运行,不会影响您的业务访问。
- 在升级/回退过程中,不能使用华为CSI创建新的资源,或者对已有的PVC做挂载/卸载操作。
- 在升级/回退过程中,请勿卸载Snapshot依赖组件服务。
前提条件
已下载原版本CSI的软件包。
操作步骤
- 使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
- 参考 操作步骤 卸载CSI。
- 参考 CCE或CCE Agile平台安装华为CSI 重新安装原版本的CSI。
5.1.5.2 - 手动回退
请参考 手动卸载 卸载CSI,然后下载安装升级之前版本的CSI。
- 在升级/回退过程中,已经存在的PVC/快照/Pod等资源会正常运行,不会影响您的业务访问。
- 在升级/回退过程中,不能使用华为CSI创建新的资源,或者对已有的PVC做挂载/卸载操作。
- 在升级/回退过程中,请勿卸载Snapshot依赖组件服务。
前提条件
已下载原版本CSI的软件包。
操作步骤
6 - 基础服务
6.1 - 存储后端管理
后端是华为存储资源的抽象概念,每台华为存储设备可以通过租户/存储池/协议等特性抽象出多个后端资源,每个后端独立存在,其中定义了为Kubernetes集群供应持久卷时所需要的华为存储信息。
本章节用于描述使用oceanctl工具配置管理存储后端。
oceanctl工具说明
- 获取oceanctl工具,将oceanctl工具拷贝到环境目录下,例如(/usr/local/bin),且赋予可执行权限,oceanctl工具位于软件包/bin/oceanctl。
- oceanctl工具依赖kubectl(Kubernetes平台)或oc(OpenShift平台)命令,因此需要在可执行kubectl或oc命令的节点运行。
- 默认情况下,执行oceanctl命令的用户需要有/var/log目录的读写权限。如果没有该目录权限,可通过“–log-dir=/path/to/custom”指定有权限目录作为日志文件目录。
- oceanctl创建后端的命名空间默认为huawei-csi。
- oceanctl命令详细说明请参考 oceanctl命令说明 。
6.1.1 - 配置存储后端
- 使用oceanctl创建存储后端时,输入的账号和秘钥信息保存在 Secret 对象中,建议客户容器平台根据供应商或者K8s社区的建议自行对Secret进行加密。K8s社区对Secret加密可参考 静态加密机密数据 。
- 通过json文件创建后端时,旧版本的backend名称中可能存在大写字母或"_“字符。如果出现这种情况,旧的名称将会被重映射为一个新的名称,映射过程自动发生,不会影响原有功能。例如“ABC_123”将会被映射为“abc-123-fd68e”,具体映射规则如下:
- 大写字母转换成小写字母。
- “_“字符转换成“-”字符。
- 末尾追加5位Hash码。
- 当存储后端对接租户时,在存储后端创建完成后,不允许修改租户名称。
6.1.1.1 - 闪存存储(OceanStor Dorado/OceanStor V5/OceanStor V6及以后)
6.1.1.1.1 - 文件系统
6.1.1.1.1.1 - NFS
本章节介绍创建NFS协议类型的存储后端
配置项说明
表 1 backend配置项说明
| ||||
| ||||
| ||||
如果启用存储拓扑感知,需要配置该参数。具体请参考配置存储拓扑感知。 | ||||
|
创建本地类型存储后端
准备后端配置文件,如backend.yaml。
storage: "oceanstor-nas" name: "backend-demo" namespace: "huawei-csi" urls: - "https://192.168.129.157:8088" pools: - "StoragePool001" parameters: protocol: "nfs" portals: - "10.10.30.20" maxClientThreads: "30"
执行以下命令创建存储后端。
oceanctl create backend -f /path/to/backend.yaml -i yaml
命令结果示例如下:
NUMBER CONFIGURED NAME STORAGE URLS 1 false backend-demo oceanstor-nas https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
输入待创建后端序号,并输入账号密码。
Please enter the backend number to configure (Enter 'exit' to exit):1 Please enter this backend user name: admin Please enter this backend password: Backend backend-demo is configured NUMBER CONFIGURED NAME STORAGE URLS 1 true backend-demo oceanstor-nas https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
检查存储后端创建结果。
oceanctl get backend
命令结果示例如下,后端状态为Bound,则创建成功。
NAMESPACE NAME PROTOCOL STORAGETYPE SN STATUS ONLINE URL huawei-csi backend-demo nfs oceanstor-nas xxxxxxxxxxxxxxxxxxxx Bound true https://192.168.129.157:8088
创建双活类型存储后端
- 配置NAS双活前,需要在两台存储设备之间配置双活关系,包含远端设备、双活域等,仅支持文件系统双活域工作模式为双活AA模式,配置操作请参考对应存储型号的产品文档。
- 对接NAS双活后端的账号必须为存储租户的租户管理员账号。
- 除NAS双活后端外,其他后端的管理URL不能配置为在已建立双活关系的租户的逻辑管理端口的URL。
- 使用双活类型的存储后端时,请勿发放普通文件系统。否则,在逻辑端口漂移场景下,有业务中断的风险。
准备存储后端配置文件,如backend.yaml。
storage: "oceanstor-nas" name: "backend-active" namespace: "huawei-csi" urls: - "https://192.168.129.155:8088" pools: - "StoragePool001" metrovStorePairID: "2100xxxxxxxxxx0000000000600000000" metroBackend: "backend-standby" parameters: protocol: "nfs" portals: - "192.168.129.156" maxClientThreads: "30" --- storage: "oceanstor-nas" name: "backend-standby" namespace: "huawei-csi" urls: - "https://192.168.129.157:8088" pools: - "StoragePool001" metrovStorePairID: "2100xxxxxxxxxx0000000000600000000" metroBackend: "backend-active" parameters: protocol: "nfs" portals: - "192.168.129.158" maxClientThreads: "30"
执行以下命令创建存储后端。
oceanctl create backend -f /path/to/backend.yaml -i yaml
命令结果示例如下:
NUMBER CONFIGURED NAME STORAGE URLS 1 false backend-active oceanstor-nas https://192.168.129.155:8088 2 false backend-standby oceanstor-nas https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
分别输入待创建后端序号,并输入账号密码。
Please enter the backend number to configure (Enter 'exit' to exit):1 Please enter this backend user name: user1 Please enter this backend password: Backend backend-standby is configured NUMBER CONFIGURED NAME STORAGE URLS 1 true backend-active oceanstor-nas https://192.168.129.155:8088 2 true backend-standby oceanstor-nas https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
检查存储后端创建结果。
oceanctl get backend
命令结果示例如下,后端状态为"Bound" 则创建成功。
NAMESPACE NAME PROTOCOL STORAGETYPE SN STATUS ONLINE URL huawei-csi backend-active nfs oceanstor-nas xxxxxxxxxxxxxxxxxxxx Bound true https://192.168.129.155:8088 huawei-csi backend-standby nfs oceanstor-nas xxxxxxxxxxxxxxxxxxxx Bound true https://192.168.129.157:8088
6.1.1.1.1.2 - NFS+
本章节介绍创建NFS+协议类型的存储后端
配置项说明
表 1 backend配置项说明
| ||||
| ||||
| ||||
如果启用存储拓扑感知,需要配置该参数。具体请参考配置存储拓扑感知。 | ||||
|
创建本地类型存储后端
准备后端配置文件,如backend.yaml。
storage: "oceanstor-nas" name: "backend-demo" namespace: "huawei-csi" urls: - "https://192.168.129.157:8088" pools: - "StoragePool001" parameters: protocol: "nfs+" portals: - "10.10.30.20" - "10.10.30.30" maxClientThreads: "30"
执行以下命令创建存储后端。
oceanctl create backend -f /path/to/backend.yaml -i yaml
命令结果示例如下:
NUMBER CONFIGURED NAME STORAGE URLS 1 false backend-demo oceanstor-nas https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
输入待创建后端序号,并输入账号密码。
Please enter the backend number to configure (Enter 'exit' to exit):1 Please enter this backend user name: admin Please enter this backend password: Backend backend-demo is configured NUMBER CONFIGURED NAME STORAGE URLS 1 true backend-demo oceanstor-nas https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
检查存储后端创建结果。
oceanctl get backend
命令结果示例如下,后端状态为Bound,则创建成功。
NAMESPACE NAME PROTOCOL STORAGETYPE SN STATUS ONLINE URL huawei-csi backend-demo nfs+ oceanstor-nas xxxxxxxxxxxxxxxxxxxx Bound true https://192.168.129.157:8088
创建双活类型存储后端
- 配置NAS双活前,需要在两台存储设备之间配置双活关系,包含远端设备、双活域等,仅支持文件系统双活域工作模式为双活AA模式,配置操作请参考对应存储型号的产品文档。
- 对接NAS双活后端的账号必须为存储租户的租户管理员账号。
- 除NAS双活后端外,其他后端的管理URL不能配置为在已建立双活关系的租户的逻辑管理端口的URL。
- 使用双活类型的存储后端时,请勿发放普通文件系统。否则,在逻辑端口漂移场景下,有业务中断的风险。
操作步骤
准备存储后端配置文件,如backend.yaml。
storage: "oceanstor-nas" name: "backend-active" namespace: "huawei-csi" urls: - "https://192.168.129.155:8088" pools: - "StoragePool001" metrovStorePairID: "2100xxxxxxxxxx0000000000600000000" metroBackend: "backend-standby" parameters: protocol: "nfs+" portals: - "192.168.129.156" - "192.168.129.157" maxClientThreads: "30" --- storage: "oceanstor-nas" name: "backend-standby" namespace: "huawei-csi" urls: - "https://192.168.129.158:8088" pools: - "StoragePool001" metrovStorePairID: "2100xxxxxxxxxx0000000000600000000" metroBackend: "backend-active" parameters: protocol: "nfs+" portals: - "192.168.129.159" - "192.168.129.160" maxClientThreads: "30"
执行以下命令创建存储后端。
oceanctl create backend -f /path/to/backend.yaml -i yaml
命令结果示例如下:
NUMBER CONFIGURED NAME STORAGE URLS 1 false backend-active oceanstor-nas https://192.168.129.155:8088 2 false backend-standby oceanstor-nas https://192.168.129.158:8088 Please enter the backend number to configure (Enter 'exit' to exit):
分别输入待创建后端序号,并输入账号密码。
Please enter the backend number to configure (Enter 'exit' to exit):1 Please enter this backend user name: user1 Please enter this backend password: Backend backend-standby is configured NUMBER CONFIGURED NAME STORAGE URLS 1 true backend-active oceanstor-nas https://192.168.129.155:8088 2 true backend-standby oceanstor-nas https://192.168.129.158:8088 Please enter the backend number to configure (Enter 'exit' to exit):
检查存储后端创建结果。
oceanctl get backend
命令结果示例如下,后端状态为"Bound" 则创建成功。
NAMESPACE NAME PROTOCOL STORAGETYPE SN STATUS ONLINE URL huawei-csi backend-active nfs+ oceanstor-nas xxxxxxxxxxxxxxxxxxxx Bound true https://192.168.129.155:8088 huawei-csi backend-standby nfs+ oceanstor-nas xxxxxxxxxxxxxxxxxxxx Bound true https://192.168.129.158:8088
6.1.1.1.2 - Dtree
6.1.1.1.2.1 - NFS
本章节介绍创建NFS协议类型的存储后端
配置项说明
表 1 backend配置项说明
| ||||
| ||||
| ||||
| ||||
如果启用存储拓扑感知,需要配置该参数。具体请参考配置存储拓扑感知。 | ||||
|
创建存储后端
准备后端配置文件,如backend.yaml。
storage: "oceanstor-dtree" name: "backend-demo" namespace: "huawei-csi" urls: - "https://192.168.129.157:8088" parameters: protocol: "nfs" parentname: "parent-filesystem" portals: - "10.10.30.20" maxClientThreads: "30"
执行以下命令创建存储后端。
oceanctl create backend -f /path/to/backend.yaml -i yaml
命令结果示例如下:
NUMBER CONFIGURED NAME STORAGE URLS 1 false backend-demo oceanstor-dtree https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
输入待创建后端序号,并输入账号密码。
Please enter the backend number to configure (Enter 'exit' to exit):1 Please enter this backend user name: admin Please enter this backend password: Backend backend-demo is configured NUMBER CONFIGURED NAME STORAGE URLS 1 true backend-demo oceanstor-dtree https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
检查存储后端创建结果。
oceanctl get backend
命令结果示例如下,后端状态为Bound,则创建成功。
NAMESPACE NAME PROTOCOL STORAGETYPE SN STATUS ONLINE URL huawei-csi backend-demo nfs oceanstor-dtree xxxxxxxxxxxxxxxxxxxx Bound true https://192.168.129.157:8088
6.1.1.1.2.2 - NFS+
本章节介绍创建NFS+协议类型的存储后端
配置项说明
表 1 backend配置项说明
| ||||
| ||||
| ||||
| ||||
如果启用存储拓扑感知,需要配置该参数。具体请参考配置存储拓扑感知。 | ||||
|
创建存储后端
准备后端配置文件,如backend.yaml。
storage: "oceanstor-dtree" name: "backend-demo" namespace: "huawei-csi" urls: - "https://192.168.129.157:8088" parameters: protocol: "nfs+" parentname: "parent-filesystem" portals: - "10.10.30.20" - "10.10.30.30" maxClientThreads: "30"
执行以下命令创建存储后端。
oceanctl create backend -f /path/to/backend.yaml -i yaml
命令结果示例如下:
NUMBER CONFIGURED NAME STORAGE URLS 1 false backend-demo oceanstor-dtree https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
输入待创建后端序号,并输入账号密码。
Please enter the backend number to configure (Enter 'exit' to exit):1 Please enter this backend user name: admin Please enter this backend password: Backend backend-demo is configured NUMBER CONFIGURED NAME STORAGE URLS 1 true backend-demo oceanstor-dtree https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
检查存储后端创建结果。
oceanctl get backend
命令结果示例如下,后端状态为Bound,则创建成功。
NAMESPACE NAME PROTOCOL STORAGETYPE SN STATUS ONLINE URL huawei-csi backend-demo nfs+ oceanstor-dtree xxxxxxxxxxxxxxxxxxxx Bound true https://192.168.129.157:8088
6.1.1.1.3 - 块业务
6.1.1.1.3.1 - iSCSI
本章节介绍创建iSCSI协议类型的存储后端
配置项说明
表 1 backend配置项说明
| ||||
| ||||
| ||||
如果启用存储拓扑感知,需要配置该参数。具体请参考配置存储拓扑感知。 | ||||
|
创建存储后端
准备后端配置文件,如backend.yaml。
storage: "oceanstor-san" name: "backend-demo" namespace: "huawei-csi" urls: - "https://192.168.129.157:8088" pools: - "StoragePool001" parameters: protocol: "iscsi" portals: - "10.10.30.20" - "10.10.30.21" maxClientThreads: "30"
执行以下命令创建存储后端。
oceanctl create backend -f /path/to/backend.yaml -i yaml
命令结果示例如下:
NUMBER CONFIGURED NAME STORAGE URLS 1 false backend-demo oceanstor-san https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
输入待创建后端序号,并输入账号密码。
Please enter the backend number to configure (Enter 'exit' to exit):1 Please enter this backend user name: admin Please enter this backend password: Backend backend-demo is configured NUMBER CONFIGURED NAME STORAGE URLS 1 true backend-demo oceanstor-san https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
检查存储后端创建结果。
oceanctl get backend
命令结果示例如下,后端状态为Bound,则创建成功。
NAMESPACE NAME PROTOCOL STORAGETYPE SN STATUS ONLINE URL huawei-csi backend-demo iscsi oceanstor-san xxxxxxxxxxxxxxxxxxxx Bound true https://192.168.129.157:8088
6.1.1.1.3.2 - FC
本章节介绍创建FC协议类型的存储后端
配置项说明
表 1 backend配置项说明
| ||||
| ||||
如果启用存储拓扑感知,需要配置该参数。具体请参考配置存储拓扑感知。 | ||||
|
创建存储后端
准备后端配置文件,如backend.yaml。
storage: "oceanstor-san" name: "backend-demo" namespace: "huawei-csi" urls: - "https://192.168.129.157:8088" pools: - "StoragePool001" parameters: protocol: "fc" maxClientThreads: "30"
执行以下命令创建存储后端。
oceanctl create backend -f /path/to/backend.yaml -i yaml
命令结果示例如下:
NUMBER CONFIGURED NAME STORAGE URLS 1 false backend-demo oceanstor-san https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
输入待创建后端序号,并输入账号密码。
Please enter the backend number to configure (Enter 'exit' to exit):1 Please enter this backend user name: admin Please enter this backend password: Backend backend-demo is configured NUMBER CONFIGURED NAME STORAGE URLS 1 true backend-demo oceanstor-san https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
检查存储后端创建结果。
oceanctl get backend
命令结果示例如下,后端状态为Bound,则创建成功。
NAMESPACE NAME PROTOCOL STORAGETYPE SN STATUS ONLINE URL huawei-csi backend-demo fc oceanstor-san xxxxxxxxxxxxxxxxxxxx Bound true https://192.168.129.157:8088
6.1.1.1.3.3 - NVMe over RoCE
本章节介绍创建NVMe over RoCE协议类型的存储后端
配置项说明
表 1 backend配置项说明
| ||||
| ||||
| ||||
如果启用存储拓扑感知,需要配置该参数。具体请参考配置存储拓扑感知。 | ||||
|
创建存储后端
准备后端配置文件,如backend.yaml。
storage: "oceanstor-san" name: "backend-demo" namespace: "huawei-csi" urls: - "https://192.168.129.157:8088" pools: - "StoragePool001" parameters: protocol: "roce" portals: - "10.10.30.20" - "10.10.30.21" maxClientThreads: "30"
执行以下命令创建存储后端。
oceanctl create backend -f /path/to/backend.yaml -i yaml
命令结果示例如下:
NUMBER CONFIGURED NAME STORAGE URLS 1 false backend-demo oceanstor-san https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
输入待创建后端序号,并输入账号密码。
Please enter the backend number to configure (Enter 'exit' to exit):1 Please enter this backend user name: admin Please enter this backend password: Backend backend-demo is configured NUMBER CONFIGURED NAME STORAGE URLS 1 true backend-demo oceanstor-san https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
检查存储后端创建结果。
oceanctl get backend
命令结果示例如下,后端状态为Bound,则创建成功。
NAMESPACE NAME PROTOCOL STORAGETYPE SN STATUS ONLINE URL huawei-csi backend-demo roce oceanstor-san xxxxxxxxxxxxxxxxxxxx Bound true https://192.168.129.157:8088
6.1.1.1.3.4 - FC-NVMe
本章节介绍创建FC-NVMe协议类型的存储后端
配置项说明
表 1 backend配置项说明
| ||||
| ||||
如果启用存储拓扑感知,需要配置该参数。具体请参考配置存储拓扑感知。 | ||||
|
创建存储后端
准备后端配置文件,如backend.yaml。
storage: "oceanstor-san" name: "backend-demo" namespace: "huawei-csi" urls: - "https://192.168.129.157:8088" pools: - "StoragePool001" parameters: protocol: "fc-nvme" maxClientThreads: "30"
执行以下命令创建存储后端。
oceanctl create backend -f /path/to/backend.yaml -i yaml
命令结果示例如下:
NUMBER CONFIGURED NAME STORAGE URLS 1 false backend-demo oceanstor-san https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
输入待创建后端序号,并输入账号密码。
Please enter the backend number to configure (Enter 'exit' to exit):1 Please enter this backend user name: admin Please enter this backend password: Backend backend-demo is configured NUMBER CONFIGURED NAME STORAGE URLS 1 true backend-demo oceanstor-san https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
检查存储后端创建结果。
oceanctl get backend
命令结果示例如下,后端状态为Bound,则创建成功。
NAMESPACE NAME PROTOCOL STORAGETYPE SN STATUS ONLINE URL huawei-csi backend-demo fc-nvme oceanstor-san xxxxxxxxxxxxxxxxxxxx Bound true https://192.168.129.157:8088
6.1.1.2 - 闪存存储(OceanStor A600/A800)
6.1.1.2.1 - 本地文件系统
6.1.1.2.1.1 - NFS
本章节介绍创建NFS协议类型的存储后端
配置项说明
表 1 backend配置项说明
| ||||
如果启用存储拓扑感知,需要配置该参数。具体请参考配置存储拓扑感知。 | ||||
|
创建存储后端
准备后端配置文件,如backend.yaml。
storage: "oceanstor-a-series-nas" name: "backend-demo" namespace: "huawei-csi" urls: - "https://192.168.129.157:8088" pools: - "StoragePool001" parameters: protocol: "nfs" portals: - "10.10.30.20" maxClientThreads: "30"
执行以下命令创建存储后端。
oceanctl create backend -f /path/to/backend.yaml -i yaml
命令结果示例如下:
NUMBER CONFIGURED NAME STORAGE URLS 1 false backend-demo oceanstor-a-series-nas https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
输入待创建后端序号,并输入账号密码。
Please enter the backend number to configure (Enter 'exit' to exit):1 Please enter this backend user name: admin Please enter this backend password: Backend backend-demo is configured NUMBER CONFIGURED NAME STORAGE URLS 1 true backend-demo oceanstor-a-series-nas https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
检查存储后端创建结果。
oceanctl get backend
命令结果示例如下,后端状态为Bound,则创建成功。
NAMESPACE NAME PROTOCOL STORAGETYPE SN STATUS ONLINE URL huawei-csi backend-demo nfs oceanstor-a-series-nas xxxxxxxxxxxxxxxxxxxx Bound true https://192.168.129.157:8088
6.1.1.2.1.2 - DataTurbo
本章节介绍创建DataTurbo协议类型的存储后端
配置项说明
表 1 backend配置项说明
| ||||
如果启用存储拓扑感知,需要配置该参数。具体请参考配置存储拓扑感知。 | ||||
|
创建存储后端
准备后端配置文件,如backend.yaml。
storage: "oceanstor-a-series-nas" name: "backend-demo" namespace: "huawei-csi" urls: - "https://192.168.129.157:8088" pools: - "StoragePool001" parameters: protocol: "dtfs" maxClientThreads: "30"
执行以下命令创建存储后端。
oceanctl create backend -f /path/to/backend.yaml -i yaml
命令结果示例如下:
NUMBER CONFIGURED NAME STORAGE URLS 1 false backend-demo oceanstor-a-series-nas https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
输入待创建后端序号,并输入账号密码。
Please enter the backend number to configure (Enter 'exit' to exit):1 Please enter this backend user name: admin Please enter this backend password: Backend backend-demo is configured NUMBER CONFIGURED NAME STORAGE URLS 1 true backend-demo oceanstor-a-series-nas https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
检查存储后端创建结果。
oceanctl get backend
命令结果示例如下,后端状态为Bound,则创建成功。
NAMESPACE NAME PROTOCOL STORAGETYPE SN STATUS ONLINE URL huawei-csi backend-demo dtfs oceanstor-a-series-nas xxxxxxxxxxxxxxxxxxxx Bound true https://192.168.129.157:8088
6.1.1.3 - 海量存储(OceanStor Pacific系列)
6.1.1.3.1 - 命名空间
6.1.1.3.1.1 - NFS
本章节介绍创建NFS协议类型的存储后端
配置项说明
表 1 backend配置项说明
| ||||
| ||||
如果启用存储拓扑感知,需要配置该参数。具体请参考配置存储拓扑感知。 | ||||
创建存储后端
准备后端配置文件,如backend.yaml。
storage: "fusionstorage-nas" name: "backend-demo" namespace: "huawei-csi" urls: - "https://192.168.129.157:8088" pools: - "StoragePool001" parameters: protocol: "nfs" portals: - "10.10.30.20" maxClientThreads: "30"
执行以下命令创建存储后端。
oceanctl create backend -f /path/to/backend.yaml -i yaml
命令结果示例如下:
NUMBER CONFIGURED NAME STORAGE URLS 1 false backend-demo fusionstorage-nas https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
输入待创建后端序号,并输入账号密码。
Please enter the backend number to configure (Enter 'exit' to exit):1 Please enter this backend user name: admin Please enter this backend password: Backend backend-demo is configured NUMBER CONFIGURED NAME STORAGE URLS 1 true backend-demo fusionstorage-nas https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
检查存储后端创建结果。
oceanctl get backend
命令结果示例如下,后端状态为Bound,则创建成功。
NAMESPACE NAME PROTOCOL STORAGETYPE SN STATUS ONLINE URL huawei-csi backend-demo nfs fusionstorage-nas Bound true https://192.168.129.157:8088
6.1.1.3.1.2 - DPC
本章节介绍创建DPC协议类型的存储后端
配置项说明
表 1 backend配置项说明
| ||||
如果启用存储拓扑感知,需要配置该参数。具体请参考配置存储拓扑感知。 | ||||
创建存储后端
准备后端配置文件,如backend.yaml。
storage: "fusionstorage-nas" name: "backend-demo" namespace: "huawei-csi" urls: - "https://192.168.129.157:8088" pools: - "StoragePool001" parameters: protocol: "dpc" maxClientThreads: "30"
执行以下命令创建存储后端。
oceanctl create backend -f /path/to/backend.yaml -i yaml
命令结果示例如下:
NUMBER CONFIGURED NAME STORAGE URLS 1 false backend-demo fusionstorage-nas https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
输入待创建后端序号,并输入账号密码。
Please enter the backend number to configure (Enter 'exit' to exit):1 Please enter this backend user name: admin Please enter this backend password: Backend backend-demo is configured NUMBER CONFIGURED NAME STORAGE URLS 1 true backend-demo fusionstorage-nas https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
检查存储后端创建结果。
oceanctl get backend
命令结果示例如下,后端状态为Bound,则创建成功。
NAMESPACE NAME PROTOCOL STORAGETYPE SN STATUS ONLINE URL huawei-csi backend-demo dpc fusionstorage-nas Bound true https://192.168.129.157:8088
6.1.1.3.2 - Dtree
6.1.1.3.2.1 - NFS
本章节介绍创建NFS协议类型的存储后端
配置项说明
表 1 backend配置项说明
| ||||
| ||||
| ||||
如果启用存储拓扑感知,需要配置该参数。具体请参考配置存储拓扑感知。 | ||||
创建存储后端
准备后端配置文件,如backend.yaml。
storage: "fusionstorage-dtree" name: "backend-demo" namespace: "huawei-csi" urls: - "https://192.168.129.157:8088" parameters: protocol: "nfs" parentname: "parent-filesystem" portals: - "10.10.30.20" maxClientThreads: "30"
执行以下命令创建存储后端。
oceanctl create backend -f /path/to/backend.yaml -i yaml
命令结果示例如下:
NUMBER CONFIGURED NAME STORAGE URLS 1 false backend-demo fusionstorage-dtree https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
输入待创建后端序号,并输入账号密码。
Please enter the backend number to configure (Enter 'exit' to exit):1 Please enter this backend user name: admin Please enter this backend password: Backend backend-demo is configured NUMBER CONFIGURED NAME STORAGE URLS 1 true backend-demo fusionstorage-dtree https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
检查存储后端创建结果。
oceanctl get backend
命令结果示例如下,后端状态为Bound,则创建成功。
NAMESPACE NAME PROTOCOL STORAGETYPE SN STATUS ONLINE URL huawei-csi backend-demo nfs fusionstorage-dtree Bound true https://192.168.129.157:8088
6.1.1.3.2.2 - DPC
本章节介绍创建DPC协议类型的存储后端
配置项说明
表 1 backend配置项说明
|
| |||
| ||||
如果启用存储拓扑感知,需要配置该参数。具体请参考配置存储拓扑感知。 | ||||
创建存储后端
准备后端配置文件,如backend.yaml。
storage: "fusionstorage-dtree" name: "backend-demo" namespace: "huawei-csi" urls: - "https://192.168.129.157:8088" parameters: protocol: "dpc" parentname: "parent-filesystem" maxClientThreads: "30"
执行以下命令创建存储后端。
oceanctl create backend -f /path/to/backend.yaml -i yaml
命令结果示例如下:
NUMBER CONFIGURED NAME STORAGE URLS 1 false backend-demo fusionstorage-dtree https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
输入待创建后端序号,并输入账号密码。
Please enter the backend number to configure (Enter 'exit' to exit):1 Please enter this backend user name: admin Please enter this backend password: Backend backend-demo is configured NUMBER CONFIGURED NAME STORAGE URLS 1 true backend-demo fusionstorage-dtree https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
检查存储后端创建结果。
oceanctl get backend
命令结果示例如下,后端状态为Bound,则创建成功。
NAMESPACE NAME PROTOCOL STORAGETYPE SN STATUS ONLINE URL huawei-csi backend-demo dpc fusionstorage-dtree Bound true https://192.168.129.157:8088
6.1.1.3.3 - 块业务
6.1.1.3.3.1 - iSCSI
本章节介绍创建iSCSI协议类型的存储后端
配置项说明
表 1 backend配置项说明
| ||||
| ||||
如果启用存储拓扑感知,需要配置该参数。具体请参考配置存储拓扑感知。 | ||||
创建存储后端
准备后端配置文件,如backend.yaml。
storage: "fusionstorage-san" name: "backend-demo" namespace: "huawei-csi" urls: - "https://192.168.129.157:8088" pools: - "StoragePool001" parameters: protocol: "iscsi" portals: - "10.10.30.20" - "10.10.30.21" maxClientThreads: "30"
执行以下命令创建存储后端。
oceanctl create backend -f /path/to/backend.yaml -i yaml
命令结果示例如下:
NUMBER CONFIGURED NAME STORAGE URLS 1 false backend-demo fusionstorage-san https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
输入待创建后端序号,并输入账号密码。
Please enter the backend number to configure (Enter 'exit' to exit):1 Please enter this backend user name: admin Please enter this backend password: Backend backend-demo is configured NUMBER CONFIGURED NAME STORAGE URLS 1 true backend-demo fusionstorage-san https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
检查存储后端创建结果。
oceanctl get backend
命令结果示例如下,后端状态为Bound,则创建成功。
NAMESPACE NAME PROTOCOL STORAGETYPE SN STATUS ONLINE URL huawei-csi backend-demo iscsi fusionstorage-san Bound true https://192.168.129.157:8088
6.1.1.3.3.2 - SCSI
本章节介绍创建SCSI协议类型的存储后端
配置项说明
表 1 backend配置项说明
| ||||
如果启用存储拓扑感知,需要配置该参数。具体请参考配置存储拓扑感知。 | ||||
创建存储后端
准备后端配置文件,如backend.yaml。
storage: "fusionstorage-san" name: "backend-demo" namespace: "huawei-csi" urls: - "https://192.168.129.157:8088" pools: - "StoragePool001" parameters: protocol: "scsi" portals: - {"hostname01": "192.168.125.21","hostname02": "192.168.125.22"} maxClientThreads: "30"
执行以下命令创建存储后端。
oceanctl create backend -f /path/to/backend.yaml -i yaml
命令结果示例如下:
NUMBER CONFIGURED NAME STORAGE URLS 1 false backend-demo fusionstorage-san https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
输入待创建后端序号,并输入账号密码。
Please enter the backend number to configure (Enter 'exit' to exit):1 Please enter this backend user name: admin Please enter this backend password: Backend backend-demo is configured NUMBER CONFIGURED NAME STORAGE URLS 1 true backend-demo fusionstorage-san https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
检查存储后端创建结果。
oceanctl get backend
命令结果示例如下,后端状态为Bound,则创建成功。
NAMESPACE NAME PROTOCOL STORAGETYPE SN STATUS ONLINE URL huawei-csi backend-demo scsi fusionstorage-san Bound true https://192.168.129.157:8088
6.1.1.4 - 海量存储(OceanDisk系列)
6.1.1.4.1 - 文件系统
6.1.1.4.1.1 - NFS
本章节介绍创建NFS协议类型的存储后端
配置项说明
表 1 backend配置项说明
| ||||
如果启用存储拓扑感知,需要配置该参数。具体请参考配置存储拓扑感知。 | ||||
创建本地类型存储后端
准备后端配置文件,如backend.yaml。
storage: "oceanstor-nas" name: "backend-demo" namespace: "huawei-csi" urls: - "https://192.168.129.157:8088" pools: - "StoragePool001" parameters: protocol: "nfs" portals: - "10.10.30.20" maxClientThreads: "30"
执行以下命令创建存储后端。
oceanctl create backend -f /path/to/backend.yaml -i yaml
命令结果示例如下:
NUMBER CONFIGURED NAME STORAGE URLS 1 false backend-demo oceanstor-nas https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
输入待创建后端序号,并输入账号密码。
Please enter the backend number to configure (Enter 'exit' to exit):1 Please enter this backend user name: admin Please enter this backend password: Backend backend-demo is configured NUMBER CONFIGURED NAME STORAGE URLS 1 true backend-demo oceanstor-nas https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
检查存储后端创建结果。
oceanctl get backend
命令结果示例如下,后端状态为Bound,则创建成功。
NAMESPACE NAME PROTOCOL STORAGETYPE SN STATUS ONLINE URL huawei-csi backend-demo nfs oceanstor-nas xxxxxxxxxxxxxxxxxxxx Bound true https://192.168.129.157:8088
6.1.1.4.2 - 块业务
6.1.1.4.2.1 - iSCSI
本章节介绍创建iSCSI协议类型的存储后端
配置项说明
表 1 backend配置项说明
| ||||
如果启用存储拓扑感知,需要配置该参数。具体请参考配置存储拓扑感知。 | ||||
创建存储后端
准备后端配置文件,如backend.yaml。
storage: "oceandisk-san" name: "backend-demo" namespace: "huawei-csi" urls: - "https://192.168.129.157:8088" pools: - "StoragePool001" parameters: protocol: "iscsi" portals: - "10.10.30.20" - "10.10.30.21" maxClientThreads: "30"
执行以下命令创建存储后端。
oceanctl create backend -f /path/to/backend.yaml -i yaml
命令结果示例如下:
NUMBER CONFIGURED NAME STORAGE URLS 1 false backend-demo oceandisk-san https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
输入待创建后端序号,并输入账号密码。
Please enter the backend number to configure (Enter 'exit' to exit):1 Please enter this backend user name: admin Please enter this backend password: Backend backend-demo is configured NUMBER CONFIGURED NAME STORAGE URLS 1 true backend-demo oceandisk-san https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
检查存储后端创建结果。
oceanctl get backend
命令结果示例如下,后端状态为Bound,则创建成功。
NAMESPACE NAME PROTOCOL STORAGETYPE SN STATUS ONLINE URL huawei-csi backend-demo iscsi oceandisk-san xxxxxxxxxxxxxxxxxxxx Bound true https://192.168.129.157:8088
6.1.1.4.2.2 - FC
本章节介绍创建FC协议类型的存储后端
配置项说明
表 1 backend配置项说明
| ||||
如果启用存储拓扑感知,需要配置该参数。具体请参考配置存储拓扑感知。 | ||||
创建存储后端
准备后端配置文件,如backend.yaml。
storage: "oceandisk-san" name: "backend-demo" namespace: "huawei-csi" urls: - "https://192.168.129.157:8088" pools: - "StoragePool001" parameters: protocol: "fc" maxClientThreads: "30"
执行以下命令创建存储后端。
oceanctl create backend -f /path/to/backend.yaml -i yaml
命令结果示例如下:
NUMBER CONFIGURED NAME STORAGE URLS 1 false backend-demo oceandisk-san https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
输入待创建后端序号,并输入账号密码。
Please enter the backend number to configure (Enter 'exit' to exit):1 Please enter this backend user name: admin Please enter this backend password: Backend backend-demo is configured NUMBER CONFIGURED NAME STORAGE URLS 1 true backend-demo oceandisk-san https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
检查存储后端创建结果。
oceanctl get backend
命令结果示例如下,后端状态为Bound,则创建成功。
NAMESPACE NAME PROTOCOL STORAGETYPE SN STATUS ONLINE URL huawei-csi backend-demo fc oceandisk-san xxxxxxxxxxxxxxxxxxxx Bound true https://192.168.129.157:8088
6.1.1.4.2.3 - NVMe over RoCE
本章节介绍创建NVMe over RoCE协议类型的存储后端
配置项说明
表 1 backend配置项说明
| ||||
如果启用存储拓扑感知,需要配置该参数。具体请参考配置存储拓扑感知。 | ||||
创建存储后端
准备后端配置文件,如backend.yaml。
storage: "oceandisk-san" name: "backend-demo" namespace: "huawei-csi" urls: - "https://192.168.129.157:8088" pools: - "StoragePool001" parameters: protocol: "roce" portals: - "10.10.30.20" - "10.10.30.21" maxClientThreads: "30"
执行以下命令创建存储后端。
oceanctl create backend -f /path/to/backend.yaml -i yaml
命令结果示例如下:
NUMBER CONFIGURED NAME STORAGE URLS 1 false backend-demo oceandisk-san https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
输入待创建后端序号,并输入账号密码。
Please enter the backend number to configure (Enter 'exit' to exit):1 Please enter this backend user name: admin Please enter this backend password: Backend backend-demo is configured NUMBER CONFIGURED NAME STORAGE URLS 1 true backend-demo oceandisk-san https://192.168.129.157:8088 Please enter the backend number to configure (Enter 'exit' to exit):
检查存储后端创建结果。
oceanctl get backend
命令结果示例如下,后端状态为Bound,则创建成功。
NAMESPACE NAME PROTOCOL STORAGETYPE SN STATUS ONLINE URL huawei-csi backend-demo roce oceandisk-san xxxxxxxxxxxxxxxxxxxx Bound true https://192.168.129.157:8088
6.1.2 - 管理存储后端
6.1.2.1 - 查询存储后端
执行以下命令获取查询后端帮助。
oceanctl get backend -h
执行以下命令查询默认命名空间下单个存储后端。
oceanctl get backend <backend-name>
执行以下命令查询指定命名空间下所有存储后端。
oceanctl get backend -n <namespace>
执行以下命令格式化输出,当前支持json,yaml和wide。
oceanctl get backend <backend-name> -o json
6.1.2.2 - 更新存储后端
- 当前使用oceanctl更新存储后端信息时,仅支持更新存储后端密码以及登录存储后端的认证模式。
- 若在存储侧更新了后端的账号密码,CSI插件会因登录失败而重试,可能会导致账号被锁定。如果账号被锁定,请参考 存储侧更新密码后账户被锁定 章节修改。
6.1.2.2.1 - 更新存储后端密码
获取更新后端帮助信息
执行以下命令获取更新存储后端帮助。
oceanctl update backend -h
命令结果示例如下:
Update a backend for Ocean Storage in Kubernetes Usage: oceanctl update backend <name> [flags] Examples: # Update backend account information in default(huawei-csi) namespace oceanctl update backend <name> --password # Update backend account information in specified namespace oceanctl update backend <name> -n namespace --password # Update backend account information with ldap authentication mode in default(huawei-csi) namespace oceanctl update backend <name> --password --authenticationMode=ldap # Update backend account information with local authentication mode in default(huawei-csi) namespace oceanctl update backend <name> --password --authenticationMode=local # Update backend account information with ldap authentication mode in specified namespace oceanctl update backend <name> -n namespace --password --authenticationMode=ldap Flags: --authenticationMode string Specify authentication mode -h, --help help for backend -n, --namespace string namespace of resources --password Update account password Global Flags: --log-dir string Specify the directory for printing log files. (default "/var/log/huawei")
更新后端密码示例
执行以下命令更新存储后端信息,其中backend-name为待更新后端名称。
oceanctl update backend backend-name --password
根据提示输入用户名和新密码:
Please enter this backend user name:admin Please enter this backend password: backend/backend-name updated
6.1.2.2.2 - 更新存储后端登陆认证模式
更新后端登录认证类型为LDAP示例
执行以下命令更新存储后端信息,其中backend-name为待更新后端名称。
oceanctl update backend backend-name --password --authenticationMode=ldap
根据提示输入用户名和新密码:
Please enter this backend user name:admin Please enter this backend password: backend/backend-name updated
6.1.2.2.3 - 更新存储后端信息
- PVC发放需要基于已配置的存储后端,因此当存储后端已经发放PVC时,请勿随便修改存储后端。
- 名称是存储后端的唯一标识,已发放PVC的存储后端不允许修改名称。
- 存储后端修改后,新增配置仅作用于新发放的卷。
- 存储后端修改期间,请勿执行卷管理操作。
操作步骤
6.1.2.3 - 删除存储后端
正在执行卷管理操作期间,请勿删除存储后端。
删除后端示例
执行以下命令获取存储后端。
oceanctl get backend
命令结果示例如下:
NAMESPACE NAME PROTOCOL STORAGETYPE SN STATUS ONLINE URL huawei-csi backend-1 roce oceanstor-san xxxxxxxxxxxxxxxxxxxx Bound true https://192.168.129.157:8088 huawei-csi backend-2 roce oceanstor-san xxxxxxxxxxxxxxxxxxxx Bound true https://192.168.129.158:8088
执行以下命令删除指定存储后端。
oceanctl delete backend backend-1
执行以下命令检查删除结果。
oceanctl get backend backend-1
命令结果示例如下,如果回显为“not found”则删除成功。
Error from server (NotFound): backend "backend-1" not found
6.1.2.4 - 添加存储后端证书
前提条件
完成证书制作。以OceanStor Dorado为例,证书制作过程请参考: 点此前往 。
创建证书示例
提前准备好证书文件,如cert.crt。
执行以下命令获取存储后端。
oceanctl get backend
命令结果示例如下:
NAMESPACE NAME PROTOCOL STORAGETYPE SN STATUS ONLINE URL huawei-csi backend-1 roce oceanstor-san xxxxxxxxxxxxxxxxxxxx Bound true https://192.168.129.157:8088 huawei-csi backend-2 roce oceanstor-san xxxxxxxxxxxxxxxxxxxx Bound true https://192.168.129.158:8088
执行以下命令为指定存储后端创建证书。
oceanctl create cert cert-1 -b backend-1 -f /path/to/cert.crt
检查证书创建结果。
oceanctl get cert -b backend-1
命令结果示例如下:
NAMESPACE NAME BOUNDBACKEND huawei-csi cert-1 backend-1
6.1.2.5 - 移除存储后端证书
操作步骤
执行以下命令获取存储后端。
oceanctl get backend
命令结果示例如下:
NAMESPACE NAME PROTOCOL STORAGETYPE SN STATUS ONLINE URL huawei-csi backend-1 roce oceanstor-san xxxxxxxxxxxxxxxxxxxx Bound true https://192.168.129.157:8088 huawei-csi backend-2 roce oceanstor-san xxxxxxxxxxxxxxxxxxxx Bound true https://192.168.129.158:8088
执行以下命令获取指定存储后端的证书。
oceanctl get cert -b backend-1
命令结果示例如下:
NAMESPACE NAME BOUNDBACKEND huawei-csi cert-1 backend-1
执行以下命令删除指定存储后端的证书。
oceanctl delete cert -b backend-1
检查删除结果。
oceanctl get cert -b backend-1
命令结果示例如下,如果回显为“no cert found”则删除成功。
Error from server (NotFound): no cert found on backend backend-1 in huawei-csi namespace
6.2 - 存储类管理
存储类(StorageClass) 为管理员提供了描述存储 “类” 的方法。 不同的类型可能会映射到一组不同的能力定义。Kubernetes集群用户可基于存储类进行动态卷制备。
6.2.1 - 配置存储类
集群管理员可以根据需要定义多个存储类对象,在声明配置持久卷时,需要指定满足业务要求的存储类。华为CSI在从华为存储设备上申请资源时,会根据存储类的预置定义,创建满足业务要求的存储资源。
6.2.1.1 - 闪存存储(OceanStor Dorado/OceanStor V5/OceanStor V6及以后)
6.2.1.1.1 - 文件系统
创建存储类
准备存储类配置文件,如本例中的mysc.yaml文件,存储类配置请参考下方示例文件。
执行命令,使用配置文件创建StorageClass。
kubectl apply -f mysc.yaml
执行命令,查看已创建的StorageClass信息。
kubectl get sc mysc
命令结果示例如下:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE mysc csi.huawei.com Delete Immediate true 8s
NFS协议配置示例
容器使用NFS协议对接文件系统资源时,可以参考如下存储类配置示例。该示例中,NFS挂载时指定版本为4.1。
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: mysc
provisioner: csi.huawei.com
parameters:
backend: nfs-nas-181
pool: StoragePool001
volumeType: fs
allocType: thin
authClient: "*"
mountOptions:
- nfsvers=4.1 # NFS挂载时指定版本为4.1
NFS+协议配置示例
容器使用NFS+协议对接文件系统资源时,可以参考如下存储类配置示例。
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: mysc
provisioner: csi.huawei.com
parameters:
backend: nfs-nas-181
pool: StoragePool001
volumeType: fs
allocType: thin
authClient: "*"
双活文件系统配置示例
容器使用NFS双活文件系统作为存储资源时,可以参考如下配置示例。该示例中,使用的后端是支持双活的后端,且配置“hyperMetro”参数为“true”。
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: mysc
provisioner: csi.huawei.com
parameters:
backend: nfs-hypermetro-dorado-181
pool: pool001
volumeType: fs
hyperMetro: "true" # 发放双活卷
allocType: thin
authClient: "*"
- 发放NAS双活卷前,需要在两台存储设备之间配置双活关系,包含远端设备、双活域等,仅支持文件系统双活域工作模式为双活AA模式,配置操作请参考对应存储型号的产品文档。
- 若存储发生故障,逻辑管理端口可能产生漂移,在漂移状态下删除NAS双活卷后,需手动清理对应的存储资源。
文件系统支持的存储类参数详细说明
表 1 StorageClass配置参数说明
以Kubernetes v1.22.1为例,支持数字、小写字母、中划线(-)和点(.)的组合,并且必须以字母数字开头和结尾。 | |||||
|
| ||||
常见的mountOptions参数参考表2。 | |||||
如果不设置,华为CSI会在所选后端上随机选择一个满足容量要求的存储池创建资源。建议指定存储池,确保创建的资源在预期的存储池上。 | |||||
|
PVC命名空间为:"namespace",PVC名称为:"pvc-1",PVC UID:"c2fd3f46-bf17-4a7d-b88e-2e3232bae434"。 volumeName配置为: "prefix-{{ .PVCNamespace }}_{{ .PVCName }}"。 最终存储资源名称为:"prefix-namespace_pvc-1-c2fd3f46bf174a7db88e2e3232bae434"。 | ||||
| |||||
| |||||
可以使用“*”表示任意客户端。当您不确定访问客户端IP信息时,建议使用“*”防止客户端访问被存储拒绝。 可以同时输入多个主机名称、IP地址或IP地址段,以英文分号隔开。如示例:"192.168.0.10;192.168.0.0/24;myserver1.test" | |||||
在DeviceManager管理界面,选择“服务 > 文件服务 > 文件系统 > 创建 > 应用类型”,获取应用类型名称。 | |||||
配置项值是字典格式的JSON字符串(字符串两边由单引号修饰,字典key由双引号修饰)。如:'{"maxMBPS": 999, "maxIOPS": 999}' | 支持的QoS配置请参考表3说明。 | ||||
| 当使用的后端是双活类型的后端,且需要发放双活卷时,设置该参数为"true",若设置为"false",在后端对接的逻辑管理端口漂移的场景下,有业务中断的风险。 | ||||
|
| ||||
| |||||
| |||||
| |||||
| |||||
| |||||
| |||||
是否禁用卷容量校验,禁用后将不校验卷容量是否为扇区大小整数倍。
| |||||
配置项值是字典格式的JSON字符串(字符串两边由单引号修饰,字典key由双引号修饰)。如:'{"CAPACITYTHRESHOLD": 90}' | 支持的高级参数列表请参考表4说明。 |
表 2 常用mountOptions参数说明
表 3 支持的QoS配置
可选参数(未明确指定将使用后端存储默认值,具体参考相关存储资料)。
| |||
| |||
表 4 支持的高级创卷参数
6.2.1.1.2 - Dtree
创建存储类
准备存储类配置文件,如本例中的mysc.yaml文件,存储类配置请参考下方示例文件。
执行命令,使用配置文件创建StorageClass。
kubectl apply -f mysc.yaml
执行命令,查看已创建的StorageClass信息。
kubectl get sc mysc
命令结果示例如下:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE mysc csi.huawei.com Delete Immediate true 8s
NFS协议支持的存储类配置示例
容器使用NFS协议对接Dtree资源时,可以参考如下存储类配置示例。该示例中,NFS挂载时指定版本为4.1。
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: mysc
provisioner: csi.huawei.com
parameters:
backend: nfs-dtree-181
parentname: parent-filesystem-name
volumeType: dtree
allocType: thin
authClient: "*"
mountOptions:
- nfsvers=4.1 # NFS挂载时指定版本为4.1
NFS+协议支持的存储类配置示例
容器使用NFS+协议对接Dtree资源时,可以参考如下存储类配置示例。
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: mysc
provisioner: csi.huawei.com
parameters:
backend: nfs-dtree-181
parentname: parent-filesystem-name
volumeType: dtree
allocType: thin
authClient: "*"
Dtree支持的存储类参数详细说明
表 1 StorageClass配置参数说明
以Kubernetes v1.22.1为例,支持数字、小写字母、中划线(-)和点(.)的组合,并且必须以字母数字开头和结尾。 | ||||
|
| |||
常见的mountOptions参数参考表2。 | ||||
若仅在StorageClass中配置了parentname,而存储后端中未配置时,要求在安装CSI时将CSIDriverObject.attachRequired设置为true。 | ||||
|
PVC命名空间为:"namespace",PVC名称为:"pvc-1",PVC UID:"c2fd3f46-bf17-4a7d-b88e-2e3232bae434"。 volumeName配置为: "prefix-{{ .PVCNamespace }}_{{ .PVCName }}"。 最终存储资源名称为:"prefix-namespace_pvc-1-c2fd3f46bf174a7db88e2e3232bae434"。 | |||
| ||||
可以使用“*”表示任意客户端。当您不确定访问客户端IP信息时,建议使用“*”防止客户端访问被存储拒绝。 可以同时输入多个主机名称、IP地址或IP地址段,以英文分号隔开。如示例:"192.168.0.10;192.168.0.0/24;myserver1.test" | ||||
| ||||
| ||||
| ||||
| ||||
| ||||
是否禁用卷容量校验,禁用后将不校验卷容量是否为扇区大小整数倍。
| ||||
表 2 常用mountOptions参数说明
6.2.1.1.3 - 块业务
创建存储类
准备存储类配置文件,如本例中的mysc.yaml文件,存储类配置请参考下方示例文件。
执行命令,使用配置文件创建StorageClass。
kubectl apply -f mysc.yaml
执行命令,查看已创建的StorageClass信息。
kubectl get sc mysc
命令结果示例如下:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE mysc csi.huawei.com Delete Immediate true 8s
块业务存储类配置示例
使用LUN作为存储资源时,且需要格式化文件系统为本地文件系统时,可以参考如下示例。
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: mysc
provisioner: csi.huawei.com
parameters:
backend: lun-181
pool: StoragePool001
volumeType: lun
allocType: thin
fsType: ext4
块业务支持的存储类参数详细说明
表 1 StorageClass配置参数说明
以Kubernetes v1.22.1为例,支持数字、小写字母、中划线(-)和点(.)的组合,并且必须以字母数字开头和结尾。 | |||||
|
| ||||
常见的mountOptions参数参考表2。 | |||||
如果不设置,华为CSI会在所选后端上随机选择一个满足容量要求的存储池创建资源。建议指定存储池,确保创建的资源在预期的存储池上。 | |||||
|
PVC命名空间为:"namespace",PVC名称为:"pvc-1",PVC UID:"c2fd3f46-bf17-4a7d-b88e-2e3232bae434"。 volumeName配置为: "prefix-{{ .PVCNamespace }}_{{ .PVCName }}"。 最终存储资源名称为:"prefix-namespace_pvc-1-c2fd3f46bf174a7db88e2e3232bae434"。 | ||||
| |||||
| |||||
| |||||
在DeviceManager管理界面,选择“服务 > 块服务 > LUN组 (Namespace组)> LUN (Namespace)> 创建 > 应用类型”,获取应用类型名称。 | |||||
配置项值是字典格式的JSON字符串(字符串两边由单引号修饰,字典key由双引号修饰)。如:'{"maxMBPS": 999, "maxIOPS": 999}' | 支持的QoS配置请参考表3说明。 | ||||
是否禁用卷容量校验,禁用后将不校验卷容量是否为扇区大小整数倍。
| |||||
表 2 常用mountOptions参数说明
表 3 支持的QoS配置
| ||
6.2.1.2 - 闪存存储(OceanStor A600/A800)
6.2.1.2.1 - 文件系统
创建存储类
准备存储类配置文件,如本例中的mysc.yaml文件,存储类配置请参考下方示例文件。
执行命令,使用配置文件创建StorageClass。
kubectl apply -f mysc.yaml
执行命令,查看已创建的StorageClass信息。
kubectl get sc mysc
命令结果示例如下:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE mysc csi.huawei.com Delete Immediate true 8s
NFS协议配置示例
容器使用NFS协议对接文件系统资源时,可以参考如下存储类配置示例。该示例中,NFS挂载时指定版本为4.1。
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: mysc
provisioner: csi.huawei.com
parameters:
backend: nfs-nas-181
pool: StoragePool001
volumeType: fs
allocType: thin
authClient: "*"
mountOptions:
- nfsvers=4.1 # NFS挂载时指定版本为4.1
DataTurbo协议配置示例
当容器使用OceanStor A系列存储,且存储支持DataTurbo协议访问时,可以参考如下配置示例。该示例中,DataTurbo共享用户名为user01。
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: mysc
provisioner: csi.huawei.com
parameters:
backend: dtfs-nas-181
pool: pool001
volumeType: fs
allocType: thin
authUser: user01
文件业务支持的存储类参数详细说明
表 1 StorageClass配置参数说明
以Kubernetes v1.22.1为例,支持数字、小写字母、中划线(-)和点(.)的组合,并且必须以字母数字开头和结尾。 | |||||
|
| ||||
常见的mountOptions参数参考表2。 | |||||
如果不设置,华为CSI会在所选后端上随机选择一个满足容量要求的存储池创建资源。建议指定存储池,确保创建的资源在预期的存储池上。 | |||||
|
PVC命名空间为:"namespace",PVC名称为:"pvc-1",PVC UID:"c2fd3f46-bf17-4a7d-b88e-2e3232bae434"。 volumeName配置为: "prefix-{{ .PVCNamespace }}_{{ .PVCName }}"。 最终存储资源名称为:"prefix-namespace_pvc-1-c2fd3f46bf174a7db88e2e3232bae434"。 | ||||
| |||||
| |||||
可以使用“*”表示任意客户端。当您不确定访问客户端IP信息时,建议使用“*”防止客户端访问被存储拒绝。 可以同时输入多个主机名称、IP地址或IP地址段,以英文分号隔开。如示例:"192.168.0.10;192.168.0.0/24;myserver1.test" | |||||
可以同时输入多个DataTurbo用户,以英文分号隔开。如示例:"auth_user1;auth_user2;auth_user3" | |||||
在DeviceManager管理界面,选择“服务 > 文件服务 > 文件系统 > 创建 > 应用类型”,获取应用类型名称。 | |||||
| |||||
| |||||
是否禁用卷容量校验,禁用后将不校验卷容量是否为扇区大小整数倍。
| |||||
配置项值是字典格式的JSON字符串(字符串两边由单引号修饰,字典key由双引号修饰)。如:'{"CAPACITYTHRESHOLD": 90}' | 支持的高级参数列表请参考表3说明。 |
表 2 常用mountOptions参数说明
指定NFS版本挂载时,当前支持NFS 3/4.0/4.1/4.2协议(需存储设备支持且开启)。当配置参数为nfsvers=4时,因为操作系统配置的不同,实际挂载可能为NFS 4的最高版本协议,如4.2,当需要使用4.0协议时,建议配置nfsvers=4.0。 | ||||
挂载HyperScale集群文件系统dn需要填写HyperScale集群下的域名。 dn参数描述仅供参考,DataTurbo协议其他挂载详细参数说明请参考《OceanStor DataTurbo DTFS用户指南》。 |
表 3 支持的高级创卷参数
6.2.1.3 - 海量存储(FusionStorage Block/OceanStor Pacific系列)
6.2.1.3.1 - 文件系统
创建存储类
准备存储类配置文件,如本例中的mysc.yaml文件,存储类配置请参考下方示例文件。
执行命令,使用配置文件创建StorageClass。
kubectl apply -f mysc.yaml
执行命令,查看已创建的StorageClass信息。
kubectl get sc mysc
命令结果示例如下:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE mysc csi.huawei.com Delete Immediate true 8s
NFS协议配置示例
容器使用NFS协议对接文件系统资源时,可以参考如下存储类配置示例。该示例中,NFS挂载时指定版本为4.1。
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: mysc
provisioner: csi.huawei.com
parameters:
backend: nfs-nas-181
pool: pool001
volumeType: fs
allocType: thin
authClient: "*"
mountOptions:
- nfsvers=4.1 # NFS挂载时指定版本为4.1
DPC协议配置示例
存储支持DPC协议访问时,可以在StorageClass中配置DPC访问的挂载参数。本例中设置挂载时使用“acl”做鉴权参数,使用“cnflush”为设置异步刷盘模式。
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: mysc
provisioner: csi.huawei.com
parameters:
backend: nfs-dpc-101
pool: pool001
volumeType: fs
allocType: thin
mountOptions:
- acl # 鉴权参数
- cnflush # 设置异步刷盘模式
文件系统支持的存储类参数详细说明
表 1 StorageClass配置参数说明
以Kubernetes v1.22.1为例,支持数字、小写字母、中划线(-)和点(.)的组合,并且必须以字母数字开头和结尾。 | |||||
|
| ||||
常见的mountOptions参数参考表2。 | |||||
如果不设置,华为CSI会在所选后端上随机选择一个满足容量要求的存储池创建资源。建议指定存储池,确保创建的资源在预期的存储池上。 | |||||
| |||||
| |||||
可以使用“*”表示任意客户端。当您不确定访问客户端IP信息时,建议使用“*”防止客户端访问被存储拒绝。 可以同时输入多个主机名称、IP地址或IP地址段,以英文分号隔开。如示例:"192.168.0.10;192.168.0.0/24;myserver1.test" | |||||
配置项值是字典格式的JSON字符串(字符串两边由单引号修饰,字典key由双引号修饰)。如:'{"spaceQuota": "softQuota", "gracePeriod": 100}' | 支持的配额配置请参考表4说明。 | ||||
配置项值是字典格式的JSON字符串(字符串两边由单引号修饰,字典key由双引号修饰)。如:'{"maxMBPS": 999, "maxIOPS": 999}' | 支持的QoS配置请参考表3说明。 | ||||
| |||||
| |||||
| |||||
是否禁用卷容量校验,禁用后将不校验卷容量是否为扇区大小整数倍。
|
表 2 常用mountOptions参数说明
指定NFS版本挂载时,当前支持NFS 3/4.0/4.1/4.2协议(需存储设备支持且开启)。当配置参数为nfsvers=4时,因为操作系统配置的不同,实际挂载可能为NFS 4的最高版本协议,如4.2,当需要使用4.0协议时,建议配置nfsvers=4.0。 | ||||
acl、aclonlyposix、cnflush、cflush参数描述仅供参考,详细参数说明请参考《OceanStor Pacific系列 产品文档》 > 配置 > 文件服务基础业务配置指南 > 配置基础业务(DPC场景) > 客户端访问DPC共享 > 步骤2。 | ||||
DPC命名空间支持POSIX ACL功能,DPC客户端支持POSIX ACL的鉴权行为。 支持POSIX ACL的协议有:DPC、NFSv3、HDFS。如使用NFSv4 ACL或NT ACL,会导致DPC客户端无法识别该类型的ACL,从而导致该类型的ACL不会生效。 | ||||
异步刷盘模式,当文件关闭时不会同步将Cache的数据持久化到存储介质中,而是通过Cache异步刷盘的方式将数据写入存储介质,Cache的后台刷盘将在写业务完成后根据刷盘周期定时刷盘。在多客户端场景下,对同一文件进行并行操作,文件Size的更新会受刷盘周期的影响,即当刷盘动作完成后才会更新文件的Size,更新通常会在数秒内完成。同步I/O不受刷盘周期影响。 | ||||
表 3 支持的QoS配置
必填。有效值为大于0的整数,单位MB/s。最大值请参考存储设备实际限制,如OceanStor Pacific NAS最大值为1073741824。 | ||
必填。有效值为大于0的整数。最大值请参考存储设备实际限制,如OceanStor Pacific NAS最大值为1073741824000。 |
表 4 支持的配额配置
6.2.1.3.2 - Dtree
创建存储类
准备存储类配置文件,如本例中的mysc.yaml文件,存储类配置请参考下方示例文件。
执行命令,使用配置文件创建StorageClass。
kubectl apply -f mysc.yaml
执行命令,查看已创建的StorageClass信息。
kubectl get sc mysc
命令结果示例如下:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE mysc csi.huawei.com Delete Immediate true 8s
NFS协议支持的存储类配置示例
容器使用NFS协议对接Dtree资源时,可以参考如下存储类配置示例。该示例中,NFS挂载时指定版本为4.1。
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: mysc
provisioner: csi.huawei.com
parameters:
backend: nfs-dtree-181
parentname: parent-filesystem-name
volumeType: dtree
allocType: thin
authClient: "*"
mountOptions:
- nfsvers=4.1 # NFS挂载时指定版本为4.1
DPC协议支持的存储类配置示例
容器使用DPC协议对接Dtree资源时,可以参考如下存储类配置示例。本例中设置挂载时使用“acl”做鉴权参数,使用“cnflush”为设置异步刷盘模式。
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: mysc
provisioner: csi.huawei.com
parameters:
backend: nfs-dtree-181
parentname: parent-filesystem-name
volumeType: dtree
allocType: thin
authClient: "*"
mountOptions:
- acl # 鉴权参数
- cnflush # 设置异步刷盘模式
Dtree支持的存储类参数详细说明
表 1 StorageClass配置参数说明
以Kubernetes v1.22.1为例,支持数字、小写字母、中划线(-)和点(.)的组合,并且必须以字母数字开头和结尾。 | ||||
|
| |||
常见的mountOptions参数参考表2。 | ||||
若仅在StorageClass中配置了parentname,而存储后端中未配置时,要求在安装CSI时将CSIDriverObject.attachRequired设置为true。 | ||||
|
PVC命名空间为:"namespace",PVC名称为:"pvc-1",PVC UID:"c2fd3f46-bf17-4a7d-b88e-2e3232bae434"。 volumeName配置为: "prefix-{{ .PVCNamespace }}_{{ .PVCName }}"。 最终存储资源名称为:"prefix-namespace_pvc-1-c2fd3f46bf174a7db88e2e3232bae434"。 | |||
| ||||
可以使用“*”表示任意客户端。当您不确定访问客户端IP信息时,建议使用“*”防止客户端访问被存储拒绝。 可以同时输入多个主机名称、IP地址或IP地址段,以英文分号隔开。如示例:"192.168.0.10;192.168.0.0/24;myserver1.test" | ||||
| ||||
| ||||
是否禁用卷容量校验,禁用后将不校验卷容量是否为扇区大小整数倍。
|
表 2 常用mountOptions参数说明
指定NFS版本挂载时,当前支持NFS 3/4.0/4.1/4.2协议(需存储设备支持且开启)。当配置参数为nfsvers=4时,因为操作系统配置的不同,实际挂载可能为NFS 4的最高版本协议,如4.2,当需要使用4.0协议时,建议配置nfsvers=4.0。 | ||||
acl、aclonlyposix、cnflush、cflush参数描述仅供参考,详细参数说明请参考《OceanStor Pacific系列 产品文档》 > 配置 > 文件服务基础业务配置指南 > 配置基础业务(DPC场景) > 客户端访问DPC共享 > 步骤2。 | ||||
DPC命名空间支持POSIX ACL功能,DPC客户端支持POSIX ACL的鉴权行为。 支持POSIX ACL的协议有:DPC、NFSv3、HDFS。如使用NFSv4 ACL或NT ACL,会导致DPC客户端无法识别该类型的ACL,从而导致该类型的ACL不会生效。 | ||||
异步刷盘模式,当文件关闭时不会同步将Cache的数据持久化到存储介质中,而是通过Cache异步刷盘的方式将数据写入存储介质,Cache的后台刷盘将在写业务完成后根据刷盘周期定时刷盘。在多客户端场景下,对同一文件进行并行操作,文件Size的更新会受刷盘周期的影响,即当刷盘动作完成后才会更新文件的Size,更新通常会在数秒内完成。同步I/O不受刷盘周期影响。 | ||||
6.2.1.3.3 - 块业务
创建存储类
准备存储类配置文件,如本例中的mysc.yaml文件,存储类配置请参考下方示例文件。
执行命令,使用配置文件创建StorageClass。
kubectl apply -f mysc.yaml
执行命令,查看已创建的StorageClass信息。
kubectl get sc mysc
命令结果示例如下:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE mysc csi.huawei.com Delete Immediate true 8s
块业务存储类配置示例
使用LUN作为存储资源时,且需要格式化文件系统为本地文件系统时,可以参考如下示例。
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: mysc
provisioner: csi.huawei.com
parameters:
backend: lun-181
pool: StoragePool001
volumeType: lun
allocType: thin
fsType: ext4
块业务支持的存储类参数详细说明
表 1 StorageClass配置参数说明
以Kubernetes v1.22.1为例,支持数字、小写字母、中划线(-)和点(.)的组合,并且必须以字母数字开头和结尾。 | |||||
|
| ||||
常见的mountOptions参数参考表2。 | |||||
如果不设置,华为CSI会在所选后端上随机选择一个满足容量要求的存储池创建资源。建议指定存储池,确保创建的资源在预期的存储池上。 | |||||
| |||||
| |||||
| |||||
配置项值是字典格式的JSON字符串(字符串两边由单引号修饰,字典key由双引号修饰)。如:'{"maxMBPS": 999, "maxIOPS": 999}' | 支持的QoS配置请参考表3说明。 | ||||
是否禁用卷容量校验,禁用后将不校验卷容量是否为扇区大小整数倍。
|
表 2 常用mountOptions参数说明
表 3 支持的QoS配置
必填。有效值为大于0的整数,单位MB/s。最大值请参考存储设备实际限制,如OceanStor Pacific NAS最大值为1073741824。 | ||
必填。有效值为大于0的整数。最大值请参考存储设备实际限制,如OceanStor Pacific NAS最大值为1073741824000。 |
6.2.1.4 - 海量存储(OceanDisk系列)
6.2.1.4.1 - 文件系统
创建存储类
准备存储类配置文件,如本例中的mysc.yaml文件,存储类配置请参考下方示例文件。
执行命令,使用配置文件创建StorageClass。
kubectl apply -f mysc.yaml
执行命令,查看已创建的StorageClass信息。
kubectl get sc mysc
命令结果示例如下:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE mysc csi.huawei.com Delete Immediate true 8s
NFS协议配置示例
容器使用NFS协议对接文件系统资源时,可以参考如下存储类配置示例。该示例中,NFS挂载时指定版本为4.0。
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: mysc
provisioner: csi.huawei.com
parameters:
backend: nfs-nas-181
pool: StoragePool001
volumeType: fs
allocType: thin
authClient: "*"
mountOptions:
- nfsvers=4.0 # NFS挂载时指定版本为4.0
文件系统支持的存储类参数详细说明
表 1 StorageClass配置参数说明
以Kubernetes v1.22.1为例,支持数字、小写字母、中划线(-)和点(.)的组合,并且必须以字母数字开头和结尾。 | |||||
|
| ||||
常见的mountOptions参数参考表2。 | |||||
如果不设置,华为CSI会在所选后端上随机选择一个满足容量要求的存储池创建资源。建议指定存储池,确保创建的资源在预期的存储池上。 | |||||
|
PVC命名空间为:"namespace",PVC名称为:"pvc-1",PVC UID:"c2fd3f46-bf17-4a7d-b88e-2e3232bae434"。 volumeName配置为: "prefix-{{ .PVCNamespace }}_{{ .PVCName }}"。 最终存储资源名称为:"prefix-namespace_pvc-1-c2fd3f46bf174a7db88e2e3232bae434"。 | ||||
| |||||
| |||||
可以使用“*”表示任意客户端。当您不确定访问客户端IP信息时,建议使用“*”防止客户端访问被存储拒绝。 可以同时输入多个主机名称、IP地址或IP地址段,以英文分号隔开。如示例:"192.168.0.10;192.168.0.0/24;myserver1.test" | |||||
在DeviceManager管理界面,选择“服务 > 文件服务 > 文件系统 > 创建 > 应用类型”,获取应用类型名称。 | |||||
配置项值是字典格式的JSON字符串(字符串两边由单引号修饰,字典key由双引号修饰)。如:'{"maxMBPS": 999, "maxIOPS": 999}' | 支持的QoS配置请参考表3说明。 | ||||
| |||||
| |||||
| |||||
| |||||
| |||||
| |||||
是否禁用卷容量校验,禁用后将不校验卷容量是否为扇区大小整数倍。
| |||||
配置项值是字典格式的JSON字符串(字符串两边由单引号修饰,字典key由双引号修饰)。如:'{"CAPACITYTHRESHOLD": 90}' | 支持的高级参数列表请参考表4说明。 |
表 2 常用mountOptions参数说明
| ||||
表 3 支持的QoS配置
可选参数(未明确指定将使用后端存储默认值,具体参考相关存储资料)。
| |||
| |||
表 4 支持的高级创卷参数
6.2.1.4.2 - 块业务
创建存储类
准备存储类配置文件,如本例中的mysc.yaml文件,存储类配置请参考下方示例文件。
执行命令,使用配置文件创建StorageClass。
kubectl apply -f mysc.yaml
执行命令,查看已创建的StorageClass信息。
kubectl get sc mysc
命令结果示例如下:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE mysc csi.huawei.com Delete Immediate true 8s
块业务存储类配置示例
使用LUN作为存储资源时,且需要格式化文件系统为本地文件系统时,可以参考如下示例。
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: mysc
provisioner: csi.huawei.com
parameters:
backend: lun-181
pool: StoragePool001
volumeType: lun
allocType: thin
fsType: ext4
块业务支持的存储类参数详细说明
表 1 StorageClass配置参数说明
以Kubernetes v1.22.1为例,支持数字、小写字母、中划线(-)和点(.)的组合,并且必须以字母数字开头和结尾。 | |||||
|
| ||||
常见的mountOptions参数参考表2。 | |||||
如果不设置,华为CSI会在所选后端上随机选择一个满足容量要求的存储池创建资源。建议指定存储池,确保创建的资源在预期的存储池上。 | |||||
| |||||
| |||||
| |||||
在DeviceManager管理界面,选择“服务 > 块服务 > LUN组 (Namespace组)> LUN (Namespace)> 创建 > 应用类型”,获取应用类型名称。 | |||||
配置项值是字典格式的JSON字符串(字符串两边由单引号修饰,字典key由双引号修饰)。如:'{"maxMBPS": 999, "maxIOPS": 999}' | 支持的QoS配置请参考表3说明。 | ||||
是否禁用卷容量校验,禁用后将不校验卷容量是否为扇区大小整数倍。
| |||||
表 2 常用mountOptions参数说明
表 3 支持的QoS配置
| ||
6.2.2 - 管理存储类
6.2.2.1 - 查询存储类
执行命令,查看已创建的StorageClass信息。
kubectl get sc mysc
命令结果示例如下:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE mysc csi.huawei.com Delete Immediate true 8s
6.2.2.2 - 修改存储类
Kubernetes限制仅允许修改存储类 是否允许扩容字段 (allowVolumeExpansion),修改方式如下:
执行命令,查看存储类是否允许扩容。
kubectl get sc mysc
命令结果示例如下,存储类mysc不允许扩容:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE mysc csi.huawei.com Delete Immediate false 8s
执行下列命令,将存储类修改为允许扩容:
kubectl patch sc mysc --patch '{"allowVolumeExpansion":true}'
再次查看存储类,修改成功:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE mysc csi.huawei.com Delete Immediate true 8s
6.2.2.3 - 删除存储类
执行命令,查看存储类。
kubectl get sc mysc
命令结果示例如下:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE mysc csi.huawei.com Delete Immediate false 8s
执行下列命令,删除存储类:
kubectl delete sc mysc
回显如下所示,表示删除成功:
storageclass.storage.k8s.io "mysc" deleted
6.3 - 持久卷管理
根据业务的需求,容器中的文件需要在磁盘上进行持久化。当容器被重建或者重新分配至新的节点时,可以继续使用这些持久化数据。
为了可以将数据持久化到存储设备上,您需要在发放容器时使用 持久卷(PersistentVolume,PV) 以及 持久卷申领(PersistentVolumeClaim,PVC) 。
- PV:是Kubernetes集群中的一块存储,可以由管理员事先制备, 或者使用 存储类(StorageClass) 来动态制备。
- PVC:是用户对存储的请求。PVC会耗用 PV 资源。PVC可以请求特定的大小和访问模式 (例如,可以要求 PV能够以 ReadWriteOnce、ReadOnlyMany 或 ReadWriteMany 模式之一来挂载,参见 访问模式 )。
本章将介绍如何使用华为CSI对PV/PVC进行创建、扩容、克隆等操作。
6.3.1 - 配置持久卷
华为CSI支持在华为存储上创建存储资源(LUN/文件系统),并根据用户的设置供给容器使用。具体支持的特性请参考存储自身的 特性表 。
配置持久卷的方式按类型可分为配置动态持久卷、配置静态持久卷和纳管持久卷。
- 配置动态持久卷不需要事先创建PV,华为CSI会根据StorageClass自动在存储设备上创建PV所需要的资源。并且可以在创建PVC时同时创建PV。
- 配置静态持久卷需要管理员事先在存储设备上创建好所需要的资源,通过创建PV的方式使用已存在的资源。并且可以在创建PVC时指定关联的PV。
- 纳管持久卷不需要事先创建PV,通过在PVC中指定StorageClass与存储上的资源信息,在创建PVC时同时创建PV,并将已有存储资源纳管至集群。
6.3.1.1 - 配置动态持久卷
动态卷供应(Dynamic Volume Provisioning)允许按需创建存储卷。动态卷供应依赖StorageClass对象。 集群管理员可以根据需要定义多个StorageClass对象,在声明PV或者PVC时,指定满足业务要求的StorageClass。华为CSI在从华为存储设备上申请资源时,会根据StorageClass的预置定义,创建满足业务要求的存储资源。
配置说明
请根据以下步骤配置使用动态持久卷:
前置准备
在开始配置动态持久卷前,请参考 配置存储类 ,完成StorageClass的配置。
配置PVC
准备PVC配置文件mypvc.yaml,示例如下,其他配置参数请参考 表1 。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: mypvc spec: accessModes: - ReadWriteOnce volumeMode: Filesystem storageClassName: mysc resources: requests: storage: 100Gi
执行命令,使用配置文件创建PVC。
kubectl create -f mypvc.yaml
等待一段时间后,执行以下命令,查看已经创建的PVC信息。
kubectl get pvc mypvc
命令结果示例如下,如果PVC的状态是“Bound”时,则说明该PVC已经创建成功,后续可以被Pod使用。
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE mypvc Bound pvc-840054d3-1d5b-4153-b73f-826f980abf9e 100Gi RWO mysc 12s
- 完成创建PVC操作后,如果长时间后(如一分钟后)PVC的状态是Pending,请参考 创建PVC时, PVC的状态为Pending 。
- 建议每批次最多批量创建/删除100个PVC。
表 1 配置动态卷持久卷PVC参数说明
以Kubernetes v1.22.1为例,支持数字、小写字母、中划线(-)和点(.)的组合,并且必须以字母数字开头和结尾。 | ||||
卷模式。可选参数。 当使用LUN类型的卷时,支持配置以下类型:
|
| |||
PVC容量的规格取决于存储规格限制和主机规格限制。以OceanStor Dorado 6.1.2/OceanStor Pacific系列 8.1.0对接CentOS 7为例,当使用的是ext4文件系统时,容量限制见表2;当使用的是XFS文件系统时,容量限制见表3。如果使用的是NFS或者裸设备,容量需满足使用的华为存储设备型号和版本所要求的规格约束。 | ||||
|
|
表 2 ext4容量的规格
表 3 XFS容量的规格
使用PVC
在完成PVC创建后,就可以使用PVC来创建Pod。如下示例是一个简单的使用PVC示例,在该示例中,创建的Pod使用了刚刚创建的_ mypvc_。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx:alpine
name: container-0
volumeMounts:
- mountPath: /tmp
name: pvc-mypvc
restartPolicy: Always
volumes:
- name: pvc-mypvc
persistentVolumeClaim:
claimName: mypvc # name of PVC
若使用PVC批量创建Pod,Pod长时间处于ContainerCreating状态,且huawei-csi-node服务状态为OOMKilled,说明当前huawei-csi-node服务内存不足。请根据 表1 ,将huawei-csi-node内存限制增大。
6.3.1.2 - 配置静态持久卷
静态卷供应(Static Volume Provisioning)允许管理员使用已经在存储侧创建的资源做为PV,供集群中的容器使用。
配置说明
请根据以下步骤配置使用静态持久卷:
前置准备
存储侧已经存在待创建PV所需要的存储资源,如LUN或者文件系统。如果存储资源是文件系统,还需要创建文件系统的共享和客户端信息。
配置PV
准备PV配置文件mypv.yaml,示例如下,其他配置参数请参考 表1 。
kind: PersistentVolume apiVersion: v1 metadata: name: mypv spec: volumeMode: Filesystem storageClassName: "" # 必须配置为"" accessModes: - ReadWriteOnce csi: driver: csi.huawei.com # CSI驱动名称 volumeHandle: iscsi-dorado-181.lun0001 # 卷名称 fsType: xfs # 文件系统类型 capacity: storage: 100Gi
静态卷供应的配置文件中,storageClassName参数必须配置为‘“”’,如果不配置,Kubernetes会使用系统默认的StorageClass。执行以下命令,基于准备好的yaml文件创建PV。
kubectl create -f mypv.yaml
等待一段时间后,执行以下命令,查看已经创建的PV信息。
kubectl get pv
命令结果示例如下,当PV状态为“Available”时,表明PV创建成功。
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE mypv 100Gi RWO Retain Available 4s
表 1 配置静态卷持久卷PV参数说明
以Kubernetes v1.22.1为例,支持数字、小写字母、中划线(-)和点(.)的组合,并且必须以字母数字开头和结尾。 | ||||
卷模式。可选参数。 当使用LUN类型的卷时,支持配置以下类型:
|
| |||
|
| |||
| ||||
纳管对象为Dtree资源,且存储后端中未配置parentname参数时,必须配置该参数。 若仅在PV中配置了dTreeParentName,而对应的存储后端中未配置parentname时,要求在安装CSI时根据表5将CSIDriverObject.attachRequired设置为true。 | ||||
请确保与存储上对应资源的容量保持一致。Kubernetes并不会调用CSI检查此字段值的正确性,所以在PV容量与存储上对应资源的容量不一致也能被成功创建。 | ||||
指定NFS版本挂载时,当前支持NFS 3/4.0/4.1/4.2协议(需存储设备支持且开启)。当配置参数为nfsvers=4时,因为操作系统配置的不同,实际挂载可能为NFS 4的最高版本协议,如4.2,当需要使用4.0协议时,建议配置nfsvers=4.0。 | ||||
acl、aclonlyposix、cnflush、cflush参数描述仅供参考,详细参数说明请参考《OceanStor Pacific系列 产品文档》 > 配置 > 文件服务基础业务配置指南 > 配置基础业务(DPC场景) > 客户端访问DPC共享 > 步骤2。 | ||||
DPC命名空间支持POSIX ACL功能,DPC客户端支持POSIX ACL的鉴权行为。 支持POSIX ACL的协议有:DPC、NFSv3、HDFS。如使用NFSv4 ACL或NT ACL,会导致DPC客户端无法识别该类型的ACL,从而导致该类型的ACL不会生效。 | ||||
异步刷盘模式,当文件关闭时不会同步将Cache的数据持久化到存储介质中,而是通过Cache异步刷盘的方式将数据写入存储介质,Cache的后台刷盘将在写业务完成后根据刷盘周期定时刷盘。在多客户端场景下,对同一文件进行并行操作,文件Size的更新会受刷盘周期的影响,即当刷盘动作完成后才会更新文件的Size,更新通常会在数秒内完成。同步I/O不受刷盘周期影响。 | ||||
配置PVC
当PV以静态卷供应的方式创建完成后,可以基于该PV创建PVC,从而供容器使用。
准备PVC配置文件mypvc.yaml,示例如下,其他配置参数请参考 表2 。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: mypvc spec: storageClassName: "" accessModes: - ReadWriteOnce volumeMode: Filesystem resources: requests: storage: 100Gi volumeName: mypv # 对应PV名称
执行以下命令,基于已配置的yaml文件创建PVC。
kubectl create -f mypvc.yaml
等待一段时间后,执行以下命令,查看已经创建的PVC信息。
kubectl get pvc
命令结果示例如下,当PVC状态为“Bound“时,表明PVC创建成功。
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE mypvc Bound pvc-840054d3-1d5b-4153-b73f-826f980abf9e 100Gi RWO 12s
- 完成创建PVC操作后,如果长时间后PVC的状态是Pending,请参考 创建PVC时, PVC的状态为Pending 。
- 建议每次最多批量创建/删除100个PVC。
表 2 配置静态持久卷PVC参数说明
以Kubernetes v1.22.1为例,支持数字、小写字母、中划线(-)和点(.)的组合,并且必须以字母数字开头和结尾。 | ||||
|
| |||
可选, 支持Filesystem或Block, 默认为Filesystem。该参数在创建Pod时生效,其中Filesystem表示在PVC上创建一个文件系统访问存储, Block表示使用裸卷的方式访问存储。 | ||||
PVC容量的规格取决于存储规格限制和主机规格限制。以OceanStor Dorado 6.1.2/OceanStor Pacific系列 8.1.0对接CentOS 7为例,当使用的是ext4文件系统时,容量限制见表2;当使用的是XFS文件系统时,容量限制见表3。如果使用的是NFS或者裸设备,容量需满足使用的华为存储设备型号和版本所要求的规格约束。 如果PVC容量不在规格范围内,可能会由于存储规格限制或主机文件系统规格限制导致创建PVC或Pod失败。 在通过静态PV创建PVC时,若PVC容量小于绑定PV容量,最终PVC容量大小为绑定PV容量,若PVC容量大于绑定PV容量,PVC将无法被创建。 | ||||
使用PVC
与动态卷供应 使用PVC 方式相同。
6.3.1.3 - 纳管持久卷
纳管卷供应(Manage Volume Provisioning)允许管理员使用已经在存储侧创建的资源做为PV,并能够支持动态卷的特性,例如:扩容,快照,克隆等,属于华为CSI自定义能力。使用该特性可满足如下场景:
- 容器化应用的改造场景,需要使用已有的存储卷。
- 重建Kubernetes集群。
- 容灾场景下,对存储数据进行迁移。
纳管卷供应支持将已有存储资源纳管至Kubernetes,不允许将一个存储资源纳管多次和针对同一个存储资源进行并发删除/创建操作。 当同一个存储资源被多个集群纳管时,在单个集群中针对该纳管卷的操作仅在当前集群内生效,不会同步到其他集群中,需要使用者自行在其他集群中对该纳管卷进行数据同步操作。 例如:在某一集群中对PVC进行扩容时,其他集群对应的PVC不会自动扩容,需要在其他集群中手动根据 扩容持久卷 中的扩容命令进行扩容。
配置说明
请根据以下步骤纳管使用持久卷:
前置准备
- 已在CSI中注册需要纳管卷所在存储。
- 已登录存储设备获取需要纳管卷的名称和容量。
- 已完成StorageClass的配置,参考 配置存储类 (关注表格中的“纳管卷是否生效”字段)。
配置PVC
准备PVC配置文件mypvc.yaml,示例如下,其他配置参数请参考 表1 。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: mypvc annotations: csi.huawei.com/manageVolumeName: "*" # 存储资源名称 csi.huawei.com/manageBackendName: "*" # 存储后端名称 labels: provisioner: csi.huawei.com spec: accessModes: - ReadWriteOnce volumeMode: Filesystem storageClassName: mysc resources: requests: storage: 100Gi
执行命令,使用配置文件创建PVC。
kubectl create -f mypvc.yaml
等待一段时间后,执行以下命令,查看已经创建的PVC信息。
kubectl get pvc mypvc
命令结果示例如下,如果PVC的状态是“Bound”时,则说明该PVC已经创建成功,后续可以被Pod使用。
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE mypvc Bound pvc-840054d3-1d5b-4153-b73f-826f980abf9e 100Gi RWO mysc 12s
- 完成创建PVC操作后,如果长时间后(如一分钟后)PVC的状态是Pending,请参考 创建PVC时, PVC的状态为Pending 。
- 建议每批次最多批量创建/删除100个PVC。
表 1 纳管持久卷PVC参数说明
| csi.huawei.com/manageVolumeName: * csi.huawei.com/manageBackendName: * |
| ||
以Kubernetes v1.22.1为例,支持数字、小写字母、中划线(-)和点(.)的组合,并且必须以字母数字开头和结尾。 | ||||
卷模式。可选参数。 当使用LUN类型的卷时,支持配置以下类型:
|
| |||
PVC容量的规格取决于存储规格限制和主机规格限制。以OceanStor Dorado 6.1.2/OceanStor Pacific系列 8.1.0对接CentOS 7为例,当使用的是ext4文件系统时,容量限制见表2;当使用的是XFS文件系统时,容量限制见表3。如果使用的是NFS或者裸设备,容量需满足使用的华为存储设备型号和版本所要求的规格约束。 | ||||
|
|
使用PVC
与动态卷供应 使用PVC 方式相同。
6.3.2 - 管理持久卷
6.3.2.1 - 扩容持久卷
OceanStor V700R001C10和OceanStor Dorado V700R001C10及以后版本,扩容后文件系统的容量存在最小限制,具体限制值参考对应存储的产品手册。
当容器使用的PVC容量不足时,需要对该PVC进行扩容操作。
前提条件
PVC已创建,所在的backend存在且支持扩容。
支持扩容的存储请参考 兼容性和特性 章节中的特性表格,支持扩容的Kubernetes版本请参考 Kubernetes特性矩阵 。
huawei-csi-controller启用了csi-resizer服务。
kubectl describe deploy huawei-csi-controller -n huawei-csi | grep csi-resizer
命令回显示例如下则说明已启用csi-resizer服务。
csi-resizer: Image: k8s.gcr.io/sig-storage/csi-resizer:v1.9.0
操作步骤
执行命令,查询StorageClass是否支持扩容。其中,mysc 为需要查看的StorageClass名称。
kubectl get sc mysc
命令结果示例如下:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE mysc csi.huawei.com Delete Immediate true 172m
如果ALLOWVOLUMEEXPANSION的值为true,表示当前StorageClass已经支持扩容,请跳转至步骤 3 。
执行以下命令,将“allowVolumeExpansion“的值修改为“true“。其中,mysc 为需要修改的StorageClass名称。
kubectl patch sc mysc --patch '{"allowVolumeExpansion":true}'
执行命令,查询PVC的StorageClass名称。其中,mypvc 为需要扩容的PVC名称。
kubectl get pvc mypvc
命令结果示例如下:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE mypvc Bound pvc-3383be36-537c-4cb1-8f32-a415fa6ba384 2Gi RW0 mysc 145m
执行以下命令进行扩容。
kubectl patch pvc mypvc -p '{"spec":{"resources":{"requests":{"storage":"120Gi"}}}}'
其中,"mypvc“是需要扩容的PVC名称,“120Gi”是扩容后的容量大小。请根据实际情况进行替换。
- PVC容量的规格取决于存储规格限制和主机规格限制。以OceanStor Dorado 6.1.2/OceanStor Pacific系列 8.1.0对接CentOS 7为例,当使用的是ext4文件系统时,容量限制见 表2 ;当使用的是XFS文件系统时,容量限制见 表3 。如果使用的是NFS或者裸设备,容量需满足使用的华为存储设备型号和版本所要求的规格约束。
- 如果PVC容量不在规格范围内,可能会由于存储规格限制或主机文件系统规格限制导致创建PVC或Pod失败。
- 如果扩容的目标容量超过存储池容量导致扩容失败,请参考 PVC扩容的目标容量超过存储池容量导致扩容失败 。
执行命令,检查容量修改是否生效。
kubectl get pvc
命令结果示例如下,如果CAPACITY字段已变更为指定容量,说明扩容成功。
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE mypvc Bound pvc-3383be36-537c-4cb1-8f32-a415fa6ba384 120Gi RWO mysc 24s
6.3.2.2 - 克隆持久卷
本章节描述如何克隆PVC。
在克隆PVC时,需要指定数据源。如下是一个克隆PVC示例,在该示例中,使用“mypvc”作为数据源,新创建了一个名叫“myclone”的PVC。
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: myclone
spec:
storageClassName: mysc
dataSource:
name: mypvc
kind: PersistentVolumeClaim
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
- 指定的storageClassName必须和dataSource中的源卷的StorageClass需一致。
- 克隆卷的容量必须不小于源卷容量,建议和源卷容量保持一致。
前提条件
系统中已经存在源PVC,且源PVC所在的backend支持克隆。支持克隆的存储请参考 兼容性和特性 章节中的特性表格,支持克隆的Kubernetes版本请参考 Kubernetes特性矩阵 。
操作步骤
执行以下命令,基于克隆卷的配置文件创建PVC。
kubectl create -f myclone.yaml
6.3.2.3 - 变更持久卷
6.3.2.3.1 - 开启PVC变更特性
当前华为CSI安装时默认关闭PVC变更特性,如需要使用该特性,请按照以下步骤开启。
6.3.2.3.1.1 - 使用Helm开启PVC变更特性
前提条件
已使用Helm安装华为CSI。
操作步骤
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行以下命令检查PVC变更特性是否开启。
其中helm-huawei-csi为安装时指定的Helm Chart名称,huawei-csi为安装时指定的Helm Chart命名空间。组件包路径请参考 表1 。
helm get values helm-huawei-csi -n huawei-csi -a | grep volumeModify -A 1
命令结果示例如下:
- 若回显内容为“enabled: true”,则表示特性开启,可跳过后续步骤。
- 若回显内容为“enabled: false”,请按照后续步骤开启PVC变更特性。
volumeModify: enabled: false
进入/helm/esdk目录,执行命令,配置卷变更CRD。
# kubectl apply -f ./crds/volume-modify/ customresourcedefinition.apiextensions.k8s.io/volumemodifyclaims.xuanwu.huawei.io configured customresourcedefinition.apiextensions.k8s.io/volumemodifycontents.xuanwu.huawei.io configured
如回显中存在“Warning: resource customresourcedefinitions/volumemodifycontents.xuanwu.huawei.io is missing the kubectl.kubernetes.io/last-applied-configuration…”提示,可忽略该提示。该提示出现原因是由于Helm安装应用时使用的是kubectl create命令而不是kubectl apply命令。helm get values helm-huawei-csi -n huawei-csi -a > ./update-values.yaml
执行vi update-values.yaml命令打开 4 中获取的文件,修改以下配置。修改完成后,按Esc,并输入**:wq!**,保存修改。
csiExtender: volumeModify: enabled: true
执行以下命令更新华为CSI服务。
helm upgrade helm-huawei-csi ./ -n huawei-csi -f ./update-values.yaml
执行命令检查服务是否启动。
kubectl get pod -n huawei-csi
命令结果示例如下,其中huawei-csi为华为CSI部署命名空间。
NAME READY STATUS RESTARTS AGE huawei-csi-controller-6dfcc4b79f-9vjtq 10/10 Running 0 24m huawei-csi-node-tqs87 3/3 Running 0 20m
6.3.2.3.1.2 - 手动方式开启PVC变更特性
前提条件
已使用手动方式安装华为CSI。
操作步骤
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
进入manual/esdk工作目录下,执行以下命令,配置卷变更CRD。
kubectl apply -f ./crds/volume-modify/
执行以下命令。组件包路径请参考 表1 。
kubectl apply -f ./deploy/huawei-csi-controller-extender.yaml
执行命令检查服务是否启动。
kubectl get pod -n huawei-csi
命令结果示例如下,其中huawei-csi为华为CSI部署命名空间。
NAME READY STATUS RESTARTS AGE huawei-csi-controller-6dfcc4b79f-9vjtq 10/10 Running 0 24m huawei-csi-node-tqs87 3/3 Running 0 24m
6.3.2.3.2 - 配置PVC变更
PVC变更特性使用CRD实现,当前资源说明如下。
表 1 资源说明
- VolumeModifyClaim资源支持创建/删除/查询,不支持更新。
- VolumeModifyContent资源仅支持查询,用于展示单个PVC变更详情,请勿手动创建/删除/修改。
- VolumeModifyContent资源被VolumeModifyClaim管理,请勿手动管理VolumeModifyContent资源。
6.3.2.3.2.1 - 创建PVC变更
前提条件
待变更PVC关联的存储后端已经组成双活存储后端,若未组成双活存储后端,请参考 更新存储后端信息 章节配置。
PVC变更文件说明
PVC变更文件样例模板为/examples/volumemodifyclaim.yaml,具体配置项如下表所示:
表 1 参数说明
名称必须满足DNS 子域名的命名规则,支持数字、小写字母、中划线(-)和点(.)的组合,并且必须以小写字母数字字符开头和结尾,最大长度不超过63个字符。 注意:在PVC变更过程中,会对原StorageClass进行备份,备份StorageClass的名称为“<原StorageClass名称><VolumeModifyClaim名称>”,且需符合StorageClass命名规则。 | ||||
| 当且仅当spec.parameters.hyperMetro为"true"时生效。
|
- spec.source.kind和spec.source.name用于指定卷变更范围,例如配置为StorageClass和对应名称时,将会变更使用目标StorageClass发放的所有的处于Bound状态的PVC。
- 当所有关联的PVC完成变更后,华为CSI会替换原有的StorageClass,并增加VolumeModifyClaim的spec.parameters参数,使得PVC满足StorageClass定义。
典型场景配置请参考如下示例:
变更普通卷为双活卷
配置变更普通卷为双活卷示例如下:
apiVersion: xuanwu.huawei.io/v1
kind: VolumeModifyClaim
metadata:
name: myvmc
spec:
source:
kind: StorageClass
name: mysc
parameters:
hyperMetro: "true"
创建PVC变更资源
- 变更的双活卷仅支持双活AA模式。
- 如果变更场景为普通卷变更为双活卷,则仅支持变更主站点端存储卷。
- 创建PVC变更资源期间,请勿使用华为CSI管理PVC。
- 不支持对同一个PVC创建多个VolumeModifyClaim资源,若存在对目标PVC的多次变更,请在单次变更完成之后再执行。
使用PVC变更文件创建PVC变更资源步骤如下。
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行以下命令,创建PVC变更。
kubectl create -f volumemodifyclaim.yaml
参考 查询PVC变更 查询创建结果。
6.3.2.3.2.2 - 查询PVC变更
本章节介绍如何使用Kubectl查询PVC变更状态,当前华为CSI通过CRD提供以下API。
查询VolumeModifyClaim
使用kubectl查询VolumeModifyClaim步骤如下。
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行以下命令,查询PVC变更。其中 vmc-name 为VolumeModifyClaim资源名称。
kubectl get volumemodifyclaims <vmc-name> -owide
命令结果示例如下:
NAME STATUS READY SOURCEKIND SOURCENAME STARTEDAT COMPLETEDAT AGE myvmc Completed 1/1 StorageClass mysc 2024-06-06T03:19:13Z 2024-06-06T03:19:16Z 2m2s
表 1 回显说明
- Pending:初始状态。
- Creating:VolumeModifyClaim完成基本校验,且服务端已经接收变更任务,但是该任务还未执行完成。
- Completed:所有关联的PVC均完成变更。
- Rollback:关联的PVC部分完成变更时,用户执行了删除PVC变更操作。
- Deleting:关联的PVC全部完成变更时,用户执行了删除PVC变更操作。
VolumeModifyClaim支持使用kubectl查看Events信息,当VolumeModifyClaim无法满足创建要求,或者创建过程中出现错误时,服务端将记录Events信息。参考命令如下:kubectl describe volumemodifyclaims local-to-hypermetro
查询VolumeModifyContent
VolumeModifyContent由VolumeModifyClaim资源创建,记录了单个PVC的变更详情,使用kubectl查询VolumeModifyContent步骤如下。
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行命令,查询PVC变更。其中myvmc-uid为VolumeModifyContent资源名称。
kubectl get volumemodifycontents myvmc-uid -owide
命令结果示例如下:
NAME STATUS MODIFYCLAIMNAME SOURCEVOLUME STARTEDAT COMPLETEDAT AGE myvmc-uid Completed myvmc default/mypvc 2024-06-06T03:19:07Z 2024-06-06T03:19:09Z 36m
表 2 回显说明
VolumeModifyContent资源状态,可取值如下:
- Pending:初始状态。
- Creating:VolumeModifyContent完成基本校验,且服务端已经接收变更任务,但是该任务还未执行完成。
- Completed:关联的PVC完成变更。
- Rollback:正在回滚PVC变更。
VolumeModifyContent支持使用kubectl查看Events信息,当VolumeModifyContent无法满足创建要求,或者变更PVC出现错误时,服务端将记录Events信息。参考命令如下:kubectl describe volumemodifycontents myvmc-uid
6.3.2.3.2.3 - 删除PVC变更
- 当VolumeModifyClaim的STATUS值为Creating时,删除VolumeModifyClaim资源,将会在存储侧删除此次变更创建的资源,然后移除集群资源。在删除后,如果继续使用原有的StorageClass进行PVC管理,需要将关联的存储后端恢复为非双活存储后端。
- 当VolumeModifyClaim的STATUS值为Pending或Completed时,删除VolumeModifyClaim资源,仅会移除集群资源,不会和存储交互,即不会在存储侧删除变更创建的资源。
- VolumeModifyContent被VolumeModifyClaim管理,请勿手动管理VolumeModifyContent资源。
- 若待变更PVC中已有部分PVC满足变更要求,当批量变更失败时,会移除掉所有PVC的变更,导致已满足变更条件的PVC不再满足。
- 若待变更PVC已经在存储侧被手动管理,则可能导致变更失败。使用变更特性时,请勿手动管理存储卷。
当前章节介绍如何使用kubectl删除PVC变更,基于步骤如下。
操作步骤
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行 命令,删除PVC变更。其中 vmc-name 为VolumeModifyClaim资源名称。
kubectl delete volumemodifyclaims <vmc-name>
参考 查询PVC变更 查询创建结果。
7 - 高阶服务
7.1 - 快照管理
在Kubernetes中, 卷快照(VolumeSnapshot) 是一个存储系统上卷的快照。VolumeSnapshot能力为Kubernetes用户提供了一种标准的方式来在指定时间点复制卷的内容,并且不需要创建全新的卷。 例如,这一功能使得数据库管理员能够在执行编辑或删除之类的修改之前对数据库执行备份。
本章将介绍如何使用华为CSI创建VolumeSnapshot。为了完成创建VolumeSnapshot,需要完成如下三步:
- 检查卷快照依赖组件信息
- 配置VolumeSnapshotClass
- 配置VolumeSnapshot
前提条件
7.1.1 - 配置卷快照
创建卷快照类
卷快照类(VolumeSnapshotClass) 提供了一种在配置VolumeSnapshot时描述存储“类”的方法。每个VolumeSnapshotClass都包含“driver”、“deletionPolicy” 和“parameters”字段, 在需要动态配置属于该类的VolumeSnapshot时使用。
VolumeSnapshotClass对象的名称很重要,是用户可以请求特定类的方式。 管理员在首次创建VolumeSnapshotClass对象时设置类的名称和其他参数, 对象一旦创建就无法更新。
华为CSI使用的VolumeSnapshotClass示例如下:
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
name: mysnapclass
driver: csi.huawei.com
deletionPolicy: Delete
实际参数可以参考 表1 中的说明修改。由于当前华为CSI还不支持在VolumeSnapshotClass中设置自定义参数(parameters),因此建议只创建一个VolumeSnapshotClass,供所有快照使用。
表 1 VolumeSnapshotClass参数说明
以Kubernetes v1.22.1为例,支持数字、小写字母、中划线(-)和点(.)的组合,并且必须以字母数字字符开头和结尾。 | ||
|
|
操作步骤
执行以下命令,使用已经创建的VolumeSnapshotClass配置文件创建VolumeSnapshotClass。
kubectl create -f mysnapclass.yaml
执行以下命令,查看已创建的VolumeSnapshotClass信息。
kubectl get volumesnapshotclass
命令结果示例如下:
NAME DRIVER DELETIONPOLICY AGE mysnapclass csi.huawei.com Delete 25s
创建卷快照
VolumeSnapshot可以通过两种方式进行制备: 预制备或动态制备 。华为CSI当前仅支持动态制备。本章节将说明如何使用华为CSI动态制备VolumeSnapshot。VolumeSnapshot的配置文件示例如下:
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: mysnapshot
spec:
volumeSnapshotClassName: mysnapclass
source:
persistentVolumeClaimName: mypvc
实际参数可以参考 表2 中的说明修改。
表 2 VolumeSnapshot参数说明
以Kubernetes v1.22.1为例,支持数字、小写字母、中划线(-)和点(.)的组合,并且必须以字母数字字符开头和结尾。 | ||
操作步骤
执行以下命令,使用已经创建的VolumeSnapshot配置文件创建VolumeSnapshot。
kubectl create -f mysnapshot.yaml
执行以下命令,查看已创建的VolumeSnapshot信息。
kubectl get volumesnapshot
命令结果示例如下:
NAME READYTOUSE SOURCEPVC SOURCESNAPSHOTCONTENT RESTORESIZE SNAPSHOTCLASS SNAPSHOTCONTENT CREATIONTIME AGE mysnapshot true mypvc 100Gi mysnapclass snapcontent-1009af0a-24c2-4435-861c-516224503f2d <invalid> 78s
7.1.2 - 管理卷快照
7.1.2.1 - 查询卷快照
查看卷快照类
执行以下命令,查看已创建的VolumeSnapshotClass信息。
kubectl get volumesnapshotclass
命令结果示例如下:
NAME DRIVER DELETIONPOLICY AGE mysnapclass csi.huawei.com Delete 25s
查询卷快照
执行以下命令,查看已创建的VolumeSnapshot信息。
kubectl get volumesnapshot
命令结果示例如下:
NAME READYTOUSE SOURCEPVC SOURCESNAPSHOTCONTENT RESTORESIZE SNAPSHOTCLASS SNAPSHOTCONTENT CREATIONTIME AGE mysnapshot true mypvc 100Gi mysnapclass snapcontent-1009af0a-24c2-4435-861c-516224503f2d <invalid> 78s
7.1.2.2 - 从卷快照创建持久卷
前提条件
- 支持从卷快照创建PVC的存储请参考存储自身的 特性表 ,选择对应存储类型和业务类型进行查询。
- 支持从卷快照创建PVC的Kubernetes版本请参考 Kubernetes特性矩阵 。
- 已经存在卷快照,且卷快照所在的backend支持克隆。
在创建PVC时,需要指定卷快照作为数据源。如下是一个从卷快照创建PVC示例,在该示例中,使用快照“mysnapshot”作为数据源,新创建了一个名叫“myrestore”的PVC。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: myrestore
spec:
storageClassName: mysc
dataSource:
name: mysnapshot
kind: VolumeSnapshot
apiGroup: snapshot.storage.k8s.io
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
- 指定的storageClassName必须和dataSource中的快照源卷的StorageClass需一致。
- 克隆卷的容量必须不小于快照容量,建议和快照容量保持一致。
操作步骤
执行以下命令,基于从快照创建卷的配置文件创建PVC。
kubectl create -f myrestore.yaml
7.1.2.3 - 删除卷快照
删除卷快照
当后续不需要使用该卷快照时,执行该操作。
操作步骤
执行以下命令,查看已创建的VolumeSnapshot信息。
kubectl get volumesnapshot
命令结果示例如下:
NAME READYTOUSE SOURCEPVC SOURCESNAPSHOTCONTENT RESTORESIZE SNAPSHOTCLASS SNAPSHOTCONTENT CREATIONTIME AGE mysnapshot true mypvc 100Gi mysnapclass snapcontent-1009af0a-24c2-4435-861c-516224503f2d <invalid> 78s
执行下列命令,删除VolumeSnapshot:
kubectl delete volumesnapshot mysnapshot
回显如下所示,表示删除成功:
volumesnapshot.snapshot.storage.k8s.io "mysnapshot" deleted
删除卷快照类
当该卷快照类没有绑定任何卷快照,且后续不需要使用该卷快照类时,执行该操作。
操作步骤
执行以下命令,查看卷快照类。
kubectl get vsclass
命令结果示例如下:
NAME DRIVER DELETIONPOLICY AGE mysnapclass csi.huawei.com Delete 25s
执行下列命令,删除存储类:
kubectl delete vsclass mysnapclass
回显如下所示,表示删除成功:
volumesnapshotclass.snapshot.storage.k8s.io "mysnapclass" deleted
8 - 常见运维操作
8.1 - 安装Helm 3
本章节指导用户如何安装Helm 3。
参考: https://helm.sh/docs/intro/install/
前提条件
确保Kubernetes集群中的master节点可以访问Internet。
操作步骤
执行以下命令,下载Helm 3的安装脚本。
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
执行以下命令,修改Helm 3的安装脚本权限。
chmod 700 get_helm.sh
根据Helm与Kubernetes版本配套关系确认需要安装的Helm版本,配套关系请参考 Helm Version Support Policy ,执行以下命令,修改DESIRED_VERSION环境变量为需要安装的Helm版本,并执行安装命令。
DESIRED_VERSION=v3.9.0 ./get_helm.sh
执行以下命令,查看指定版本的Helm 3是否安装成功。
helm version
命令结果示例如下,说明安装成功。
version.BuildInfo{Version:"v3.9.0", GitCommit:"7ceeda6c585217a19a1131663d8cd1f7d641b2a7", GitTreeState:"clean", GoVersion:"go1.17.5"}
8.2 - 信息收集
8.2.1 - 如何获取CSI版本信息
本章节指导用户如何查看CSI版本信息。
操作步骤
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行以下命令,查看huawei-csi-node所在节点信息。
kubectl get pod -A -owide | grep huawei-csi-node
命令结果示例如下:
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES huawei-csi huawei-csi-node-87mss 3/3 Running 0 6m41s 192.168.129.155 node-1 <none> <none> huawei-csi huawei-csi-node-xp8cc 3/3 Running 0 6m41s 192.168.129.156 node-2 <none> <none
使用远程访问工具(以PuTTY为例),通过节点IP地址,登录任意huawei-csi-node所在节点。
执行以下命令,查看CSI版本信息。
cat /var/lib/kubelet/plugins/csi.huawei.com/version
命令显示版本信息如下。
4.9.0
8.2.2 - 如何查看华为CSI日志
查看huawei-csi-controller服务的日志
执行以下命令,获取huawei-csi-controller所在的节点
kubectl get pod -A -o wide | grep huawei
命令结果示例如下,其中IP为节点主机IP地址,NODE为节点主机名称。
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES huawei-csi-controller-695b84b4d8-tg64l 9/9 Running 0 14s <host1-ip> <host1-name> <none> <none>
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群中huawei-csi-controller服务所在节点
进入日志目录。
cd /var/log/huawei
执行以下命令,查看容器自定义输出日志。
vi huawei-csi-controller
进入容器目录。
cd /var/log/containers
执行以下命令, 查看容器标准输出日志。
vi huawei-csi-controller-<name>_huawei-csi_huawei-csi-driver-<container-id>.log
查看huawei-csi-node服务的日志
执行以下命令,获取huawei-csi-node所在的节点
kubectl get pod -A -o wide | grep huawei
命令结果示例如下,其中IP为节点主机IP地址,NODE为节点主机名称。
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES huawei-csi-node-g6f7z 3/3 Running 0 14s <host2-ip> <host2-name> <none> <none>
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群中huawei-csi-node服务所在节点
进入日志目录。
cd /var/log/huawei
执行以下命令,查看容器自定义输出日志。
vi huawei-csi-node
进入容器目录。
cd /var/log/containers
执行以下命令, 查看容器标准输出日志。
vi huawei-csi-node-<name>_huawei-csi_huawei-csi-driver-<container-id>.log
8.2.3 - 日志收集
前置检查
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群内有oceanctl工具的节点。
执行以下命令,显示版本号为v4.9.0。
oceanctl version
命令结果示例如下:
Oceanctl Version: v4.9.0
执行oceanctl collect logs –help命令,返回信息如下。
$ oceanctl collect logs --help Collect logs of one or more nodes in specified namespace in Kubernetes Usage: oceanctl collect logs [flags] Examples: # Collect logs of all nodes in specified namespace oceanctl collect logs -n <namespace> # Collect logs of specified node in specified namespace oceanctl collect logs -n <namespace> -N <node> # Collect logs of all nodes in specified namespace oceanctl collect logs -n <namespace> -a # Collect logs of all nodes in specified namespace with a maximum of 50 nodes collected at the same time oceanctl collect logs -n <namespace> -a --threads-max=50 # Collect logs of specified node in specified namespace oceanctl collect logs -n <namespace> -N <node> -a Flags: -a, --all Collect all nodes messages -h, --help help for logs -n, --namespace string namespace of resources -N, --nodename string Specify the node for which information is to be collected. --threads-max int set maximum number[1~1000] of threads for nodes to be collected. (default 50) Global Flags: --log-dir string Specify the directory for printing log files. (default "/var/log/huawei")
执行以下命令,检查Pod是否正常启动,其中,huawei-csi为CSI安装的命名空间。
kubectl get deployment -n huawei-csi
命令结果示例如下:
NAME READY UP-TO-DATE AVAILABLE AGE huawei-csi-controller 1/1 1 1 21h
使用oceanctl收集CSI命名空间下所有日志
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录 前置检查 章节中检查的节点。
执行oceanctl collect logs -n <namespace> -a –threads-max=<max_node_processing_num>命令,收集集群内所有CSI容器所在节点的CSI日志,其中threads-max参数指定了同时收集日志的最大节点数量,默认为50,可以根据主机性能与负载情况配置。
oceanctl collect logs -n huawei-csi -a --threads-max=10
检查/tmp目录下生成的日志压缩包,可以使用unzip <zip_name> -d collect_logs解压日志压缩包,其中<zip_name>为压缩包的名字。
# date Wed Sep 20 02:49:24 EDT 2023 # ls huawei-csi-2023-09-20-02:48:22-all.zip
使用oceanctl收集CSI单个节点日志
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录 前置检查 章节中检查的节点。
执行oceanctl collect logs -n <namespace> -N <nodeName>命令,收集集群内所有CSI容器所在节点的CSI日志。
oceanctl collect logs -n huawei-csi -N node-1
检查/tmp目录下生成的日志压缩包,可以使用unzip <zip_name> -d collect_logs解压日志压缩包,其中<zip_name>为压缩包的名字。
# date Thu Sep 21 04:08:47 EDT 2023 # ls huawei-csi-2023-09-21-04:05:15-node-1.zip
8.3 - 下载容器镜像
使用containerd下载容器镜像
执行以下命令,下载镜像到本地。其中 image:tag 表示需要拉取的镜像及其标签。
ctr image pull <image>:<tag>
执行以下命令,导出镜像到文件。其中 image:tag 表示需要导出的镜像,file 表示镜像导出后的文件名称。
ctr image export <file>.tar <image>:<tag>
使用Docker下载容器镜像
执行以下命令,下载镜像到本地。其中 image:tag 表示需要拉去的镜像。
docker pull <image>:<tag>
执行以下命令,导出镜像到文件。其中 image:tag 表示需要导出的镜像,file 表示镜像导出后的文件名称。
docker save <image>:<tag> -o <file>.tar
使用Podman下载容器镜像
执行以下命令,下载镜像到本地。其中 image:tag 表示需要拉去的镜像。
podman pull <image>:<tag>
执行以下命令,导出镜像到文件。其中 image:tag 表示需要导出的镜像,file 表示镜像导出后的文件名称。
podman save <image>:<tag> -o <file>.tar
8.4 - 更新huawei-csi-controller或huawei-csi-node服务
当您需要更新huawei-csi-controller或huawei-csi-node服务时,例如修改huawei-csi-controller服务的副本数时,执行此操作。
操作步骤
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
进入/helm/esdk 目录,执行以下命令,获取原有服务配置文件。其中helm-huawei-csi为旧版本安装时指定的Helm Chart名称,huawei-csi为旧版本安装时指定的Helm Chart命名空间。组件包路径请参考 表1 。
helm get values helm-huawei-csi -n huawei-csi -a > ./update-values.yaml
执行 vi update-values.yaml 命令打开 2 中获取的文件,参考 Helm values.yaml参数说明 修改配置项,修改完成后,按Esc,并输入 :wq!,保存修改。
执行以下命令更新华为CSI服务。
helm upgrade helm-huawei-csi ./ -n huawei-csi -f ./update-values.yaml
8.5 - 修改日志输出模式
huawei-csi支持两种日志输出模式,分别是file和console。file指的是输出到固定的日志目录(例如:/var/log/huawei);console指的是输出到容器标准目录。用户可以根据自身需求自行设置日志输出模式,默认为file.
操作步骤
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
进入/helm/esdk 目录,执行以下命令,获取原有服务配置文件。其中helm-huawei-csi为旧版本安装时指定的Helm Chart名称,huawei-csi为旧版本安装时指定的Helm Chart命名空间。组件包路径请参考 表1 。
helm get values helm-huawei-csi -n huawei-csi -a > ./update-values.yaml
执行vi update-values.yaml命令打开 2 中获取的文件,修改配置项,修改完成后,按Esc,并输入 :wq!,保存修改。
# 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.huawei.com # Endpoint, it is strongly recommended not to modify this parameter endpoint: /csi/csi.sock # DR Endpoint, it is strongly recommended not to modify this parameter drEndpoint: /csi/dr-csi.sock # Maximum number of concurrent disk scans or detaches, support 1~10 connectorThreads: 4 # Flag to enable or disable volume multipath access, support [true, false] volumeUseMultipath: true # Multipath software used by fc/iscsi. support [DM-multipath, HW-UltraPath, HW-UltraPath-NVMe] scsiMultipathType: DM-multipath # Multipath software used by roce/fc-nvme. only support [HW-UltraPath-NVMe] nvmeMultipathType: HW-UltraPath-NVMe # Timeout interval for waiting for multipath aggregation when DM-multipath is used on the host. support 1~600 scanVolumeTimeout: 3 # Timeout interval for running command on the host. support 1~600 execCommandTimeout: 30 # check the number of paths for multipath aggregation # Allowed values: # true: the number of paths aggregated by DM-multipath is equal to the number of online paths # false: the number of paths aggregated by DM-multipath is not checked. # Default value: false allPathOnline: false # Interval for updating backend capabilities. support 60~600 backendUpdateInterval: 60 # Huawei-csi-controller log configuration controllerLogging: # Log record type, support [file, console] module: file # Log Level, support [debug, info, warning, error, fatal] level: info # Directory for storing logs fileDir: /var/log/huawei # Size of a single log file fileSize: 20M # Maximum number of log files that can be backed up. maxBackups: 9 # Huawei-csi-node log configuration nodeLogging: # Log record type, support [file, console] module: file # Log Level, support [debug, info, warning, error, fatal] level: info # Directory for storing logs fileDir: /var/log/huawei # Size of a single log file fileSize: 20M # Maximum number of log files that can be backed up. maxBackups: 9
执行以下命令更新日志配置。
helm upgrade helm-huawei-csi ./ -n huawei-csi -f ./update-values.yaml
8.6 - 开启ReadWriteOncePod功能门
ReadWriteOnce访问模式是Kubernetes v1.22版本为PV和PVC引入的第四种访问模式。如果您使用ReadWriteOncePod访问模式的PVC创建一个Pod,Kubernetes会确保该Pod是整个集群中唯一可以读取或写入该PVC的Pod。
若Kubernetes版本小于v1.29,需要先在kube-apiserver、kube-scheduler和kubelet的feature-gates中开启ReadWriteOncePod特性才能使用。
当前CCE或CCE Agile平台不支持开启ReadWriteOncePod功能门
操作步骤
为kube-apiserver启用ReadWriteOncePod功能门。
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行vi /etc/kubernetes/manifests/kube-apiserver.yaml命令,按I或Insert进入编辑状态,为 kube-apiserver容器添加参数–feature-gates=ReadWriteOncePod=true。修改完成后,按Esc,并输入 :wq!,保存修改。
... spec: containers: - command: - kube-apiserver - --feature-gates=ReadWriteOncePod=true ...
在编辑完成后,Kubernetes会自动应用更新,不需要手动更新。
为kube-scheduler启用ReadWriteOncePod功能门。
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行vi /etc/kubernetes/manifests/kube-scheduler.yaml命令,按I或Insert进入编辑状态,为kube-scheduler容器添加参数–feature-gates=ReadWriteOncePod=true。修改完成后,按Esc,并输入 :wq!,保存修改。
… spec: containers: - command: - kube-scheduler - --feature-gates=ReadWriteOncePod=true ...
在编辑完成后,Kubernetes会自动应用更新,不需要手动更新。
为kubelet启用ReadWriteOncePod功能门。
由于动态Kubelet配置功能在v1.22中已弃用,并且在v1.24中删除,因此集群中每个worker节点上的kubelet都需要执行以下操作。使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意worker节点。
执行vi /var/lib/kubelet/config.yaml命令,按I或Insert进入编辑状态,为KubeletConfiguration对象的featureGates字段添加ReadWriteOncePod: true,如果没有featureGates字段请一并添加。修改完成后,按Esc,并输入 :wq!,保存修改。
apiVersion: kubelet.config.k8s.io/v1beta1 featureGates: ReadWriteOncePod: true ...
kubelet配置文件的默认路径为/var/lib/kubelet/config.yaml,请根据实际情况填写。在配置完成后,执行systemctl restart kubelet命令重启kubelet。
8.7 - 配置非root用户访问Kubernetes集群
操作步骤
拷贝Kubernetes集群的认证文件,/etc/kubernetes/admin.conf修改为实际使用的认证文件。
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
修改认证文件的用户与用户组。
sudo chown $(id -u):$(id -g) $HOME/.kube/config
配置当前用户的KUBECONFIG环境变量,以Ubuntu 20.04举例如下。
echo "export KUBECONFIG=$HOME/.kube/config" >> ~/.bashrc source ~/.bashrc
8.8 - 配置IPv6
本章节介绍如何使用华为CSI完成IPv6的配置。
8.8.1 - 首次安装华为CSI时配置IPv6
本章节介绍首次安装华为CSI时如何指定IPv6。
前提条件
- 仅存储后端类型为oceanstor-nas、oceanstor-san和oceanstor-dtree时,支持配置为IPv6。
- 主机环境、Kubernetes集群环境已支持IPv6协议。可参考 Kubernetes官方IPv4/IPv6双栈配置 。
操作步骤
执行vi values.yaml命令打开配置文件,修改service.ipFamilyPolicy和service.ipFamilies配置项,具体参数描述见 表5 。
修改示例如下:
service: ipFamilyPolicy: SingleStack ipFamilies: - IPv6
执行以下命令查看huawei-csi命名空间下service的状态。
kubectl get service -n huawei-csi
命令结果示例如下:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE huawei-csi-controller ClusterIP fd00:10:96::8136 <none> 4433/TCP 19m
执行以下命令查看huawei-csi-controller service的ipFamilies字段值。
kubectl get svc -n huawei-csi huawei-csi-controller -o=jsonpath='{.spec.ipFamilies}'
命令结果示例如下:
["IPv6"]
执行以下命令查看huawei-csi-controller service的ipFamilyPolicy字段值。
kubectl get svc -n huawei-csi huawei-csi-controller -o=jsonpath='{.spec.ipFamilyPolicy}'
命令结果示例如下:
SingleStack
8.8.2 - 华为CSI由IPv4切换至IPv6
本章节介绍更新华为CSI时如何由IPv4切换为IPv6。
前提条件
- 主机环境、Kubernetes集群环境已支持IPv6协议。可参考 Kubernetes官方IPv4/IPv6双栈配置 。
- 华为CSI已安装且服务正常启动。
操作步骤
执行以下命令,获取原有服务配置文件。其中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命令打开 1 中获取的文件,修改service.ipFamilyPolicy和service.ipFamilies配置项,具体参数描述见 表5 。
修改示例如下:
service: ipFamilyPolicy: SingleStack ipFamilies: - IPv6
切换IPv6前,先执行以下命令,删除huawei-csi命名空间下的service。
kubectl delete service -n huawei-csi --all
执行以下命令,升级华为CSI。其中helm-huawei-csi为指定的Helm Chart名称,huawei-csi为指定的Helm Chart命名空间,update-values.yaml为 1 中获取的文件。
helm upgrade helm-huawei-csi ./ -n huawei-csi -f ./values.yaml -f ./update-values.yaml
执行以下命令查询更新后的huawei-csi-controller service的ipFamilies参数。
kubectl get svc -n huawei-csi huawei-csi-controller -o=jsonpath='{.spec.ipFamilies}'
预期结果如下:
["IPv6"]
8.9 - 配置存储拓扑感知
在Kubernetes集群中,可以根据节点的拓扑标签以及存储后端支持的拓扑能力调度和发放资源。
前提条件
需要在集群中的worker节点完成拓扑的标签配置,标签配置方法如下:
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行以下命令,查看当前集群中的worker节点信息。
kubectl get node
命令结果示例如下:
NAME STATUS ROLES AGE VERSION node01 Ready controlplane,etcd,worker 42d v1.22.3 node02 Ready worker 42d v1.22.3 node03 Ready worker 42d v1.22.3
执行以下命令,给worker节点配置拓扑标签。其中_ nodename _为worker节点名称, key 和 value 参数说明请参考 表1 。
kubectl label node <nodename> <key>=<value>
表 1 拓扑标签参数说明
- 拓扑标签必须以topology.kubernetes.io开头。拓扑标签示例:
- 示例1:topology.kubernetes.io/region=China-west
- 示例2:topology.kubernetes.io/zone=ChengDu
- 示例3:topology.kubernetes.io/protocol.iscsi=csi.huawei.com
- 示例4:topology.kubernetes.io/protocol.fc=csi.huawei.com
- 同一节点上拓扑标签中同一个key只能支持一个value值。
- 如果同一节点上拓扑标签中同时配置多个protocol,配置StorageClass时,StorageClass只需要满足其中一个protocol即可。
- 如果同一节点上拓扑标签中同时配置region和zone,配置StorageClass时,StorageClass需要满足全部筛选条件。
执行命令, 查看当前集群中所有worker节点的标签信息。
kubectl get nodes -o=jsonpath='{range .items[*]}[{.metadata.name}, {.metadata.labels}]{"\n"}{end}' | grep --color "topology.kubernetes.io"
命令结果示例如下:
[node01,"beta.kubernetes.io/arch":"amd64","beta.kubernetes.io/os":"linux","kubernetes.io/arch":"amd64","kubernetes.io/hostname":"node01","kubernetes.io/os":"linux","node-role.kubernetes.io/controlplane":"true","node-role.kubernetes.io/etcd":"true","node-role.kubernetes.io/worker":"true","topology.kubernetes.io/zone":"ChengDu"}]
操作步骤
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
进入Helm工程的目录下,如果无法找到之前的Helm工程,则将组件包中的helm目录拷贝到master节点的任意目录下,组件包路径请参考 表1 。
进入后端服务配置目录/examples/backend/下,备份backend.yaml文件
cp backend.yaml backend.yaml.bak
执行 vi backend.yaml 命令打开文件,按需求配置拓扑感知,示例如下所示。修改完成后,按 Esc 并输入 :wq! ,保存修改。
storage: "oceanstor-san" name: "dorado-iscsi-155" namespace: "huawei-csi" urls: - "https://192.168.129.155:8088" pools: - "StoragePool001" parameters: protocol: "iscsi" portals: - "10.10.30.20" - "10.10.30.21" supportedTopologies: - { "topology.kubernetes.io/region": "China-west", "topology.kubernetes.io/zone": "ChengDu" } - { "topology.kubernetes.io/region": "China-south","topology.kubernetes.io/zone": "ShenZhen" } maxClientThreads: "30"
执行以下命令删除待修改存储后端,其中“dorado-iscsi-155”为存储后端名称。
oceanctl delete backend dorado-iscsi-155 -n huawei-csi
执行以下命令创建存储后端。
oceanctl create backend -f ../examples/backend/backend.yaml -i yaml
根据命令提示输入存储用户名和密码。
Please enter this backend user name:admin Please enter this backend password:
执行** vi StorageClass.yaml** 命令,修改yaml文件。按 I 或 Insert 进入编辑状态,在yaml文件下增加相关参数,详细参数说明请参见 表2 。修改完成后,按 Esc 并输入 :wq! ,保存修改。
在StorageClass.yaml文件中添加以下配置项。
示例1: 在StorageClass中配置zone和region信息
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: example-storageclass provisioner: csi.huawei.com parameters: volumeType: lun allocType: thin volumeBindingMode: WaitForFirstConsumer allowedTopologies: - matchLabelExpressions: - key: topology.kubernetes.io/zone values: - ChengDu - key: topology.kubernetes.io/region values: - China-west
示例2: 在StorageClass中配置协议信息
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: protocol-example-storageclass provisioner: csi.huawei.com parameters: volumeType: lun allocType: thin volumeBindingMode: WaitForFirstConsumer allowedTopologies: - matchLabelExpressions: - key: topology.kubernetes.io/protocol.iscsi values: - csi.huawei.com
表 2 StorageClass参数说明
可配置“WaitForFirstConsumer”或“Immediate”
“WaitForFirstConsumer”:表示延迟PersistentVolume的绑定和调配,直到创建使用PVC的Pod。
“key”:可支持配置“topology.kubernetes.io/zone”,“topology.kubernetes.io/region”,
topology.kubernetes.io/protocol.<protocol>, 其中<protocol>为协议类型, 例如:iscsi, fc, nfs等。
“key”如果是“topology.kubernetes.io/zone”,“topology.kubernetes.io/region”,“value”值需要和前提条件中设置的拓扑标签保持一致。
“key”如果是topology.kubernetes.io/protocol.<protocol>, “value”值固定为“csi.huawei.com”
执行以下命令,基于该yaml文件创建StorageClass。
kubectl create -f StorgeClass.yaml
使用该StorageClass创建具有拓扑能力的PVC,详细操作请参考 表1 。
8.10 - 配置ALUA特性
ALUA(Asymmetric Logical Unit Access,非对称逻辑单元访问),是一种多目标器端口访问模型。在多路径状态下,ALUA标准提供了一种将卷的Active/Passive模型呈现给主机的方式。同时还提供了端口的可访问状态切换接口,可用来实现卷工作控制器切换等。例如,卷在一个控制器故障时,可以将该控制器的端口置为Unavailable,支持ALUA的主机多路径软件收到该状态后,会将I/O切换到另一端控制器。
8.10.1 - 配置华为企业存储后端的ALUA参数
华为企业存储针对ALUA的配置请参考产品对应的主机连通性指南文档说明。
针对不同的操作系统,ALUA配置可能有所不同。进入 华为技术支持 ,在搜索输入框中输入“主机连通性指南”,单击搜索。在搜索结果中,选择对应操作系统的主机连通性指南。结合实际需要根据指南的说明进行ALUA配置。华为CSI将在华为存储上对该主机的启动器应用您设置的配置项。
已经发放的Pod的节点不会主动更改ALUA信息,需要通过在该节点重新发放Pod才会变更主机ALUA配置。
OceanStor V5系列系列存储后端的ALUA参数
华为CSI支持的OceanStor V5系列存储的ALUA参数见 表1 。
表 1 华为CSI支持的OceanStor V5系列存储的ALUA参数说明
主机名通常使用 cat /etc/hostname 可获取。支持正则表达式方式匹配,如当HostName=“*”时,该条配置对任意主机名的主机生效。可参考《正则表达式》。 当计算节点的主机名可已匹配多条ALUA配置选项,会根据匹配的精确度进行排序,使用第一条ALUA配置选项。排序规则见ALUA配置项匹配主机名的规则。 | ||
| ||
| ||
| ||
|
以OceanStor 18500 V5存储对接Red Hat操作系统为例,主机连通性指南见《华为SAN存储在Red Hat系统下的主机连通性指南》。
如下ALUA设置示例,是非双活存储场景下,OceanStor 18500 V5存储的Red Hat操作系统的连通性指南的推荐设置。本例中假设Kubernetes集群中计算节点“myhost01”的操作系统是RHEL 5.x,其他计算节点操作系统均为RHEL 7.x。根据推荐,RHEL 5.x的切换模式应该为“不使用ALUA”,RHEL 7.x的切换模式应该为“通用ALUA”。
storage: oceanstor-san
name: oceanstor-iscsi-155
urls:
- https://192.168.129.155:8088
- https://192.168.129.156:8088
pools:
- StoragePool001
parameters:
protocol: iscsi
portals:
- 192.168.128.120
- 192.168.128.121
ALUA:
^myhost01$:
MULTIPATHTYPE: 1
FAILOVERMODE: 2
PATHTYPE: 0
"*":
MULTIPATHTYPE: 1
FAILOVERMODE: 1
PATHTYPE: 0
OceanStor和OceanStor Dorado系列存储后端的ALUA参数
华为CSI支持的OceanStor和OceanStor Dorado系列存储的ALUA参数见 表2 。
OceanStor和OceanStor Dorado系列存储在默认情况下启动器主机访问模式为“均衡模式”,因此不建议对OceanStor和OceanStor Dorado系列存储配置ALUA参数。
表 2 OceanStor和OceanStor Dorado系列存储的ALUA参数说明
主机名通常使用 cat /etc/hostname 可获取。支持正则表达式方式匹配,如当HostName=“*”时,该条配置对任意主机名的主机生效。可参考《正则表达式》。 当计算节点的主机名可已匹配多条ALUA配置选项,会根据匹配的精确度进行排序,使用第一条ALUA配置选项。排序规则见ALUA配置项匹配主机名的规则。 | ||
| ||
|
以OceanStor Dorado 18500存储对接Red Hat操作系统为例,主机连通性指南见《OceanStor Dorado & OceanStor在Red Hat下的主机连通性指南》。
如下ALUA设置示例,是非双活存储场景下,OceanStor Dorado 18500存储的Red Hat操作系统的连通性指南的推荐设置。
storage: "oceanstor-san"
name: "dorado-iscsi-155"
urls:
- "https://192.168.129.155:8088"
- "https://192.168.129.156:8088"
pools:
- "StoragePool001"
parameters:
protocol: "iscsi"
portals:
- "192.168.128.120"
- "192.168.128.121"
ALUA:
"*":
accessMode: 0
ALUA配置项匹配主机名的规则
如果设置的主机名规则精确匹配的业务节点主机名,则使用该主机名规则对应的ALUA配置项。
如配置项1中主机名规则为“*”,配置项2中的主机名规则为“^myhost01$”。当计算节点的主机名是“myhost01”时,精确匹配配置项2,华为CSI将使用配置项2中的配置应用到存储侧。
如果设置的主机名规则无法精确匹配的业务节点主机名,则直接使用正则匹配到的第一条ALUA配置项。
如配置项1中主机名规则为“myhost0[0-9]”,配置项2中的主机名规则为“myhost0[5-9]”,配置项1的优先级高于配置项2。当计算节点的主机名是“myhost06”时,两个配置项均可以匹配,此时华为CSI将使用配置项1中的配置应用到存储侧。
8.10.2 - 配置分布式存储后端的ALUA参数
华为分布式存储针对ALUA的配置请参考产品对应的主机连通性指南文档说明。
针对不同的操作系统,ALUA配置可能有所不同。进入 华为技术支持 ,在搜索输入框中输入“主机连通性指南”,单击搜索。在搜索结果中,选择对应操作系统的主机连通性指南。结合实际需要根据指南的说明进行ALUA配置。华为CSI将在华为存储上对该主机的启动器应用您设置的配置项。
已经发放的Pod的节点不会主动更改ALUA信息,需要通过在该节点重新发放Pod才会变更主机ALUA配置。 分布式存储非双活场景,存储系统自身为Active/Active模式,选择“启用ALUA”没有实际意义,建议选择存储默认的“禁用ALUA”。因此不建议对分布式存储配置ALUA参数。
华为CSI支持的分布式存储的ALUA参数见 表1 。
表 1 分布式存储ALUA参数说明
主机名通常使用 cat /etc/hostname 可获取。支持正则表达式方式匹配,如当HostName=“*”时,该条配置对任意主机名的主机生效。可参考《正则表达式》。 当计算节点的主机名可已匹配多条ALUA配置选项,会根据匹配的精确度进行排序,使用第一条ALUA配置选项。排序规则见ALUA配置项匹配主机名的规则。 | ||
| 非双活场景,存储系统自身为Active/Active模式,选择“启用ALUA”没有实际意义,建议选择“禁用ALUA”。当前华为CSI未支持SAN双活场景,请谨慎启用ALUA。 | |
|
ALUA配置项匹配主机名的规则
如果设置的主机名规则精确匹配的业务节点主机名,则使用该主机名规则对应的ALUA配置项。
如配置项1中主机名规则为“*”,配置项2中的主机名规则为“^myhost01$”。当计算节点的主机名是“myhost01”时,精确匹配配置项2,华为CSI将使用配置项2中的配置应用到存储侧。
如果设置的主机名规则无法精确匹配的业务节点主机名,则直接使用正则匹配到的第一条ALUA配置项。
如配置项1中主机名规则为“myhost0[0-9]”,配置项2中的主机名规则为“myhost0[5-9]”,配置项1的优先级高于配置项2。当计算节点的主机名是“myhost06”时,两个配置项均可以匹配,此时华为CSI将使用配置项1中的配置应用到存储侧。
8.10.3 - OceanStor V5系列ALUA特性配置策略样例
例1.配置文件如下:
parameters:
ALUA:
"*":
MULTIPATHTYPE: 1
FAILOVERMODE: 3
SPECIALMODETYPE: 0
PATHTYPE: 0
node1:
MULTIPATHTYPE: 1
FAILOVERMODE: 3
SPECIALMODETYPE: 0
PATHTYPE: 1
对于主机名为“node1”,上述ALUA配置段都能用于配置启动器。根据 配置华为企业存储后端的ALUA参数 中的配置策略规则,优先级顺序为第2条配置段(HostName为"node1")高于第1条配置段(HostName为"*")。
例2.配置文件如下:
parameters:
ALUA:
node[0-9]:
MULTIPATHTYPE: 1
FAILOVERMODE: 3
SPECIALMODETYPE: 0
PATHTYPE: 0
node[5-7]:
MULTIPATHTYPE: 1
FAILOVERMODE: 3
SPECIALMODETYPE: 0
PATHTYPE: 1
对于主机名为“node6”的主机,上述ALUA配置段都能用于配置启动器。根据 配置华为企业存储后端的ALUA参数 中的配置策略规则,选择第一条ALUA配置段来配置启动器。
例3.配置文件如下:
parameters:
ALUA:
node$:
MULTIPATHTYPE: 1
FAILOVERMODE: 3
SPECIALMODETYPE: 0
PATHTYPE: 0
node10$:
MULTIPATHTYPE: 1
FAILOVERMODE: 3
SPECIALMODETYPE: 0
PATHTYPE: 1
根据 配置华为企业存储后端的ALUA参数 中的配置策略规则,对于主机名为“node1”的主机,选择第一条ALUA配置段来配置启动器;对于主机名为“node10”的主机,选择第二条ALUA配置段来配置启动器。^表示匹配字符串的开头,$表示匹配字符串的结尾。
8.10.4 - OceanStor Dorado ALUA特性配置策略样例
例1.配置文件如下:
parameters:
ALUA:
"*":
accessMode: 1
hyperMetroPathOptimized: 1
node1:
accessMode: 1
hyperMetroPathOptimized: 0
对于主机名为“node1”,上述ALUA配置段都能用于配置启动器。根据 配置华为企业存储后端的ALUA参数 中的配置策略规则,优先级顺序为第2条配置段(HostName为"node1")高于第1条配置段(HostName为"*")。
例2.配置文件如下:
parameters:
ALUA:
node[0-9]:
accessMode: 1
hyperMetroPathOptimized: 1
node[5-7]:
accessMode: 1
hyperMetroPathOptimized: 0
对于主机名为“node6”的主机,上述ALUA配置段都能用于配置启动器。根据 配置华为企业存储后端的ALUA参数 中的配置策略规则,选择第一条ALUA配置段来配置启动器。
例3.配置文件如下:
parameters:
node1$:
node[0-9]:
accessMode: 1
hyperMetroPathOptimized: 1
node10$:
accessMode: 1
hyperMetroPathOptimized: 0
根据 配置华为企业存储后端的ALUA参数 中的配置策略规则,对于主机名为“node1”的主机,选择第一条ALUA配置段来配置启动器;对于主机名为“node10”的主机,选择第二条ALUA配置段来配置启动器。^表示匹配字符串的开头,$表示匹配字符串的结尾。
8.10.5 - 分布式存储ALUA特性配置策略样例
例1.配置文件如下:
parameters:
ALUA:
"*":
switchoverMode: Enable_alua
pathType: optimal_path
node1:
switchoverMode: Enable_alua
pathType: non_optimal_path
对于主机名为“node1”,上述ALUA配置段都能用于配置启动器。根据 配置分布式存储后端的ALUA参数 中的配置策略规则,优先级顺序为第2条配置段(HostName为"node1")高于第1条配置段(HostName为"*")。
例2.配置文件如下:
parameters:
ALUA:
node[0-9]:
switchoverMode: Enable_alua
pathType: optimal_path
node[5-7]:
switchoverMode: Enable_alua
pathType: non_optimal_path
对于主机名为“node6”的主机,上述ALUA配置段都能用于配置启动器。根据 配置分布式存储后端的ALUA参数 中的配置策略规则,选择第一条ALUA配置段来配置启动器。
例3.配置文件如下:
parameters:
ALUA:
node1$:
switchoverMode: Enable_alua
pathType: optimal_path
node10$:
switchoverMode: Enable_alua
pathType: non_optimal_path
根据 配置分布式存储后端的ALUA参数 中的配置策略规则,对于主机名为“node1”的主机,选择第一条ALUA配置段来配置启动器;对于主机名为“node10”的主机,选择第二条ALUA配置段来配置启动器。^表示匹配字符串的开头,$表示匹配字符串的结尾。
9 - 故障处理
9.1 - 华为CSI服务相关问题
9.1.1 - 启动huawei-csi-node失败,提示错误为:“/var/lib/iscsi is not a directory”
现象描述
启动huawei-csi-node时,无法启动huawei-csi-node服务, 使用kubectl describe daemonset huawei-csi-node -n huawei-csi命令查看,提示错误为:“/var/lib/iscsi is not a directory”。
根因分析
huawei-csi-node中容器内部无/var/lib/iscsi目录。
解决措施或规避方法
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
进入Helm工程的目录下,如果无法找到之前的Helm工程,则将组件包中的helm目录拷贝到master节点的任意目录下,组件包路径请参考 表1 。
进入下一级目录templates,找到huawei-csi-node.yaml文件。
cd /templates
执行以下命令,将huawei-csi-node.yaml > volumes > iscsi-dir > hostPath中“path“设置为“/var/lib/iscsi“ ,然后保存并退出文件。
vi huawei-csi-node.yaml
执行以下命令升级Helm chart。升级命令将更新Deployment、DaemonSet和RBAC资源。其中,helm-huawei-csi为自定义的chart名称,huawei-csi为自定义的命名空间。
helm upgrade helm-huawei-csi ./ -n huawei-csi -f values.yaml
命令结果示例如下:
Release "helm-huawei-csi" has been upgraded. Happy Helming! NAME: helm-huawei-csi LAST DEPLOYED: Thu Jun 9 07:58:15 2022 NAMESPACE: huawei-csi STATUS: deployed REVISION: 2 TEST SUITE: None
9.1.2 - 启动华为CSI服务失败,提示错误:“/etc/localtime is not a file”
现象描述
安装部署CSI时,Pod运行不起来,处于ContainerCreating状态,查看Pod中有打印告警事件:/etc/localtime is not a file。
根因分析
容器挂载主机/etc/localtime文件时,识别类型有误,容器挂载不上主机侧/etc/localtime文件,导致Pod运行不起来。
操作步骤
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
kubectl get pod -n huawei-csi
命令结果示例如下,其中huawei-csi为CSI服务部署的命名空间。
NAME READY STATUS RESTARTS AGE huawei-csi-controller-6dfcc4b79f-9vjtq 9/9 ContainerCreating 0 24m huawei-csi-controller-6dfcc4b79f-csphc 9/9 ContainerCreating 0 24m huawei-csi-node-g6f4k 3/3 ContainerCreating 0 20m huawei-csi-node-tqs87 3/3 ContainerCreating 0 20m
执行命令,通过查看容器的“Events”参数。
kubectl describe pod huawei-csi-controller-6dfcc4b79f-9vjtq -n huawei-csi
命令结果示例如下。其中,huawei-csi-controller-6dfcc4b79f-9vjtq 为 2 中查找到的状态显示为“ContainerCreating”的Pod名称,huawei-csi为该Pod所在的命名空间。
... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 96s default-scheduler Successfully assigned huawei-csi/huawei-csi-controller-6dfcc4b79f-9vjtq to node1 Warning FailedMount 33s (x8 over 96s) kubelet MountVolume.SetUp failed for volume "host-time" : hostPath type check failed: /etc/localtime is not a file
执行命令cd /helm/esdk/templates,进入到CSI的安装包路径下。路径请参见 表1 。
以huawei-csi-controller.yaml文件为例,执行以下命令,查看文件内容。
vi huawei-csi-controller.yaml
找到对应volumes配置下的host-time挂载项,删除type: File这一行配置内容。对templates目录下涉及该配置项的huawei-csi-node.yaml部署文件,执行相同的操作。
... ... volumes: - hostPath: path: /var/log/ type: Directory name: log - hostPath: path: /etc/localtime type: File name: host-time ... ...
参考 使用Helm卸载 卸载服务后,重新安装服务。
执行以下命令,查看华为CSI服务Pod运行状态为Running。
kubectl get pod -n huawei-csi
命令结果示例如下:
NAME READY STATUS RESTARTS AGE huawei-csi-controller-6dfcc4b79f-9vjts 9/9 Running 0 24m huawei-csi-controller-6dfcc4b79f-csphb 9/9 Running 0 24m huawei-csi-node-g6f41 3/3 Running 0 20m huawei-csi-node-tqs85 3/3 Running 0 20m
9.1.3 - 启动huawei-csi服务时,服务启动异常, 状态显示InvalidImageName
现象描述
启动huawei-csi时,无法启动huawei-csi服务(huawei-csi-controller服务或者huawei-csi-node服务),使用kubectl get pod -A | grep huawei命令查看,显示状态为InvalidImageName
kubectl get pod -A | grep huawei
命令结果示例如下:
huawei-csi huawei-csi-controller-fd5f97768-qlldc 6/9 InvalidImageName 0 16s
huawei-csi huawei-csi-node-25txd 2/3 InvalidImageName 0 15s
根因分析
controller和node的yaml配置文件中,配置Huawei CSI的镜像版本号错误。例如:
...
- name: huawei-csi-driver
image: huawei-csi:4.9.0
...
解决措施或规避方法
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行以下命令,修改huawei-csi-node服务的配置文件。按I或Insert进入编辑状态,修改相关参数。修改完成后,按Esc,并输入 :wq!,保存修改。
kubectl edit daemonset huawei-csi-node -o yaml -n=huawei-csi
- 示例yaml文件中huawei-csi-driver的参数image配置项,修改华为CSI镜像huawei-csi:4.9.0。
containers: ... - name: huawei-csi-driver image: huawei-csi:4.9.0
执行以下命令,修改huawei-csi-controller服务的配置文件。按I或Insert进入编辑状态,修改相关参数。修改完成后,按Esc,并输入 :wq! ,保存修改。
kubectl edit deployment huawei-csi-controller -o yaml -n=huawei-csi
- 示例yaml文件中huawei-csi-driver的参数image配置项,修改华为CSI镜像huawei-csi:4.9.0。
containers: ... - name: huawei-csi-driver image: huawei-csi:4.9.0
等待huawei-csi-node和huawei-csi-controller服务启动。
执行以下命令,查看huawei csi服务是否启动。
kubectl get pod -A | grep huawei
命令结果示例如下,Pod状态为“Running“说明服务启动成功。
huawei-csi huawei-csi-controller-58799449cf-zvhmv 9/9 Running 0 2m29s huawei-csi huawei-csi-node-7fxh6 3/3 Running 0 12m
9.2 - 存储后端相关问题
9.2.1 - 使用oceanctl工具创建后端失败,报错:context deadline exceeded
现象描述
用户使用oceanctl工具创建存储后端失败,控制台回显:“failed to call webhook: xxx :context deadline exceeded; error: exist status 1”。
根因分析
创建存储后端时,将会调用CSI提供的webhook服务校验与存储管理网络的连通性和存储账号密码信息,出现该问题原因可能是以下两种原因:
- 华为CSI校验存储管理网络连通性失败。
- kube-apiserver和CSI webhook通信异常。
华为CSI校验存储管理网络连通性失败
请按照以下步骤检查是否是华为CSI校验存储管理网络连通性失败。
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行命令,获取CSI服务信息。其中,huawei-csi为CSI服务部署的命名空间。
kubectl get pod -n huawei-csi -owide
命令结果示例如下:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES huawei-csi-controller-xxx 9/9 Running 0 19h host-ip1 host-1 <none> <none> huawei-csi-node-mnqbz 3/3 Running 0 19h host-ip1 host-1 <none> <none>
登录huawei-csi-controller所在节点,如 2 中的host-1。
进入到/var/log/huawei目录。
# cd /var/log/huawei
查看storage-backend-controller日志,以连接存储超时为例。
tail -n 1000 storage-backend-controller
日志示例如下:
2024-01-01 06:30:44.280661 1 [INFO]: Try to login https://192.168.129.155:8088/deviceManager/rest 2024-01-01 06:31:44.281626 1 [ERROR]: Send request method: POST, Url: https://192.168.129.155:8088/deviceManager/rest/xx/sessions, error: Post "https://192.168.129.155:8088/deviceManager/rest/xx/sessions": context deadline exceeded (Client.Timeout exceeded while awaiting headers) 2024-01-01 06:31:44.281793 1 [WARNING]: Login https://192.168.129.155:8088/deviceManager/rest error due to connection failure, gonna try another Url 2024-01-01 06:31:44.291668 1 [INFO]: Finished validateCreate huawei-csi/backend-test. 2024-01-01 06:31:44.291799 1 [ERROR]: Failed to validate StorageBackendClaim, error: unconnected
如果日志中有相关登录超时、登录失败或者请求耗时较长,请检查宿主机和存储连通性或网络情况。
如果日志中没有收到任何请求,则是kube-apiserver和CSI webhook通信异常。
kube-apiserver和CSI webhook通信异常
联系Kubernetes平台管理员查看kube-apiserver与CSI webhook网络问题。例如kube-apiserver存在HTTPS代理时可能无法访问CSI webhook服务。
临时规避方案中,将会删除webhook资源,该资源用于在创建存储后端时校验输入的账户信息是否正确和能否和存储建立连接,因此删除该资源仅影响创建后端时的校验,无其他功能影响,但需要注意以下几点。
- 请保证huawei-csi-controller服务所在宿主机能和存储通信。
- 请保证输入的账号密码正确。
可执行以下命令查看CSI webhook信息。
kubectl get validatingwebhookconfiguration storage-backend-controller.xuanwu.huawei.io
命令结果示例如下:
NAME WEBHOOKS AGE storage-backend-controller.xuanwu.huawei.io 1 4d22h
联系Kubernetes平台管理员检查kube-apiserver与CSI webhook是否存在通信异常。
临时规避方案:可执行以下命令删除webhook。
kubectl delete validatingwebhookconfiguration storage-backend-controller.xuanwu.huawei.io
创建存储后端,可参考 存储后端管理 。
如果kube-apiserver与CSI webhook通信恢复正常,需要重建webhook,执行以下命令,重启CSI Controller,通过指定“–replicas=*”恢复CSI Controller的副本数,下例为恢复至1个,请根据实际情况修改。
先将副本数修改为0。
kubectl scale deployment huawei-csi-controller -n huawei-csi --replicas=0
再将副本数恢复为原数量。
kubectl scale deployment huawei-csi-controller -n huawei-csi --replicas=1
9.2.2 - 使用oceanctl工具获取存储后端时,ONLINE字段值为false
现象描述
执行下列命令,查看存储后端状态:
oceanctl get backend
存储后端ONLINE字段值为false:
NAMESPACE NAME PROTOCOL STORAGETYPE SN STATUS ONLINE Url
huawei-csi backend-201-nas-nfs nfs oceanstor-nas XXXXXXXXXXXXXX000006 Bound false https://192.168.129.157:8088
根因分析
CSI使用创建存储后端时输入的账户和密码登录存储后端,若因为下列原因登录失败,则会将ONLINE字段值设置为false:
- 账户密码错误:该原因可能是在存储侧修改密码后,未在Kubernetes集群侧更新导致。参考下列 解决措施或规避方法 进行解决。
- 账户被锁定:该问题请参考 存储侧更新密码后账户被锁定 解决
解决措施或规避方法
- 获取最新的账户密码。
- 按照 更新存储后端密码 所示,更新存储后端密码。
9.2.3 - 存储侧更新密码后账户被锁定
现象描述
用户在存储侧修改后端密码之后,该后端账号被锁定。
根因分析
CSI登录存储时使用存储后端配置的账户和密码,当存储侧修改了该账户密码之后,CSI登录失败后会重试。以OceanStor Dorado存储为例,默认的登录策略是密码校验失败3次后将会锁定账户,因此当CSI重试超过3次之后,该账户就会被锁定。
解决措施或规避方法
如果后端配置的账户是admin,请执行以下命令,将huawei-csi-controller服务副本数置为0,如果使用的是非admin账户,忽略此步骤。
kubectl scale deployment huawei-csi-controller -n huawei-csi --replicas=0
使用admin账户登录存储,修改登录策略。以OceanStor Dorado存储为例,在DeviceManager管理界面,选择“设置 > 用户与安全 > 安全策略 >登录策略 >修改>密码锁定”,取消密码锁定。
如果如果后端配置的账户是admin,执行以下命令,通过“–replicas=*”恢复CSI Controller的副本数,下例为恢复至1个,请根据实际情况修改。如果使用的是非admin账户,忽略此步骤。
kubectl scale deployment huawei-csi-controller -n huawei-csi --replicas=1
使用oceanctl工具修改存储后端密码,修改后端密码请参考 更新存储后端 章节。
使用admin账户登录存储,修改登录策略,以OceanStor Dorado存储为例,在DeviceManager管理界面,选择“设置 > 用户与安全 > 安全策略 >登录策略 >修改>密码锁定”,恢复密码锁定。
9.3 - PVC相关问题
9.3.1 - 创建PVC时, PVC的状态为Pending
现象描述
执行完成PVC的创建操作,一段时间后,PVC的状态仍然处于Pending。
根因分析
原因1:由于没有提前创建指定名称的StorageClass,导致Kubernetes在创建PVC时无法找到指定StorageClass名称。
原因2:由于存储池能力和StorageClass能力不匹配,导致huawei-csi选择存储池失败。
原因3:由于存储RESTful接口执行返回具体错误码(例如:50331651),导致huawei-csi在执行创建PVC时失败。
原因4:由于存储在huawei-csi设定的超时时间内没有返回,huawei-csi向Kubernetes返回超时错误。
原因5:其他原因。
解决措施或规避方法
创建PVC时,如果PVC处于Pending状态,需要根据以下不同的原因采取不同的解决措施。
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行以下命令,查看PVC的详细信息。
kubectl describe pvc mypvc
根据PVC详细信息中Events信息,执行相应操作。
如果由原因1导致PVC处于Pending状态,执行以下步骤。
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning ProvisioningFailed 0s (x15 over 3m24s) persistentvolume-controller storageclass.storage.k8s.io "mysc" not found
如果由原因2导致PVC处于Pending状态,执行以下步骤。
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Provisioning 63s (x3 over 64s) csi.huawei.com_huawei-csi-controller-b59577886-qqzm8_58533e4a-884c-4c7f-92c3-6e8a7b327515 External provisioner is provisioning volume for claim "default/mypvc" Warning ProvisioningFailed 63s (x3 over 64s) csi.huawei.com_huawei-csi-controller-b59577886-qqzm8_58533e4a-884c-4c7f-92c3-6e8a7b327515 failed to provision volume with StorageClass "mysc": rpc error: code = Internal desc = failed to select pool, the capability filter failed, error: failed to select pool, the final filter field: replication, parameters map[allocType:thin replication:True size:1099511627776 volumeType:lun]. please check your storage class
如果由原因3导致PVC处于Pending状态,请联系华为工程师处理。
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Provisioning 63s (x4 over 68s) csi.huawei.com_huawei-csi-controller-b59577886-qqzm8_58533e4a-884c-4c7f-92c3-6e8a7b327515 External provisioner is provisioning volume for claim "default/mypvc" Warning ProvisioningFailed 62s (x4 over 68s) csi.huawei.com_huawei-csi-controller-b59577886-qqzm8_58533e4a-884c-4c7f-92c3-6e8a7b327515 failed to provision volume with StorageClass "mysc": rpc error: code = Internal desc = Create volume map[ALLOCTYPE:1 CAPACITY:20 DESCRIPTION:Created from Kubernetes CSI NAME:pvc-63ebfda5-4cf0-458e-83bd-ecc PARENTID:0] error: 50331651
如果由原因4导致PVC处于Pending状态,执行以下步骤。
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Provisioning 63s (x3 over 52s) csi.huawei.com_huawei-csi-controller-b59577886-qqzm8_58533e4a-884c-4c7f-92c3-6e8a7b327515 External provisioner is provisioning volume for claim "default/mypvc" Warning ProvisioningFailed 63s (x3 over 52s) csi.huawei.com_huawei-csi-controller-b59577886-qqzm8_58533e4a-884c-4c7f-92c3-6e8a7b327515 failed to provision volume with StorageClass "mysc": rpc error: code = Internal desc = context deadline exceeded (Client.Timeout exceeded while awaiting headers)
- 请先等待10分钟, 参考本章节再次检查PVC详细信息
- 如果还处于Pending状态,请联系华为工程师处理。
如果由原因5导致PVC处于Pending状态,请联系华为工程师处理。
9.3.2 - 删除PVC前,PVC的状态为Pending
现象描述
在执行删除PVC前,PVC的状态处于Pending。
根因分析
原因1:由于没有提前创建指定名称的StorageClass,导致Kubernetes在创建PVC时无法找到指定StorageClass名称。
原因2:由于存储池能力和StorageClass能力不匹配,导致huawei-csi选择存储池失败。
原因3:由于存储RESTful接口执行返回具体错误码(例如:50331651),导致huawei-csi在执行创建PVC时失败。
原因4:由于存储在huawei-csi设定的超时时间内没有返回,huawei-csi向Kubernetes返回超时错误。
原因5:其他原因。
解决措施或规避方法
删除Pending状态下的PVC,需要根据以下不同的原因采取不同的解决措施。
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行以下命令,查看PVC的详细信息。
kubectl describe pvc mypvc
根据PVC详细信息中Events信息,执行相应操作。
如果由原因1导致PVC处于Pending状态,可以执行 **kubectl delete pvc **mypvc 命令,删除PVC。
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning ProvisioningFailed 0s (x15 over 3m24s) persistentvolume-controller storageclass.storage.k8s.io "mysc" not found
如果由原因2导致PVC处于Pending状态,可以执行** kubectl delete pvc **mypvc 命令,删除PVC。
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Provisioning 63s (x3 over 64s) csi.huawei.com_huawei-csi-controller-b59577886-qqzm8_58533e4a-884c-4c7f-92c3-6e8a7b327515 External provisioner is provisioning volume for claim "default/mypvc" Warning ProvisioningFailed 63s (x3 over 64s) csi.huawei.com_huawei-csi-controller-b59577886-qqzm8_58533e4a-884c-4c7f-92c3-6e8a7b327515 failed to provision volume with StorageClass "mysc": rpc error: code = Internal desc = failed to select pool, the capability filter failed, error: failed to select pool, the final filter field: replication, parameters map[allocType:thin replication:True size:1099511627776 volumeType:lun]. please check your storage class
如果由原因3导致PVC处于Pending状态,可以执行** kubectl delete pvc** mypvc 命令,删除PVC。
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Provisioning 63s (x4 over 68s) csi.huawei.com_huawei-csi-controller-b59577886-qqzm8_58533e4a-884c-4c7f-92c3-6e8a7b327515 External provisioner is provisioning volume for claim "default/mypvc" Warning ProvisioningFailed 62s (x4 over 68s) csi.huawei.com_huawei-csi-controller-b59577886-qqzm8_58533e4a-884c-4c7f-92c3-6e8a7b327515 failed to provision volume with StorageClass "mysc": rpc error: code = Internal desc = Create volume map[ALLOCTYPE:1 CAPACITY:20 DESCRIPTION:Created from Kubernetes CSI NAME:pvc-63ebfda5-4cf0-458e-83bd-ecc PARENTID:0] error: 50331651
如果由原因4导致PVC处于Pending状态,请联系华为工程师处理。
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Provisioning 63s (x3 over 52s) csi.huawei.com_huawei-csi-controller-b59577886-qqzm8_58533e4a-884c-4c7f-92c3-6e8a7b327515 External provisioner is provisioning volume for claim "default/mypvc" Warning ProvisioningFailed 63s (x3 over 52s) csi.huawei.com_huawei-csi-controller-b59577886-qqzm8_58533e4a-884c-4c7f-92c3-6e8a7b327515 failed to provision volume with StorageClass "mysc": rpc error: code = Internal desc = context deadline exceeded (Client.Timeout exceeded while awaiting headers)
如果由原因5导致PVC处于Pending状态,请联系华为工程师处理。
9.3.3 - 通用临时卷扩容失败
现象描述
在Kubernetes版本低于1.25环境中,对LUN类型的 通用临时卷 扩容失败,显示PV已经扩容,但PVC未成功更新容量。
根因分析
该问题是由Kubernetes的 bug 导致,Kubernetes在1.25版本中修复了该问题。
9.3.4 - PVC扩容的目标容量超过存储池容量导致扩容失败
现象描述
在低于1.23版本的Kubernetes环境中,对PVC进行扩容,当目标容量超过存储池容量时,扩容失败。
根因分析
Kubernetes社区已知问题,详情请参考 处理扩充卷过程中的失败 。
解决措施或规避方法
参考 处理扩充卷过程中的失败 。
9.4 - Pod相关问题
9.4.1 - 集群中worker节点宕机并恢复后,Pod完成failover,但是Pod所在源主机出现盘符残留
现象描述
worker节点 A上运行Pod, 并通过CSI挂载外置块设备到该Pod;异常掉电节点worker节点A; Kubernetes平台会在感知到节点故障后,将Pod切换至worker节点B;恢复worker节点A, 节点A上的盘符会从正常变为故障。
环境配置
Kubernetes版本:1.18及以上
存储类型:块存储
根因分析
worker节点A恢复后,Kubernetes会向存储发起解除映射操作,但是不会发起主机侧的移除盘符操作。在Kubernetes解除映射后,worker节点A上就会出现盘符残留。
解决措施或规避方法
目前的解决方法只能人工介入,手动清理掉主机的残留盘符(或者再次重启主机,利用主机重启过程中扫盘机制,清理掉残留盘符)。具体方法如下:
multipath -ll
命令结果示例如下。路径状态为failed faulty running表示异常,对应的DM多路径设备为dm-12,关联的SCSI磁盘为sdi和sdj,在配置多条路径时,会有多个SCSI磁盘。记录这些SCSI磁盘。
mpathb (3618cf24100f8f457014a764c000001f6) dm-12 HUAWEI ,XSG1 size=100G features='0' hwhandler='0' wp=rw `-+- policy='service-time 0' prio=-1 status=active |- 39:0:0:1 sdi 8:48 failed faulty running `- 38:0:0:1 sdj 8:64 failed faulty running
- 是 => 继续执行 步骤1.2 。
- 否 => 不涉及。
dd if=/dev/dm-12 of=/dev/null count=1 bs=1M iflag=direct
命令结果示例如下。如果返回结果为:Input/output error,且读取数据为“0 bytes (0 B) copied”,表示该设备不可读。其中,_dm-xx_为 步骤1.1 查到的设备号:
dd: error reading '/dev/dm-12': Input/output error 0+0 records in 0+0 records out 0 bytes (0 B) copied, 0.0236862 s, 0.0 kB/s
执行以下命令,查看卡死的进程。
ps -ef | grep dm-12 | grep -w dd
命令结果示例如下:
root 21725 9748 0 10:33 pts/10 00:00:00 dd if=/dev/dm-12 of=/dev/null count=1 bs=10M iflag=direct
将该pid杀死。
kill -9 pid
记录残留的dm-xx设备以及关联磁盘号(见 步骤1.1 ),执行清理步骤。
清理主机的残留盘符。
根据 步骤1 获取的DM多路径设备,执行命令,清理残留的多路径聚合设备信息。
multipath -f /dev/dm-12
如果执行报错,请联系技术支持。
清理残留的SCSI磁盘,根据 步骤1 获取的残留磁盘的盘符,依次执行命令:
echo 1 > /sys/block/xxxx/device/delete
配置多条多路径时,依次根据盘符清除,本次残留路径为sdi/sdj:
echo 1 > /sys/block/sdi/device/delete echo 1 > /sys/block/sdj/device/delete
如果执行报错,请联系技术支持。
确认DM多路径设备和SCSI磁盘信息是否已经清理干净。
依次执行下列命令,查询的多路径和磁盘信息显示,残留的dm-12和SCSI磁盘sdi/sdj均已消失,则证明清理完成。
查看多路径信息。
multipath -ll
命令结果示例如下,残留的dm-12已消失:
mpathb (3618cf24100f8f457014a764c000001f6) dm-3 HUAWEI ,XSG1 size=100G features='0' hwhandler='0' wp=rw `-+- policy='service-time 0' prio=-1 status=active |- 39:0:0:1 sdd 8:48 active ready running `- 38:0:0:1 sde 8:64 active ready running mpathn (3618cf24100f8f457315a764c000001f6) dm-5 HUAWEI ,XSG1 size=100G features='0' hwhandler='0' wp=rw `-+- policy='service-time 0' prio=-1 status=active |- 39:0:0:2 sdc 8:32 active ready running `- 38:0:0:2 sdb 8:16 active ready running
查看设备信息。
ls -l /sys/block/
命令结果示例如下,SCSI磁盘sdi/sdj均已消失:
total 0 lrwxrwxrwx 1 root root 0 Aug 11 19:56 dm-0 -> ../devices/virtual/block/dm-0 lrwxrwxrwx 1 root root 0 Aug 11 19:56 dm-1 -> ../devices/virtual/block/dm-1 lrwxrwxrwx 1 root root 0 Aug 11 19:56 dm-2 -> ../devices/virtual/block/dm-2 lrwxrwxrwx 1 root root 0 Aug 11 19:56 dm-3 -> ../devices/virtual/block/dm-3 lrwxrwxrwx 1 root root 0 Aug 11 19:56 sdb -> ../devices/platform/host35/session2/target35:0:0/35:0:0:1/block/sdb lrwxrwxrwx 1 root root 0 Aug 11 19:56 sdc -> ../devices/platform/host34/target34:65535:5692/34:65535:5692:0/block/sdc lrwxrwxrwx 1 root root 0 Aug 11 19:56 sdd -> ../devices/platform/host39/session6/target39:0:0/39:0:0:1/block/sdd lrwxrwxrwx 1 root root 0 Aug 11 19:56 sde -> ../devices/platform/host38/session5/target38:0:0/38:0:0:1/block/sde lrwxrwxrwx 1 root root 0 Aug 11 19:56 sdh -> ../devices/platform/host39/session6/target39:0:0/39:0:0:3/block/sdh lrwxrwxrwx 1 root root 0 Aug 11 19:56 sdi -> ../devices/platform/host38/session5/target38:0:0/38:0:0:3/block/sdi
查看磁盘信息
ls -l /dev/disk/by-id/
命令结果示例如下,SCSI磁盘sdi/sdj均已消失:
total 0 lrwxrwxrwx 1 root root 10 Aug 11 19:57 dm-name-mpathb -> ../../dm-3 lrwxrwxrwx 1 root root 10 Aug 11 19:58 dm-name-mpathn -> ../../dm-5 lrwxrwxrwx 1 root root 10 Aug 11 19:57 dm-uuid-mpath-3618cf24100f8f457014a764c000001f6 -> ../../dm-3 lrwxrwxrwx 1 root root 10 Aug 11 19:58 dm-uuid-mpath-3618cf24100f8f457315a764c000001f6 -> ../../dm-5 lrwxrwxrwx 1 root root 9 Aug 11 19:57 scsi-3618cf24100f8f457014a764c000001f6 -> ../../sdd lrwxrwxrwx 1 root root 9 Aug 11 19:57 scsi-3618cf24100f8f45712345678000103e8 -> ../../sdi lrwxrwxrwx 1 root root 9 Aug 3 15:17 scsi-3648435a10058805278654321ffffffff -> ../../sdb lrwxrwxrwx 1 root root 9 Aug 2 14:49 scsi-368886030000020aff44cc0d060c987f1 -> ../../sdc lrwxrwxrwx 1 root root 9 Aug 11 19:57 wwn-0x618cf24100f8f457014a764c000001f6 -> ../../sdd lrwxrwxrwx 1 root root 9 Aug 11 19:57 wwn-0x618cf24100f8f45712345678000103e8 -> ../../sdi lrwxrwxrwx 1 root root 9 Aug 3 15:17 wwn-0x648435a10058805278654321ffffffff -> ../../sdb lrwxrwxrwx 1 root root 9 Aug 2 14:49 wwn-0x68886030000020aff44cc0d060c987f1 -> ../../sdc
9.4.2 - 创建Pod时,Pod的状态为ContainerCreating
现象描述
执行完成Pod的创建操作,一段时间后,Pod的状态仍然处于ContainerCreating,查看具体日志信息(详情请参考 如何查看华为CSI日志 ),报错“Fibre Channel volume device not found”。
根因分析
该问题是因为在主机节点有磁盘残留,导致下次创建Pod时,查找磁盘失败。
解决措施或规避方法
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
kubectl get pod -o wide
命令结果示例如下:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES mypod 0/1 ContainerCreating 0 51s 10.244.1.224 node1 <none> <none>
删除Pod。
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的_node1_节点。node1 节点为 2 中查询的节点。
移除盘符残留,详情请参考 解决措施或规避方法 。
9.4.3 - 创建Pod时,Pod的状态长时间处于ContainerCreating状态
现象描述
创建Pod时,Pod长时间处于ContainerCreating状态,此时查看huawei-csi-node的日志信息(详情请参考 如何查看华为CSI日志 ),huawei-csi-node的日志中无创建Pod的日志记录,执行kubectl get volumeattachment命令后,PV列无该Pod使用的PV名称。在等待较长时间后(超过十分钟),Pod正常创建,Pod状态变为Running状态。
根因分析
该问题是因为Kubernetes的kube-controller-manager组件服务异常导致。
解决措施或规避方法
请联系容器平台侧工程师解决。
9.4.4 - 创建Pod失败,日志显示执行mount命令超时
现象描述
创建Pod时,Pod一直处于ContainerCreating状态,此时查看huawei-csi-node的日志信息(详情请参考 如何查看华为CSI日志 ),日志显示执行mount命令超时。
根因分析
原因1:该问题可能由于配置的业务IP网络不通,导致mount命令执行超时失败。
原因2:对于部分操作系统,如Kylin V10 SP1和SP2,使用NFSv3从容器内执行mount命令耗时较长,导致mount命令超时并报错“error: exit status 255”,该问题可能由于容器运行时containerd的LimitNOFILE参数值过大(10亿+)。
原因3:可能由于网络问题导致挂载失败,CSI默认挂载超时时间为30秒,超过30秒仍挂载失败,日志会显示执行mount命令超时。
解决措施或规避方法
执行ping命令判断业务IP网络是否连通,如果无法ping通,则为原因1,请配置可用的业务IP地址,如果可以ping通,则执行 2 。
进入任意可以执行mount命令的容器中,指定使用NFSv3执行mount命令。如果命令超时,则可能是原因2,继续执行systemctl status containerd.service命令查看配置文件路径,然后执行cat _/xxx/containerd.service_命令查看配置文件。文件中如果有LimitNOFILE=infinity或LimitNOFILE的值大小为10亿,请执行 3 。否则请联系华为工程师处理。
- 尝试使用NFSv4.0及以上协议。
- 参考 社区修改方案 ,将LimitNOFILE参数值修改为合适的值。该方案将会重启容器运行时,请评估对业务的影响。
在挂载失败的宿主机手动挂载该文件系统,如果时间超过30秒,需要用户自行排查该宿主机到存储节点网络是否存在问题。mount命令示例如下:
执行以下命令创建测试目录。
mkdir /tmp/test_mount
执行mount命令,挂载文件系统,并观察耗时,其中ip:nfs_share_path可以从huawei-csi-node日志中获取,详情请参考 如何查看华为CSI日志
time mount ip:nfs_share_path /tmp/test_mount
测试结束,执行以下命令解挂载文件系统
umount /tmp/test_mount
9.4.5 - 创建Pod失败,日志显示执行mount命令失败
现象描述
NAS场景下,创建Pod时,Pod一直处于ContainerCreating状态,此时查看huawei-csi-node的日志信息(详情请参考 如何查看华为CSI日志 ),日志显示执行mount命令失败。
根因分析
该问题可能由于存储侧未开启NFS 4.0/4.1/4.2协议,主机在使用NFS v4协议挂载失败后,未进行协商使用NFS v3协议挂载。
解决措施或规避方法
- 开启存储侧的NFS 3/4.0/4.1/4.2协议,重新尝试默认挂载。
- 直接指定可用的NFS协议进行挂载,参考 配置存储类 。
9.4.6 - 创建Pod失败,Events日志显示“publishInfo doesn't exist”
现象描述
创建Pod时,Pod一直处于ContainerCreating状态,查看Pod中有打印告警事件:rpc error: code = Internal desc = publishInfo doesn’t exist。
根因分析
按照CSI协议约定,工作负载要使用一个PV卷时,CO(Container Orchestration system,通过RPC请求与CSI插件通信)会调用CSI插件提供的 CSI协议 中的“ControllerPublishVolume”接口(huawei-csi-controller服务提供)完成PV卷的映射,然后调用CSI插件提供的“NodeStageVolume”接口(huawei-csi-node服务提供)完成PV卷的挂载。导致出现“publishInfo doesn’t exist”错误的原因是在一次完整的挂载时,仅huawei-csi-node服务收到了“NodeStageVolume”请求,而在此之前huawei-csi-controller服务未收到“ControllerPublishVolume”请求,导致huawei-csi-controller服务未完成PV卷的映射,没有把映射信息传递给huawei-csi-node服务。
解决措施
解决该问题,需要触发Kubernetes调用“ControllerPublishVolume”接口。
如果集群中所有旧版本创建的工作负载均触发了该操作,则后续将不会出现该问题。
操作步骤
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行以下命令,获取工作负载所在节点信息。
kubectl get pod error-pod -n error-pod-in-namespace -owide
命令结果示例如下:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod-nfs 0/1 ContainerCreating 0 3s <none> node-1 <none> <none>
将该工作负载漂移至其他节点。
若在集群内无法完成漂移,可在原节点完成工作负载重建,即进行删除-新建操作。
观察该工作负载是否成功拉起,如果拉起失败请联系华为工程师。
集群工作负载排查
Kubernetes调用CSI插件完成卷映射时,将使用VolumeAttachment资源保存映射信息,用于表示将指定的卷从指定的节点上附加或分离。由于该问题是由于publishInfo不存在导致,因此可通过查看VolumeAttachment资源信息排查集群中其他工作负载是否存在该问题。具体步骤如下:
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行以下命令,获取VolumeAttachment信息,并保留ATTACHER字段为csi.huawei.com的资源,其中csi.huawei.com为华为CSI驱动名称,可在values.yaml文件中配置,配置项为csiDriver.driverName,配置项详情描述参考 表4 。
kubectl get volumeattachments.storage.k8s.io
命令结果示例如下:
NAME ATTACHER PV NODE ATTACHED AGE csi-47abxx csi.huawei.com pvc-1xx node-1 true 12h
执行以下命令查看VolumeAttachment资源详情,其中csi-47abxx为 2 中查询到的资源名称。
kubectl get volumeattachments.storage.k8s.io csi-47abxx -o yaml
命令结果示例如下:
kind: VolumeAttachment metadata: annotations: csi.alpha.kubernetes.io/node-id: '{"HostName":"node-1"}' finalizers: - external-attacher/csi-huawei-com name: csi-47abxxx uid: 0c87fa8a-c3d6-4623-acb8-71d6206d030d spec: attacher: csi.huawei.com nodeName: debian-node source: persistentVolumeName: pvc-1xx status: attached: true attachmentMetadata: publishInfo: '{<PUBLISH-INFO>}'
若 3 中查询到的资源中存在status.attachmentMetadata.publishInfo,则证明node-1节点上使用pvc-1xx创建的若干工作负载不会存在本FAQ描述的错误,其中node-1和pvc-1xx为 2 中查询结果。若status.attachmentMetadata.publishInfo不存在,请参考 解决措施 章节解决。
9.4.7 - 创建Pod失败或重启kubelet后,日志显示挂载点已存在
现象描述
创建Pod时,Pod一直处于ContainerCreating状态,或者重启kubelet后,日志中显示挂载点已存在。此时查看huawei-csi-node的日志信息(详情请参考 如何查看华为CSI日志 ),日志提示错误为:The mount /var/lib/kubelet/pods/xxx/mount is already exist, but the source path is not /var/lib/kubelet/plugins/kubernetes.io/xxx/globalmount
根因分析
该问题的根因是Kubernetes进行重复挂载操作。
解决措施或规避方法
执行以下命令,将已存在的路径解除挂载,其中“/var/lib/kubelet/pods/xxx/mount”为日志中提示的已存在的挂载路径。
umount /var/lib/kubelet/pods/xxx/mount
9.4.8 - Pod挂载卷目录提示I/O error
现象描述
Pod对所挂载卷进行读写时,提示I/O error。
根因分析
使用SCSI等协议时,如果Pod持续往挂载目录写入数据时,存储发生重启,导致主机上设备到存储的链路中断,触发I/O error。存储恢复时,挂载目录仍然为只读。
解决措施
重新挂载该卷,即通过重建Pod可以触发重新挂载。
9.4.9 - Kubernetes平台第一次搭建时, iscsi_tcp服务没有正常启动,导致创建Pod失败
现象描述
创建Pod时报错,在/var/log/huawei-csi-node日志中报错“ Cannot connect ISCSI portal *.*.*.*: libkmod: kmod_module_insert_module: could not find module by name=‘iscsi_tcp’。
根因分析
搭建Kubernete和安装iSCSI服务后, iscsi_tcp服务可能会被停掉,可通过执行以下命令查看服务是否被停掉。
lsmod | grep iscsi | grep iscsi_tcp
命令结果示例如下:
iscsi_tcp 18333 6
libiscsi_tcp 25146 1 iscsi_tcp
libiscsi 57233 2 libiscsi_tcp,iscsi_tcp
scsi_transport_iscsi 99909 3 iscsi_tcp,libiscsi
解决措施或规避方法
执行以下命令,手动加载iscsi_tcp服务。
modprobe iscsi_tcp
lsmod | grep iscsi | grep iscsi_tcp
9.4.10 - 创建Pod失败,日志显示启动器已关联至其他主机
现象描述
使用SAN存储创建Pod时,Pod一直处于ContainerCreating状态,查看Pod中有打印告警事件:rpc error: code = Internal desc = initiator xxx is already associated to another host。
根因分析
原因1:CSI会根据一定规则自动创建主机、主机组、启动器,若相同资源在使用CSI前已经在存储侧存在,则会出现冲突。该报错原因可能为使用CSI前已添加过相同的启动器。
原因2:容器集群中,不同工作节点的启动器名称重复,请根据下列步骤进行排查:
登录到容器集群的不同工作节点,执行命令查看启动器名称,确认是否存在不同工作节点使用相同启动器名称。
查看iSCSI启动器名称,执行下列命令:
cat /etc/iscsi/initiatorname.iscsi
查看FC启动器名称,执行下列命令:
cat /sys/class/fc_host/host*/port_name
查看RoCE启动器名称,执行下列命令:
cat /etc/nvme/hostnqn
若存在不同工作节点使用相同启动器名称,请按 解决措施或规避方法 解决。
解决措施或规避方法
确认启动器关联的主机是否存在使用中的卷,若有使用中的卷,需先将使用中的Pod漂移至其他节点。
确认主机中不存在使用中的卷后,修改启动器名称,确保启动器的唯一性。
执行下列命令,重启iscsid服务。
systemctl restart iscsid
重启iscsid服务可能导致I/O中断,请确保启动器关联的主机中没有正在使用中的卷,再进行重启操作。重启huawei-csi-node服务。
9.4.11 - 创建Pod失败,日志显示“Get DMDevice by alias: dm-x failed”
现象描述
创建Pod时,Pod长时间处于ContainerCreating状态,此时查看huawei-csi-node的日志信息(详情请参考 如何查看华为CSI日志 ),报错:
check device: dm-1 is a partition device failed. error: Get DMDevice by alias:dm-1 failed. error: Can not get DMDevice by alias: dm-1
根因分析
DM-Multipath的配置文件中未配置user_friendly_names参数为yes。
解决措施或规避方法
确认Pod运行所在工作节点是否存在使用中的卷,若有使用中的卷,需先将使用中的Pod漂移至其他节点。
按照 检查主机多路径配置 章节,配置 /etc/multipath.con 文件。
执行下列命令,重启多路径软件。
systemctl reload multipathd.service systemctl restart multipathd
重启多路径软件可能导致I/O中断,请确保Pod运行所在工作节点中没有正在使用中的卷,再进行重启操作。
9.5 - 对接Tanzu Kubernetes集群常见问题及解决方法
本章节用于说明对接Tanzu Kubernetes集群时常见问题及解决办法,目前对接Tanzu Kubernetes集群时主要有以下三个问题:
- 未创建PSP权限导致Pod无法创建
- 主机挂载点与原生Kubernetes不同导致挂载卷失败
- livenessprobe容器端口与Tanzu vSphere端口冲突导致容器不断重启
9.5.1 - 未创建PSP权限导致Pod无法创建
现象描述
创建huawei-csi-controller和huawei-csi-node时,仅Deployment和DaemonSet资源创建成功,controller和node的Pod未创建。
根因分析
创建资源使用的service account没有PSP策略的“use”权限。
解决措施或规避方法
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行vi psp-use.yaml 命令, 创建psp-use.yaml文件。
vi psp-use.yaml
配置psp-use.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
执行以下命令,创建PSP权限。
kubectl create -f psp-use.yaml
9.5.2 - 修改主机挂载点
现象描述
创建Pod时失败,华为CSI日志中报错“mount point does not exist”。
根因分析
huawei-csi-node中的“pods-dir”目录原生Kubernetes集群与Tanzu Kubernetes集群不一致。
解决措施或规避方法
进入helm/esdk/目录,执行vi values.yaml命令打开配置文件。
vi values.yaml
将kubeletConfigDir参数修改为kubelet实际的安装目录。
# Specify kubelet config dir path. # kubernetes and openshift is usually /var/lib/kubelet # Tanzu is usually /var/vcap/data/kubelet kubeletConfigDir: /var/vcap/data/kubelet
9.5.3 - 修改livenessprobe容器的默认端口
现象描述
huawei-csi-controller组件中livenessprobe容器一直重启。
根因分析
huawei-csi-controller的livenessprobe容器的默认端口(9808)与已有的Tanzu的vSphere CSI端口冲突。
解决措施或规避方法
将livenessprobe容器的默认端口修改为未占用端口。
进入“helm/esdk”目录,执行vi values.yaml命令打开配置文件。
vi values.yaml
将controller.livenessProbePort默认值9808修改为其他未占用端口,例如改为9809。
controller: livenessProbePort: 9809
使用Helm更新华为CSI,具体信息请参考 使用Helm升级 。
9.5.4 - 创建临时卷失败
现象描述
创建 通用临时卷 失败,报错PodSecurityPolicy: unable to admit pod: [spec.volumes[0]: Invalid value: “ephemeral”: ephemeral volumes are not allowed to be used spec.volumes[0]
根因分析
当前使用的PSP策略中没有使用“ephemeral”卷的权限。
解决措施或规避方法
在默认PSP “pks-privileged"和"pks-restricted"中增加使用“ephemeral”卷的权限,以修改"pks-privileged"举例:
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行命令, 修改pks-privileged的配置。
kubectl edit psp pks-privileged
在spec.volumes中增加“ephemeral”,示例如下:
# Please edit the object below. Lines beginning with a '#' will be ignored, # and an empty file will abort the edit. If an error occurs while saving this file will be # reopened with the relevant failures. # apiVersion: policy/v1beta1 kind: PodSecurityPolicy metadata: annotations: apparmor.security.beta.kubernetes.io/allowedProfileName: '*' seccomp.security.alpha.kubernetes.io/allowedProfileNames: '*' creationTimestamp: "2022-10-11T08:07:00Z" name: pks-privileged resourceVersion: "1227763" uid: 2f39c44a-2ce7-49fd-87ca-2c5dc3bfc0c6 spec: allowPrivilegeEscalation: true allowedCapabilities: - '*' supplementalGroups: rule: RunAsAny volumes: - glusterfs - hostPath - iscsi - nfs - persistentVolumeClaim - ephemeral
执行命令,确认是否添加成功。
kubectl get psp pks-privileged -o yaml
10 - CLI命令说明
10.1 - oceanctl命令说明
帮助说明
获取oceanctl帮助说明。
oceanctl --help
查看oceanctl版本号。
oceanctl version
指定自定义日志文件目录,以查看oceanctl版本号为例。
oceanctl version --log-dir=/path/to/custom
创建存储后端
执行以下命令获取创建后端帮助。
oceanctl create backend -h
执行以下命令根据指定的yaml文件创建存储后端。
oceanctl create backend -f /path/to/backend.yaml -i yaml
执行以下命令根据指定的json文件创建存储后端,json文件仅支持通过json格式导出huawei-csi-configmap文件。
oceanctl create backend -f /path/to/configmap.json -i json
执行以下命令在指定命名空间创建一个存储后端。
oceanctl create backend -f /path/to/backend.yaml -i yaml -n <namespace>
执行以下命令创建存储后端,并忽略存储后端名称校验,例如大写和字符“_”,非必要请勿使用该命令。
oceanctl create backend -f /path/to/backend.yaml -i yaml --not-validate-name
执行以下命令创建存储后端,并指定provisioner,其中“csi.oceanstor.com”是安装时指定的驱动名称,详情可以参考 4 。
仅在CCE或CCE Agile平台创建后端时使用该命令。oceanctl create backend -f /path/to/backend.yaml -i yaml --provisioner=csi.oceanstor.com
查询存储后端
执行以下命令获取查询后端帮助。
oceanctl get backend -h
执行以下命令查询默认命名空间下单个存储后端。
oceanctl get backend <backend-name>
执行以下命令查询指定命名空间下所有存储后端。
oceanctl get backend -n <namespace>
执行以下命令格式化输出,当前支持json,yaml和wide。
oceanctl get backend <backend-name> -o json
更新存储后端
执行以下命令获取更新后端帮助。
oceanctl update backend -h
执行以下命令更新默认命名空间下指定存储后端信息。
oceanctl update backend <backend-name> --password
执行以下命令更新指定命名空间存储后端信息。
oceanctl update backend <backend-name> -n <namespace> --password
删除存储后端
执行以下命令获取删除后端帮助。
oceanctl delete backend -h
执行以下命令删除默认命名空间下指定存储后端。
oceanctl delete backend <backend-name>
执行以下命令删除默认命名空间下所有存储后端。
oceanctl delete backend --all
执行以下命令删除指定命名空间下存储后端。
oceanctl delete backend <backend-name...> -n <namespace>
创建存储后端证书
执行以下命令获取查询证书帮助。
oceanctl create cert -h
执行以下命令根据指定的crt证书文件为默认命名空间单个存储后端创建证书。
oceanctl create cert <name> -f /path/to/cert.crt -b <backend-name>
执行以下命令根据指定的crt证书文件为指定命名空间单个存储后端创建证书。
oceanctl create cert <name> -f /path/to/cert.crt -b <backend-name> -n <namespace>
执行以下命令根据指定的pem证书文件为指定命名空间单个存储后端创建证书。
oceanctl create cert <name> -f /path/to/cert.pem -b <backend-name> -n <namespace>
查询存储后端证书
执行以下命令获取查询证书帮助。
oceanctl get cert -h
执行以下命令查询默认命名空间指定存储后端的证书。
oceanctl get cert -b <backend-name>
执行以下命令查询指定命名空间下指定存储后端的证书。
oceanctl get cert -b <backend-name> -n <namespace>
更新存储后端证书
执行以下命令获取更新证书帮助。
oceanctl update cert -h
执行以下命令根据指定的crt证书文件为默认命名空间指定存储后端更新证书。
oceanctl update cert -b <backend-name> -f /path/to/cert.crt
执行以下命令根据指定的crt证书文件为指定命名空间指定存储后端更新证书。
oceanctl update cert -b <backend-name> -n <namespace> -f /path/to/cert.crt
执行以下命令根据指定的pem证书文件为指定命名空间指定存储后端更新证书。
oceanctl update cert -b <backend-name> -n <namespace> -f /path/to/cert.pem
删除存储后端证书
执行以下命令获取删除证书帮助。
oceanctl delete cert -h
执行以下命令删除默认命名空间指定存储后端的证书。
oceanctl delete cert -b <backend-name>
执行以下命令删除指定命名空间指定存储后端的证书。
oceanctl delete cert -b <backend-name> -n <namespace>
11 - 附录
11.1 - 通信矩阵
11.2 - 配置自定义权限
自定义角色配置
针对不同的存储资源,请参考以下配置:
可参考存储文档:《 OceanStor Dorado 6000, Dorado 18000系列 产品文档 》配置自定义角色权限。
表 1 NAS相关资源最小权限说明
表 2 SAN相关资源最小权限说明
11.3 - 华为CSI资源管理
本章节列举了华为CSI插件中每个容器所使用的资源请求和限制。其中单位说明请参考 Kubernetes 中的资源单位 。
表 1 容器资源请求和限制
修改资源请求和限制
如果需要修改容器的资源请求和限制,以Helm安装华为CSI为例,可参考以下步骤
使用Helm安装时进入/helm/esdk/templates 目录。手动部署时需要修改的文件在/manual/esdk/deploy目录,其中组件包路径请参考 表1 。
修改部署模板文件。
- Pod名称为huawei-csi-controller时,修改huawei-csi-controller.yaml文件。
- Pod名称为huawei-csi-node时,修改huawei-csi-node.yaml文件。
Pod名称的分类,请参考 表1 。以修改Pod名称为huawei-csi-node中huawei-csi-driver容器的资源请求为例,执行命令编辑配置文件,找到spec.template.spec.containes.name为huawei-csi-driver的容器。按需修改资源请求和限制。
vi huawei-csi-node.yaml
编辑如下内容。
containers - name: huawei-csi-driver ... resources: limits: cpu: 500m memory: 1Gi requests: cpu: 50m memory: 128Mi
若华为CSI未安装,则参考 Kubernetes、OpenShift、Tanzu安装华为CSI 章节安装华为CSI后,资源请求和限制的修改生效。
若已安装华为CSI,则参考 升级华为CSI 章节更新华为CSI后,资源请求和限制的修改生效。
11.4 - Kubernetes特性矩阵
本章节说明华为CSI在不同Kubernetes版本下支持的特性。
表 1 Kubernetes版本与支持的特性
- 注释1 Manage Provisioning是华为CSI自定义的纳管卷特性,该特性支持将已有存储资源纳管至Kubernetes。不允许将一个存储资源纳管多次和针对同一个存储资源进行并发删除/创建操作。当同一个存储资源被多个集群纳管时,在单个集群中针对该纳管卷的操作仅在当前集群内生效,不会同步到其他集群中,需要使用者自行在其他集群中对该纳管卷进行数据同步操作。
- 注释2 Modify Volume是华为CSI自定义的PVC变更特性,该特性支持将普通卷变更为双活卷,使用该特性需要对接存储支持卷双活特性。