KubeSphere 安装支持的存储类型

1、KubeSphere 安装支持的存储类型有哪些?如何配置?

答:目前,Installer 支持以下类型的存储作为存储服务端,为 KubeSphere 提供持久化存储 (更多的存储类型持续更新中):

  • QingCloud 云平台块存储
  • QingStor NeonSAN (企业级分布式存储)
  • Ceph RBD
  • GlusterFS
  • NFS
  • Local Volume (仅限 all-in-one 部署测试使用)

在安装前需要在 Installer 中配置已准备的存储服务端,配置方法详见 存储安装配置说明

Multi-Node 安装配置相关问题

2、Multi-Node 模式 安装时,如果某些服务器的 Ubuntu 系统默认管理员用户为 ubuntu,若切换为 root 用户进行安装,应该如何配置和操作?

可通过命令 sudo su 切换为 root 用户后,在该节点查看是否能 ssh 连接到其他机器,如果 ssh 无法连接,则需要参考 conf/hosts.ini 的注释中 non-root 用户示例部分,如下面第二步 hosts.ini 配置示例所示,而最终执行安装脚本 install.sh 时建议以 root 用户执行安装。

第一步,查看是否能 ssh 连接到其他机器,若无法连接,则参考第二步配置示例。相反,如果 root 用户能够 ssh 成功连接到其它机器,则可以参考 Installer 中默认的 root 用户配置方式。

  1. root@192.168.0.3 # ssh 192.168.0.2
  2. Warning: Permanently added 'node1,192.168.0.2' (ECDSA) to the list of known hosts.
  3. root@192.168.0.2's password:
  4. Permission denied, please try again.

第二步,如下示例使用 3 台机器,参考以下示例修改主机配置文件 hosts.ini

hosts.ini 配置示例

  1. [all]
  2. master ansible_connection=local ip=192.168.0.1 ansible_user=ubuntu ansible_become_pass=Qcloud@123
  3. node1 ansible_host=192.168.0.2 ip=192.168.0.2 ansible_user=ubuntu ansible_become_pass=Qcloud@123
  4. node2 ansible_host=192.168.0.3 ip=192.168.0.3 ansible_user=ubuntu ansible_become_pass=Qcloud@123
  5. [kube-master]
  6. master
  7. [kube-node]
  8. node1
  9. node2
  10. [etcd]
  11. master
  12. [k8s-cluster:children]
  13. kube-node
  14. kube-master

安装前如何配置 QingCloud vNas

3、KubeSphere 支持对接 QingCloud vNas 作为集群的存储服务端,以下说明如何在 QingCloud 控制台 创建文件存储 vNas:

3.1. 选择 文件存储 vNAS,点击 创建

安装常见问题 - 图1

3.2. 自定义名称,并选择与待安装机器相同的私有网络。

安装常见问题 - 图2

3.3. 点击创建的 vNAS 进入详情页,在共享存储目标下点击 创建

安装常见问题 - 图3

3.4. 目标类型保持 NFS,参考如下截图填写信息,完成后点击 提交

安装常见问题 - 图4

安装常见问题 - 图5

3.5. 选择 账户,点击 创建

安装常见问题 - 图6

3.6. 自定义名称,IP 地址填写集群机器所在的网段,如 192.168.0.0/24

安装常见问题 - 图7 安装常见问题 - 图8

3.7. 查看 vNAS 的详情页,可以看到内网 IP 与 共享目录,这两处信息则需要在 Installer 中进行指定。

安装常见问题 - 图9

如下,在 /conf/vars.yml 中先将 Local Volume Provisioner 设置为 false,然后在 NFS-Client provisioner 进行如下设置:

  1. # NFS-Client provisioner deployment
  2. nfs_client_enable: true
  3. nfs_client_is_default_class: true
  4. # Hostname of the NFS server(ip or hostname)
  5. nfs_server: 192.168.0.22
  6. # Basepath of the mount point to be used
  7. nfs_path: /mnt/shared_dir

