简体中文
  • 云原生容器产品
    • QKCP 企业级容器平台
    • KSV 虚拟化管理平台
    • KubeSphere 混合架构容器云
    • QKCP 容器一体机
  • 云原生服务
    • 云原生备份容灾服务
    • 轻量集群服务
    • 集群巡检服务
  • 公有云容器服务
    • KubeSphere on AWS
    • KubeSphere on QingCloud
    • KubeSphere on Azure
    • KubeSphere on DigitalOcean
  • 技术支持服务
    • 全方位支持工单
    • 平台 Logo 定制

常见问题

汇总 KSV 平台的常见问题。

本节汇总 KSV 容器虚拟化(KSV)平台的常见问题。

底层原理

KSV 的底层原理描述如下表所示:

名称描述
虚拟机KSV 底层使用 KubeVirt 插件,支持对虚拟机的生命周期管理、状态管理和连接管理。
网络KSV 底层使用 Multus 插件,在节点网卡上创建 MacVTap(用于简化虚拟化桥接网络的设备驱动程序)作为虚拟机的网卡。通过设置 IP 池,虚拟机可以与服务器节点在同一个网段中,方便用户的访问。
镜像KSV 底层使用 CDI 插件将镜像导入到持久卷中,通过持久卷的克隆实现系统盘创建。
存储KSV 支持与 Kubernetes 的 CSI 插件联动,实现存储相关资源的管理。

安装注意事项

安装 KSV 之前,请阅读并遵循以下注意事项:

  • 为服务器设置默认路由(网关)。

  • 安装前,建议使用以下脚本清理为 Ceph 预留的磁盘。执行时请注意替换脚本中的盘符。清理完成后,请重启服务器。

    DISK="/dev/sdX" # Zap the disk to a fresh, usable state (zap-all is important, b/c MBR has to be clean) sgdisk --zap-all $DISK # Wipe a large portion of the beginning of the disk to remove more LVM metadata that may be present dd if=/dev/zero of="$DISK" bs=1M count=100 oflag=direct,dsync # SSDs may be better cleaned with blkdiscard instead of dd blkdiscard $DISK # Inform the OS of partition table changes partprobe $DISK
  • 若条件允许或当前环境为生产环境,建议在 etcd 中使用 SSD 盘。默认 etcd 的数据目录为 /var/lib/etcd

  • 若系统盘空间较小或当前环境为生产环境,建议在 /var/lib/rancher 目录下挂载 100 GB 及以上的硬盘。

问题排查

安装 KSV 时,OpenSSL 出现报错信息该如何处理?

问题描述

安装 KSV 时,OpenSSL 出现如下报错信息:

error: openssl: /usr/lib/x86_64-linux-gnu/libssl.so.1.1: version `OPENSSL_1_1_1' not found (required by openssl) openssl: /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1: version `OPENSSL_1_1_1' not found (required by openssl) : exit status 1

此问题是由于系统软件版本过低导致。

解决方案

执行命令 apt updateapt upgrade 更新系统软件包,更新完成后重新安装 KSV 即可。

安装 KSV 时,磁盘出现报错信息该如何处理?

问题描述

安装 KSV 时,磁盘出现报错信息,导致 KSV 安装失败。

解决方案

  1. 执行以下脚本,清理 Ceph 磁盘:

    DISK="/dev/sdX" # Zap the disk to a fresh, usable state (zap-all is important, b/c MBR has to be clean) sgdisk --zap-all $DISK # Wipe a large portion of the beginning of the disk to remove more LVM metadata that may be present dd if=/dev/zero of="$DISK" bs=1M count=100 oflag=direct,dsync # SSDs may be better cleaned with blkdiscard instead of dd blkdiscard $DISK # Inform the OS of partition table changes partprobe $DISK
  2. 脚本执行完成后,重新安装 KSV。

安装 KSV 时,CoreDNS 无法正常运行该如何处理?

问题描述

