本章节用于说明对接Tanzu Kubernetes集群时常见问题及解决办法,目前对接Tanzu Kubernetes集群时主要有以下三个问题:
- 未创建PSP权限导致Pod无法创建
- 主机挂载点与原生Kubernetes不同导致挂载卷失败
- livenessprobe容器端口与Tanzu vSphere端口冲突导致容器不断重启
本章节用于说明对接Tanzu Kubernetes集群时常见问题及解决办法,目前对接Tanzu Kubernetes集群时主要有以下三个问题:
创建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
创建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
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,具体信息请参考升级华为CSI。
创建通用临时卷失败,报错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