单机体验版本

通过快速安装脚本安装的 Rainbond 是属于单机体验版本,如果在安装时出现问题,请根据当前的文档进行排查问题。

启动流程

dind-process

Rainbond 单机体验版本 是将所有的服务都运行在一个容器中,方便用户快速使用,采用了 dind (Docker in Docker) 的技术,所有的排查操作都在 rainbond-allione 这个容器环境中进行。

在整个安装过程中,会按照以下顺序依次启动服务:

  1. 启动 Containerd 服务,由 Supervisord 控制启动。
    • 日志路径:/app/logs/containerd.log
  2. Load 容器镜像包。
  3. 启动 K3s 服务,由 Supervisord 控制启动。
    • 日志路径:/app/logs/k3s.log
  4. 启动 Rainbodn Region。
    • 运行在 K3s 之上,以 POD 运行。
  5. 启动 Rainbond Console,由 Supervisord 控制启动。

排查思路

整个排查的过程,也将围绕这些任务的执行情况开展。

开始排查之前,启动新的终端,执行以下命令,进入 rainbond-allinone 容器环境中:

  1. docker exec -it rainbond-allinone bash

启动 Containerd 阶段

rainbond-allinone 容器中会启动一个以后台进程方式运行的 Containerd 服务,后续会通过它启动和管理一系列的容器。

如果 Containerd 启动失败,你将会在 rainbond-allinone 的启动日志中看到:

  1. ERROR: Containerd failed to start. Please use the command to view the containerd log 'docker exec rainbond-allinone /bin/cat /app/logs/containerd.log'

根据日志中的命令,执行命令查看 Containerd 日志:

  1. tail -f /app/logs/containerd.log

根据 Containerd 日志排查错误,结合 Containerd 官方文档进行查询。

Load 镜像阶段

在 Load 镜像阶段,使用 nerdctl 工具进行 load

如果您遇到 Load 失败,该阶段会一直循环 Load。

Load 镜像常见问题

如果在 Win、Mac 上部署并使用 -v local:/app/data 将数据挂载到了本地,将会遇到 Load 失败的现象,这是因为本地的存储与 Docker 存储驱动不一致导致的。

单机体验版本 - 图2tip

需要将存储修改为 Docker Volume 卷的方式挂载可解决问题。

启动 K3s 阶段

rainbond-allinone 容器中会启动一个以后台进程方式运行的 K3s 服务,作为容器内部的编排工具。

如果 K3s 启动失败,你将会在 rainbond-allinone 的启动日志中看到:

  1. ERROR: K3s failed to start. Please use the command to view the k3s log 'docker exec rainbond-allinone /bin/cat /app/logs/k3s.log

根据日志中的命令,执行命令查看 K3s 日志:

  1. tail -f /app/logs/k3s.log

根据 K3s 日志排查错误。

k3s常见问题列表

  1. Failed to create cgroup" err="cannot enter cgroupv2 \"/sys/fs/cgroup/kubepods\" with domain controllers -- it is in an invalid state
单机体验版本 - 图3info

在早些版本的 rainbond-allinone 中,尚未支持 cgroupv2。而 cgroupv2 在高于 4.2.0 版本的 Docker Desktop 中被应用,这导致了冲突。所以请降级 Docker Desktop 到 4.2.0 版本及以下。或使用最新版本的单机体验版本的 Rainbond。

  1. level=info msg="Set sysctl 'net/netfilter/nf_conntrack_max' to 196608
  2. level=error msg="Failed to set sysctl: open /proc/sys/net/netfilter/nf_conntrack_max: permission denied
单机体验版本 - 图4info

遭遇以上问题时,可以在主机中修改对应的参数为日志中的相同值,在 linux 操作系统中,执行 sysctl -w net/netfilter/nf_conntrack_max=196608 ; 如果上述操作没有能够解决问题,或者在非 linux 操作系统中遭遇这个问题,可以在 docker run ... 启动命令中添加环境变量 -e K3S_ARGS="--kube-proxy-arg=conntrack-max-per-core=0"

  1. /usr/lib/libbz2.so.1.0.8: no space left on device
单机体验版本 - 图5info

主机中的磁盘空间不足,增加磁盘空间或删除不必要的文件释放空间;对于 Docker Desktop 用户而言,可以参考 Disk utilization 学习变更磁盘空间限额。

启动 Rainbond Region 阶段

rainbond-allinone 容器中会在 rbd-system 命名空间下启动 Rainbond Region POD。在终端命令行中执行以下命令获取这些 POD 的信息。

  1. kubectl get pod -n rbd-system

