常用操作
- 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集群
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.5.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-<contrainer-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-<contrainer-id>.log
2.3 - 日志收集
前置检查
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群内有oceanctl工具的节点。
执行以下命令,显示版本号为v4.5.0。
oceanctl version
命令结果示例如下:
Oceanctl Version: v4.5.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命名空间。组件包路径请参考表 软件包组件描述。
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命名空间。组件包路径请参考表 软件包组件描述。
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。
由于ReadWriteOncePod访问模式在当前已发布的Kubernetes v1.22/1.23/1.24版本中是alpha特性,需要先在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