完成以上设置后,可参考安装指南继续进行配置和安装。

安装失败相关问题

4、安装过程中,如果遇到安装失败并且发现错误日志中有这类信息:The following packages have pending transactions,这种情况应该如何处理?

安装问题

答:这是因为有些 transactions 操作没有完成,可以连接到安装失败的节点上,依次执行下列命令,并重新执行 install.sh 脚本:

  1. $ yum install yum-utils -y
  2. $ yum-complete-transaction
  3. $ yum-complete-transaction --cleanup-only

4.1、遇到ansible指令不能用,Command “python setup.py egg_info” failed with error code 1 in/tmp/pip.build.344f90/ansible

答: 方法1:pip install setuptools==33.1.1 方法2:下载新版setuptools, wget https://files.pythonhosted.org/packages/e5/53/92a8ac9d252ec170d9197dcf988f07e02305a06078d7e83a41ba4e3ed65b/setuptools-33.1.1-py2.py3-none-any.whl pip install setuptools-33.1.1-py2.py3-none-any.whl

4.2、dial tcp 20.233.0.1: 443: connect: no route to host”], “stdout”: “”, “stdout_lines”: []}

答:检查下是不是机器防火墙还开着 建议关掉 systemctl stop firewalld

4.3、FAELED - RETRYING: KubeSphere Waiting for ks-console (30 retries left)一直卡在这里。

答: 检查cpu和内存,目前单机版部署至少8核16G 当free -m 时buff/cache占用内存资源多,执行echo 3 > /proc/sys/vm/drop_caches 指令释放下内存

4.4、kubectl get pod -n kubesphere-system出现大量的Pending状态时

答:可以kubectl describe看下这几个没起来的pod,应该是内存不足

4.5、kubesphere v2.0.2 离线安装失败,提示Failed to create ‘IPPool’ resource: resource already exists: IPPool(default-pool)”

答: 机器目前需要干净的机器,如果已安装了k8s,则可以参考如下链接安装kubesphere:https://github.com/kubesphere/ks-installer

4.6、centos7.4 2.0.2离线安装后,reboot系统重启服务不恢复

答: kube-system下的 coredns 没有起来,kubectl describe看下coredns的错误日志; coredns 无法连接 apiserver,可以执行 ipvsadm -Ln 看下 6443 端口是否对应主节点地址

4.7、kubesphere能否独立使用

答:https://github.com/kubesphere/ks-installer

4.8、centos7.6 file:///kubeinstaller/yum_repo/iso/repodata/repomd.xml: [Errno 14] curl#37 - “Couldn’t open file /kubeinstaller/yum_repo/iso/repodata/repomd.xml” Trying other mirror.

答: centos7.6系统还不支持离线下载部署。可以用centos7.4或7.5或在线部署。 如果环境可以联网,建议使用在线安装,支持centos7.6 链接:https://pan.baidu.com/s/1HBlBaD69mx6z050sSgj0Kg 提取码:eqe6 把该iso放到离线环境的kubesphere-all-offline-advanced-2.0.2/Repos/下,umount /kubeinstaller/yum_repo/iso重新跑

4.9、离线安装失败转为在线安装

答:刚才执行离线安装修改的yum源,先还原一下 ,/etc/yum.repo.d 有备份

4.10、Could not find a version that satisfies the requirement ansible==2.7.6 (from -r /home/sunhaizhou/all-in-one/kubesphere-all-offline-advanced-2.0.2/scripts/os/requirements.txt (line 1)) (from versions: ) Error: Install the pip packages failed!

答: 方法1:pip install ansible==2.7.6 方法2:可以手动umount一下/kubeinstaller/pip_repo/pip27/iso 或者重启机器 应该可以解决该问题

