常见运维操作
- 1: 安装Helm 3
- 2: 信息收集
- 2.1: 如何获取CSI版本信息
- 2.2: 如何查看华为CSI日志
- 2.3: 日志收集
- 3: 下载容器镜像
- 4: 更新huawei-csi-controller或huawei-csi-node服务
- 5: 修改日志输出模式
- 6: 开启ReadWriteOncePod功能门
- 7: 配置非root用户访问Kubernetes集群
- 8: 配置IPv6
- 8.1: 首次安装华为CSI时配置IPv6
- 8.2: 华为CSI由IPv4切换至IPv6
- 9: 配置存储拓扑感知
- 10: 配置ALUA特性
- 10.1: 配置华为企业存储后端的ALUA参数
- 10.2: 配置分布式存储后端的ALUA参数
- 10.3: OceanStor V5系列ALUA特性配置策略样例
- 10.4: OceanStor Dorado ALUA特性配置策略样例
- 10.5: 分布式存储ALUA特性配置策略样例
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"}
2 - 信息收集
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
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
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
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
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
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
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。
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 - 配置IPv6
本章节介绍如何使用华为CSI完成IPv6的配置。
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.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"]
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 。
10 - 配置ALUA特性
ALUA(Asymmetric Logical Unit Access,非对称逻辑单元访问),是一种多目标器端口访问模型。在多路径状态下,ALUA标准提供了一种将卷的Active/Passive模型呈现给主机的方式。同时还提供了端口的可访问状态切换接口,可用来实现卷工作控制器切换等。例如,卷在一个控制器故障时,可以将该控制器的端口置为Unavailable,支持ALUA的主机多路径软件收到该状态后,会将I/O切换到另一端控制器。
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中的配置应用到存储侧。
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中的配置应用到存储侧。
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配置段来配置启动器。^表示匹配字符串的开头,$表示匹配字符串的结尾。
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配置段来配置启动器。^表示匹配字符串的开头,$表示匹配字符串的结尾。
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配置段来配置启动器。^表示匹配字符串的开头,$表示匹配字符串的结尾。