安装 KSV 时,CoreDNS 运行出错,不处于 Running 状态。

解决方案

  1. 执行 kubectl get pod -n kube-system 查看 CoreDNS 的状态。若 CoreDNS 的状态不是 Running,则需要修改 CoreDNS 的配置。
  2. 执行 kubectl edit cm -n kube-system coredns 修改 CoreDNS 的配置。
  3. 将配置项 forward . /etc/resolv.conf 修改为 forward . 8.8.8.8。修改完成后,保存并退出。
  4. 执行 kubectl rollout restart deploy -n kube-system coredns 重启 CoreDNS。

安装 KSV 时,进度流程卡在 MinIO 该如何处理?

问题描述

安装流程卡在 MinIO,导致 KSV 安装失败。本问题一般是由于 CoreDNS 或存储异常导致,可检查环境中 CoreDNS 和存储的状态进行问题排查。请注意,存储系统应该为裸设备或裸分区,即未分区或未格式化的存储系统。

解决方案

  1. 执行 ksv logs 查看日志信息。若是由于 MinIO 导致的安装失败,会返回如下信息:
    1. check the storage configuration and storage server 2. make sure the DNS address in /etc/resolv.conf is available 3. execute 'kubectl logs -n kubesphere-system -l job-name=minio-make-bucket-job' to watch logs 4. execute 'helm -n kubesphere-system uninstall ks-minio && kubectl -n kubesphere-system delete job minio-make-bucket-job' 5. Restart the installer pod in kubesphere-system namespace
  2. 检查 CoreDNS 状态。若 CoreDNS 状态异常,可参考 安装 KSV 时,CoreDNS 无法正常运行该如何处理 进行问题排查。
  3. 检查存储状态。若存储状态异常,执行以下操作进行问题排查:
    1. 执行 kubectl get pod -n rook-ceph 查看 Ceph 组件状态。
    2. 检查是否存在 rook-ceph-osd-x-xxxxx 相关的 pod。若存在,检查 pod 是否处于 Running 状态。
    3. 若上述步骤中不存在处于 Running 状态的 pod,请确定服务器是否为 Ceph 预留了未格式化的磁盘。
    4. 如果存在满足上述要求的磁盘,执行 安装注意事项 中的脚本对磁盘进行清理。磁盘清理完成后,重启服务器。

安装 KSV 时,为什么提示服务器不支持虚拟化?

问题描述

安装 KSV 时,系统返回如下信息,提示安装程序未识别到服务器虚拟化支持:

Some nodes do not support virtualization. KSV will run in emulation mode. The emulation mode may occupy more resources and may affect performance.

目前发现某些国产 ARM64 CPU 服务器无法识别服务器虚拟化,但其虚拟化是正常且可使用的。由于安装时开启的是模拟虚拟化,导致创建虚拟机失败。

解决方案

  1. 编辑集群配置文件 kubectl edit cc -n kubesphere-system ks-installer,将配置 spec.virtualization 中的 useEmulation 设置为 false
  2. 保存并退出,查看日志,等待运行完成即可。

如何重置用户密码?

  1. 登录服务器节点。

  2. 执行以下命令重置用户的密码:

    kubectl patch users <用户名> -p '{"spec":{"password":"<新的密码>"}}' --type='merge' && kubectl annotate users <用户名> iam.kubesphere.io/password-encrypted-

    common:NOTE

    • 您需要将命令中的<用户名>参数替换为实际的用户名,将<新的密码>参数修改为新的密码。
    • 建议在新的密码中包含数字、大写字母和小写字母,长度设置为 6 至 64 个字符。

如何创建 IP 池?

以下视频演示如何在 KSV Web 控制台创建 IP 池:

为什么虚拟机状态消息一直显示为等待资源中?

等待资源中意味着系统正在等待创建虚拟机所需的资源。您可以查看对应的磁盘是否创建成功。磁盘创建失败通常是因为设置的容量过大,这时可以删除虚拟机,在重新创建虚拟机时降低磁盘容量大小。