4.11、fatal: [ks-allinone]: FAILED! => {“ansible_facts”: {“pkg_mgr”: “yum”}, “changed”: false, “msg”: “The Python 2 bindings for rpm are needed for this module. If you require Python 3 support use the dnf Ansible module instead.. The Python 2 yum module is needed for this module. If you require Python 3 support use the dnf Ansible module instead.”}

答:将机器的python3改成python2 4.12、KubeSphere 2.0.1 安装失败 :no matches for kind \”S2iBuilderTemplate\

答: kubectl get pvc --all-namespaces 看下pvc是否处于pending状态 如果pvc pending,地址和路径也都配置正确的话,可以试下本地机器上是否可以挂载;如果是自建的nfs,可以看下nfs的配置参数。 先执行uninstall, 然后再install。

4.13、fatal: [hippo04kf]: FAILED! => {“changed”: true, “msg”: “non-zero return code”, “rc”: 5, “stderr”: “Warning: Permanently added ‘99.13.XX.XX’ (ECDSA) to the list of known hosts.\r\nPermission denied, please try again(publickey,gssapi-keyex,gssapi-with-mic).\r\n”, “stderr_lines”: [“Warning: Permanently added ‘99.13.XX.XX’ (ECDSA) to the list of known hosts.”

答: 只贴了all的格式,ansible_ssh_pass改成ansible_become_pass,最后执行脚本时,需要转成root用户执行。

  1. [all]
  2. master ansible_connection=local ip=192.168.0.5 ansible_user=tester ansible_become_pass=@@@@@@
  3. node1 ansible_host=192.168.0.6 ip=192.168.0.6 ansible_user=tester ansible_become_pass=@@@@@@

4.14 、ks-devops/jenkins unable to parse quantity’s suffix,error found in #10 byte of

答: 有特殊字符无法解析 如果编辑过jenkins的相关配置的话可以检查下是不是写入了特殊字符

4.15、kubesphere-all-offline-advanced-2.0.0 离线安装提示 Failed connect to 192.168.10.137:5080; Connection refused

答: docker ps -a|grep nginx nginx是否正常启动,且5080端口已监听。 df -hT|grep -v docker|grep -v kubelet 看pip和iso是否都已挂载。 以上都有问题的话,机器先停止运行,然后执行uninstall脚本,再运行install脚本。

4.16、failed ansibelundefinedvariable dict object has no attribute address

答: 第一行这样配试下,ip换成自己的,如果有网的话建议联网安装

  1. ks-allinone ansible_connection=local ip=192.168.0.2
  2. [local-registry]
  3. ks-allinone
  4. [kube-master]
  5. ks-allinone
  6. [etcd]
  7. ks-allinone
  8. [kube-node]
  9. ks-allinone
  10. [k8s-cluster:children]
  11. kube-node
  12. kube-master

4.17、FAILED! => {“reason”: “‘delegate_to’ is not a valid attribute for a TaskInclude

答: 不要手动安装ansible,如果安装过程中出现了ERROR: Command “python setup.py egg_info” failed with error code 1 in /tmp/pip-install-voTIRk/ansible/ ./multi-node.sh: line 41: ansible-playbook: command not found pip install --upgrade setuptools==30.1.0先执行这个再安装

4.18、centos7.6 FAILED - RETRYING: KubeSphere| Installing JQ (YUM) (5 retries left),没有jq这个package,我下了jq的二进制包放在/usr/bin目录下,jq可以使用。

答: 可以在kubesphere/roles/prepare/nodes/tasks/main.yaml中注释掉安装jq的相关tasks

4.19、FAILED - RETRYING: ks-alerting | Waiting for alerting-db-init (2 retries left).fatal: [ks-allinone]: FAILED! => {“attempts”: 3, “changed”: true, “cmd”: “/usr/local/bin/kubectl -n kubesphere-alerting-system get pod | grep alerting-db-init | awk ‘{print $3}’”, “delta”: “stdout”: “Init:0/1”

答: 检查配置是否满足要求8核cpu、16G。检查存储相关配置。检查本地/etc/resolve.conf下的域名是否都可以ping通。

4.20、2.0.2 版本安装后配置docker 私有库问题,配置了一个 docker 私有库,修改完 /etc/docker/daemon.json 文件,然后重新启动 docker报错。

答: kubesphere 在安装时指定了 DOCKER_OPTS= —insecure-registry ,所以不能再加载 /etc/docker/daemon.json 的 insecure-registries 设置, 如果要添加的,/etc/systemd/system/docker.service.d文件中添加,重启。

4.21、用的自己搭建的nfs服务器,发现创建的pvc全是pending导致了相关的pod启动不起来。

答: 可以参考 *(rw,insecure,sync,no_subtree_check,no_root_squash)这个配置下nfs,然后先试下主机上是否可以挂载nfs

4.22、ubuntu系统,非root用户安装时,在kubernetes-apps/network_plugin/calico: start calico resources get http://localhost:8080/api?timeout=32s: dial tcp 127.0.0.1: 8080: connect: connection refused

答:采用root用户安装脚本。 4.23、FAILED - RETRYING: container_download | Download containers if pull is required or told to always pull (all nodes) (4 retries left)

答:由于到dockerhub网络不是特别好造成的。

QingCloud 云平台块存储卷问题

5、为什么存储卷创建失败?

答:用户可以查看存储卷的事件,查看 kube-system 项目的 csi-qingcloud-controller-0 容器组的 csi-qingcloud 容器日志,寻找错误关键字。详细问题原因列表:

问题字样 说明 解决办法
pki access frequency exceed permission denied 此问题通常由其他存储或者集群问题引起,需要继续检查集群状态,有无长时间正在删除的 pvc。 PKI 密钥访问次数过多,调大 PKI 密钥访问频率配额。
resource quota exceed permission denied 云平台配额限制 提工单调大相关资源配额,如硬盘容量和个数
IO timeout 容器组与云平台 API Server 通信问题,通常私有云出现 使用 QingCloud CLI 检查 config.yaml 配置文件正确性。可能是没有安装云平台 API Server或 Kubernetes 集群内部通信问题
Cannot resolve host 私有云环境用户往往仅配置了 hosts 解析云平台 API Server 域名,在容器组内无此记录,造成无法通过 CSI 插件调用云平台 API Server。 需要用户配置 DNS 服务器。

6、为什么存储卷挂载到容器组失败?

答:用户可以查看容器组事件,查看 kube-system 项目的 csi-qingcloud-controller-0 容器组的 csi-qingcloud 容器日志,寻找错误关键字。详细问题原因列表:

问题字样 说明 解决办法
pki access frequency exceed permission denied 此问题通常由其他存储或者集群问题引起,需要继续检查集群状态,有无长时间正在删除的存储卷。 PKI 密钥访问次数过多,调大 PKI 密钥访问频率配额。
cannot find device path 云平台挂盘没主机设备路径。可在 QingCloud Console 查看硬盘的确无设备路径 将存储卷挂载的容器组所属的工作负载副本数设置为 0。容器组删除成功后,再将工作负载副本数设置为 1 即可
PermissionDenied, … volume can only be attached to … 存储卷类型无法挂载至容器组调度的节点的类型 改变存储卷类型或设置容器组调度规则
PermissionDenied, you can only attach [10] volumes to one instance at most 云平台单个主机挂盘个数超过限制 尝试让容器组重新调度,如:将存储卷挂载的容器组所属的工作负载副本数设置为 0。容器组删除成功后,再将工作负载副本数设置为 1
IO timeout 容器组与云平台 API Server 通信问题,通常私有云出现 使用 QingCloud CLI 检查 config.yaml 配置文件正确性。可能是没有安装云平台 API Server 或 Kubernetes 集群内部通信问题
Cannot resolve host 私有云环境用户往往仅配置了 hosts 解析云平台 API Server 域名,在容器组内无此记录,造成无法通过 CSI 插件调用云平台 API Server。 需要用户配置 DNS 服务器。