这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

对接Tanzu Kubernetes集群常见问题及解决方法

本章节用于说明对接Tanzu Kubernetes集群时常见问题及解决办法,目前对接Tanzu Kubernetes集群时主要有以下三个问题:

  • 未创建PSP权限导致Pod无法创建
  • 主机挂载点与原生Kubernetes不同导致挂载卷失败
  • livenessprobe容器端口与Tanzu vSphere端口冲突导致容器不断重启

1 - 未创建PSP权限导致Pod无法创建

现象描述

创建huawei-csi-controller和huawei-csi-node时,仅Deployment和DaemonSet资源创建成功,controller和node的Pod未创建。

根因分析

创建资源使用的service account没有PSP策略的“use”权限。

解决措施或规避方法

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

  2. 执行vi psp-use.yaml 命令, 创建psp-use.yaml文件。

    vi psp-use.yaml
    
  3. 配置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
    
  4. 执行以下命令,创建PSP权限。

    kubectl create -f psp-use.yaml
    

2 - 修改主机挂载点

现象描述

创建Pod时失败,华为CSI日志中报错“mount point does not exist”。

根因分析

huawei-csi-node中的“pods-dir”目录原生Kubernetes集群与Tanzu Kubernetes集群不一致。

解决措施或规避方法

  1. 进入helm/esdk/目录,执行vi values.yaml命令打开配置文件。

    vi values.yaml
    
  2. 将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
    

3 - 修改livenessprobe容器的默认端口

现象描述

huawei-csi-controller组件中livenessprobe容器一直重启。

根因分析

huawei-csi-controller的livenessprobe容器的默认端口(9808)与已有的Tanzu的vSphere CSI端口冲突。

解决措施或规避方法

将livenessprobe容器的默认端口修改为未占用端口。

  1. 进入“helm/esdk”目录,执行vi values.yaml命令打开配置文件。

    vi values.yaml
    
  2. 将controller.livenessProbePort默认值9808修改为其他未占用端口,例如改为9809。

    controller:
      livenessProbePort: 9809
    
  3. 使用Helm更新华为CSI,具体信息请参考升级华为CSI

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"举例:

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

  2. 执行命令, 修改pks-privileged的配置。

    kubectl edit psp pks-privileged
    
  3. 在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
    
  4. 执行命令,确认是否添加成功。

    kubectl get psp pks-privileged -o yaml