为什么虚拟机状态消息一直显示为调度错误?

调度错误意味着虚拟机调度失败,可能原因及解决方法如下:

可能原因解决方法
虚拟机 CPU 或内存参数设置过大,导致虚拟机调度失败。您可以删除虚拟机,并在重新创建虚拟机时降低 CPU 或内存大小。
某些服务器节点不支持虚拟化。使用 root 用户登录任意服务器节点,执行 grep -E '(svm|vmx)' /proc/cpuinfo 命令,若无回显则不支持虚拟化。
选择的 IP 池与实际环境不符合,导致虚拟机调度失败。预置的 IP 池所设置的网卡名为 eth0,如果机器网卡名称不同,则需要重新创建 IP 池,并设置物理网卡为服务器节点的实际网卡名。在创建虚拟机时选择正确的 IP 池。

KSV 支持上传哪些格式的镜像文件?

KSV 支持上传 IMG、QCOW2、XZ、TAR、GZ、ISO 和 RAW 格式的镜像文件。如果服务器节点有外部访问权限,也支持 HTTP 方式上传镜像文件。

镜像文件较大时,可以使用其他方式上传吗?

KSV 支持从本地或通过 URL 上传镜像。当镜像文件较大时,也支持 FTP 上传。

解决方案

  1. root 用户登录集群中的任意服务器节点。

  2. 执行以下命令获取 FTP 登录的用户名和密码:

    ksv ftp-server
  3. 执行以下命令 FTP 连接集群中的任意服务器节点:

    ftp <节点 IP 地址>

    common:NOTE

    您需要将<节点 IP 地址>替换为您自己的服务器节点 IP 地址。

  4. 使用步骤 2 返回的用户名和密码登录 FTP 服务器。

  5. 执行以下命令将本地镜像文件上传到 FTP 服务器:

    put <本地镜像文件路径>

    例如:

    put /pitrix/img/ubuntu_16.04_LTS_server-cloudimg-amd64.img
  6. 在 KSV Web 控制台的上传镜像页面,通过 URL http://minio.kubesphere-system.svc:9000/qingcloud-images/ubuntu_16.04_LTS_server-cloudimg-amd64.img 上传镜像。

    common:NOTE

    您需要将<本地镜像文件路径>替换成您自己的本地镜像文件路径,将 ubuntu_16.04_LTS_server-cloudimg-amd64.img 替换为将要上传的镜像文件名称。

为什么挂载的磁盘没有生效?

对于单独创建的磁盘,第一次进行动态挂载时,需要重启虚拟机才能生效。后续的热插拔则无须重启虚拟机。

KSV 平台能否对接第三方存储?

可以对接。第三方的存储服务器需要支持 CSI 接口,若支持 CSI 接口,青云可以根据第三方的 CSI 接口规则进行适配和测试。

如何设置统一的外网出口?

操作场景

在多节点集群中,只开放了一台节点服务器用于外网访问,其他节点服务器上的虚拟机需要通过已开放外网的节点服务器访问外网。

原理说明

已开放外网的节点服务器有两张网卡(例如,网卡 A网卡 B),网卡 A 只连接内网。在 KSV 的 IP 池中使用网卡 A 创建内网网络,通过以下命令将内网的 IP 地址转换为网卡 B 的 IP 地址用于外网访问。

解决方案

  1. 使用 root 用户登录已开放外网的节点服务器。

  2. 执行以下命令:

    iptables -t nat -A POSTROUTING -s <内网网段> -o <网卡 B 名称> -j MASQUERADE

    您需要将<内网网段><网卡 B 名称>替换为您自己的网段和网卡名称,例如:

    iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o eno2 -j MASQUERADE
  3. 登录需要访问外网的节点服务器,执行以下命令:

    ip r add default via <内网地址>

    您需要将<内网地址>替换为已开放外网访问的节点服务器的内网 IP 地址,例如:

    ip r add default via 192.168.0.1