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目录。

解决措施或规避方法

  1. 使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。

  2. 进入Helm工程的目录下,如果无法找到之前的Helm工程,则将组件包中的helm目录拷贝到master节点的任意目录下,组件包路径请参考表 软件包组件描述

  3. 进入下一级目录templates,找到huawei-csi-node.yaml文件。

    cd /templates
    
  4. 执行以下命令,将huawei-csi-node.yaml > volumes > iscsi-dir > hostPath中“path“设置为“/var/lib/iscsi“ ,然后保存并退出文件。

    vi huawei-csi-node.yaml
    
  5. 执行以下命令升级Helm chart。升级命令将更新Deployment、DaemonSet和RBAC资源。其中,helm-huawei-csi为自定义的chart名称,huawei-csi为自定义的命名空间。

    helm upgrade helm-huawei-csi ./ -n huawei-csi 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
    

2 - 启动华为CSI服务失败,提示错误:“/etc/localtime is not a file”

现象描述

安装部署CSI时,Pod运行不起来,处于ContainerCreating状态,查看Pod中有打印告警事件:/etc/localtime is not a file。

根因分析

容器挂载主机/etc/localtime文件时,识别类型有误,容器挂载不上主机侧/etc/localtime文件,导致Pod运行不起来。

操作步骤

  1. 使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。

  2. 执行命令,查看CSI服务Pod运行状态。

    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
    
  3. 执行命令,通过查看容器的“Events”参数。

    kubectl describe pod huawei-csi-controller-6dfcc4b79f-9vjtq -n huawei-csi
    

    命令结果示例如下。其中,huawei-csi-controller-6dfcc4b79f-9vjtq2中查找到的状态显示为“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
    
  4. 执行命令cd /helm/esdk/templates,进入到CSI的安装包路径下。路径请参见表 软件包组件描述

  5. 以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
    ...
    ...
    
  6. 参考Helm卸载华为CSI卸载服务后,重新安装服务。

  7. 执行以下命令,查看华为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
    

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

解决措施或规避方法

  1. 使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。

  2. 执行以下命令,修改huawei-csi-node服务的配置文件。按IInsert进入编辑状态,修改相关参数。修改完成后,按Esc,并输入 :wq! ,保存修改。

    kubectl edit daemonset huawei-csi-node -o yaml -n=huawei-csi
    

    • 示例yaml文件中huawei-csi-driver的参数image配置项,修改华为CSI镜像huawei-csi:4.5.0。
    containers:
      ...
      - name: huawei-csi-driver
        image: huawei-csi:4.5.0
    
  3. 执行以下命令,修改huawei-csi-controller服务的配置文件。按IInsert进入编辑状态,修改相关参数。修改完成后,按Esc,并输入 :wq! ,保存修改。

    kubectl edit deployment huawei-csi-controller -o yaml -n=huawei-csi
    

    • 示例yaml文件中huawei-csi-driver的参数image配置项,修改华为CSI镜像huawei-csi:4.5.0。
    containers:
      ...
      - name: huawei-csi-driver
        image: huawei-csi:4.5.0
    
  4. 等待huawei-csi-node和huawei-csi-controller服务启动。

  5. 执行以下命令,查看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