通过观察 pod 的运行状态,预期的运行状态是 n/n Running

  1. NAME READY STATUS RESTARTS AGE
  2. rbd-etcd-0 1/1 Running 0 2d22h
  3. rainbond-operator-5f785ff5f6-2dvq6 1/1 Running 0 2d22h
  4. rbd-gateway-4ss6z 1/1 Running 0 2d22h
  5. rbd-hub-64777d89d8-vvjn5 1/1 Running 0 2d22h
  6. rbd-node-bsmnj 1/1 Running 0 2d22h
  7. rbd-webcli-8c6849dc6-8lx98 1/1 Running 0 2d22h
  8. rbd-mq-5fcfb64d86-w8bjl 1/1 Running 0 2d22h
  9. rbd-monitor-0 1/1 Running 0 2d22h
  10. kubernetes-dashboard-fbd4fb949-5lf88 1/1 Running 0 2d22h
  11. dashboard-metrics-scraper-7db45b8bb4-mqbpm 1/1 Running 0 2d22h
  12. rbd-resource-proxy-8654b98bc9-4rvnq 1/1 Running 0 2d22h
  13. rbd-db-0 2/2 Running 0 2d22h
  14. rbd-chaos-xn6zr 1/1 Running 0 2d22h
  15. rbd-worker-8664fb5d9-zcfw4 1/1 Running 0 2d22h
  16. rbd-eventlog-0 1/1 Running 0 2d22h
  17. rbd-api-6f6c565856-bq9bp 1/1 Running 0 2d22h

当以上的某些 pod 并非处于 Running 状态时,就需要根据其当前状态进行排查。异常的状态可能包含:

  • Pending
  • CrashLoopBackOff
  • Evicted
单机体验版本 - 图6info

Pending 状态意味着当前 pod 没有能够正常进入启动流程,pod 可能被启动之前所需要执行的任务阻塞,所以处于待定(Pending)状态。要了解 pod (以 rbd-etcd-0 为例)的启动为何遭遇阻塞,可以执行命令 kubectl describe pod rbd-etcd-0 -n rbd-system ,观察最后的 events 部分输出内容来确定 pod 当前事件。并根据提示深入排查。

单机体验版本 - 图7info

CrashLoopBackOff 状态意味着当前 pod 已经可以正常启动,但是其内部的容器自行退出,这通常是因为内部的服务出了问题。要了解 pod (以 rbd-etcd-0 为例)的启动为何失败,可以执行命令 kubectl logs -f rbd-etcd-0 -n rbd-system ,观察日志的输出,通过业务日志来确定问题原因。

单机体验版本 - 图8info

Evicted 状态意味着当前 pod 遭到了调度系统的驱逐,触发驱逐的原因可能包括根分区磁盘占用率过高、容器运行时数据分区磁盘占用率过高等,根据经验,上述原因最为常见,需要进行磁盘空间清理解除驱逐状态。可以通过执行命令 kubectl describe node ,观察返回中的 Conditions 段落输出来确定当前节点的状态。

启动 Rainbond Console 阶段

rainbond-allinone 容器中会启动 Rainbond Console 服务,它是由 Supervisord 控制启动。

如果需要 Console 无法访问的情况,请排查以下日志分析问题:

  1. /app/logs/console.log
  2. /app/logs/console_error.log

修改挂载存储目录路径

Rainbond dind 单机体验版默认会将数据存储在两个目录内,容器内数据目录为 /app/data /opt/rainbond,而宿主机的目录分两种情况:

  1. Linux 安装的单机体验版默认的本地数据目录是 ~/rainbonddata /opt/rainbond
  2. Mac、Windows 安装的单机体验版存在 docker volume 中,可以通过 docker volume ls 命令查看,rainbond-data rainbond-opt

基于 Mac、Windows 安装的单机体验版,无法更改为本地目录,如果因为存储空间满了导致平台无法功能,请通过 Docker Desktop 扩容存储空间。

基于 Linux 安装的单机体验版,可以通过修改 install.sh 安装脚本中的 volume 字段,修改默认的本地目录,如下:

单机体验版本 - 图9tip

如果已经存在数据,需要将数据迁移到新的目录中。

  1. $ vim install.sh
  2. VOLUME_OPTS="-v ~/.ssh:/root/.ssh -v <local_path>:/app/data -v <local_path>:/opt/rainbond"

删除 rainbond-allinone 容器,然后重新执行 install.sh 脚本即可。

  1. docker rm -f rainbond-allinone
  2. bash ./install.sh