Skip to content

Latest commit

 

History

History
177 lines (117 loc) · 9.22 KB

debug_mobile_cloud_x86_kind_create_fail.rst

File metadata and controls

177 lines (117 loc) · 9.22 KB

排查X86移动云Kind创建失败

Note

我遇到kind创建失败的原因是 mobile_cloud_x86_zfs ,即底层物理主机采用了 docker_zfs_driver 。这要求 kind 的基础镜像中必须也安装 zfsutils-linux ,否则处理容器文件系统会出错。这个bug在2022年11月1日才修复,所以需要采用最新的git版本而不是release版本(我部署时候在2023年1月中旬)

mobile_cloud_x86_kind 创建步骤和 kind_multi_node 方法相同,但是执行:

kind_multi_node/kind_create_cluster

出现如下报错:

debug_mobile_cloud_x86_kind_create_fail/kind_create_cluster_fail_output

此外,物理主机的系统日志有大量的 audit 记录,应该和容器内部运行 systemd 相关(大量重复出现应该是异常):

debug_mobile_cloud_x86_kind_create_fail/dmesg_audit

排查

kind_multi_node/kind_create_cluster_retain

提示信息:

Exporting logs for cluster "dev" to:
/tmp/3866643061

/tmp/3866643061 目录下会找到kind集群各个节点的日志文件

  • /tmp/3866643061/dev-control-plane/kubelet.log 日志中看到有CNI初始化失败的信息:

kind_multi_node/kind_control_plane_kubelet.log

  • 实际物理主机上docker容器已经启动:

    docker ps

显示:

CONTAINER ID   IMAGE                                COMMAND                  CREATED         STATUS         PORTS                       NAMES
19537801aa08   kindest/node:v1.25.3                 "/usr/local/bin/entr…"   4 minutes ago   Up 4 minutes   127.0.0.1:46635->6443/tcp   dev-control-plane2
75f9a2d8dc9e   kindest/node:v1.25.3                 "/usr/local/bin/entr…"   4 minutes ago   Up 4 minutes                               dev-worker3
bf960a2f24f5   kindest/node:v1.25.3                 "/usr/local/bin/entr…"   4 minutes ago   Up 4 minutes   127.0.0.1:37711->6443/tcp   dev-control-plane
c81440eb69b3   kindest/node:v1.25.3                 "/usr/local/bin/entr…"   4 minutes ago   Up 4 minutes                               dev-worker4
f2f81e25705f   kindest/node:v1.25.3                 "/usr/local/bin/entr…"   4 minutes ago   Up 4 minutes                               dev-worker5
5d52f70acb69   kindest/node:v1.25.3                 "/usr/local/bin/entr…"   4 minutes ago   Up 4 minutes                               dev-worker
acd0de1e4f4d   kindest/node:v1.25.3                 "/usr/local/bin/entr…"   4 minutes ago   Up 4 minutes   127.0.0.1:41761->6443/tcp   dev-control-plane3
8369e5a5e853   kindest/node:v1.25.3                 "/usr/local/bin/entr…"   4 minutes ago   Up 4 minutes                               dev-worker2
f9ac6e6b606a   kindest/haproxy:v20220607-9a4d8d2a   "haproxy -sf 7 -W -d…"   4 minutes ago   Up 4 minutes   127.0.0.1:35931->6443/tcp   dev-external-load-balancer
  • 进入 dev-control-plane 节点进行检查:

    docker exec -it bf960a2f24f5 /bin/bash

可以看到底层容器内部的磁盘挂载:

# df -h
Filesystem                                                                   Size  Used Avail Use% Mounted on
zpool-data/62fd3b4b5c3acb12b91336c2f358d369a5223f2657025f03a8b6b35a22f4d2ef  859G  504M  858G   1% /
tmpfs                                                                         64M     0   64M   0% /dev
shm                                                                           64M     0   64M   0% /dev/shm
zpool-data                                                                   860G  2.1G  858G   1% /var
tmpfs                                                                        7.8G  454M  7.4G   6% /run
tmpfs                                                                        7.8G     0  7.8G   0% /tmp
/dev/nvme0n1p2                                                                60G   27G   33G  45% /usr/lib/modules
tmpfs                                                                        5.0M     0  5.0M   0% /run/lock
  • 检查 dev-control-plane 节点的 journal.log 日志可以看到 zfs 文件系统错误:

kind_multi_node/kind_control_plane_journal.log

我检查了正在运行的 dev-control-plane 节点内部,确实没有安装 zfs 工具,这说明需要采用最新的 kind 版本

修复zfs

  • 我尝试添加镜像参数,指定最新镜像:

    kind create cluster --name dev --config kind-config.yaml --image kindest/node:latest

但是提示错误:

✗ Ensuring node image (kindest/node:latest) 🖼
ERROR: failed to create cluster: failed to pull image "kindest/node:latest": command "docker pull kindest/node:latest" failed with error: exit status 1
Command Output: Error response from daemon: manifest for kindest/node:latest not found: manifest unknown: manifest unknown
  • 由于kind的github仓库已经修复这个问题,所以下载最新的Dockerfile来构建本地镜像,注意,这个构建需要激活 buildkit ,也就是修订 /etc/docker/dameon.json :

debug_mobile_cloud_x86_kind_create_fail/daemon.json

重启 docker 服务

  • (错误,我以为只需要build base镜像即可,实际上应该是完整build一个kubernetes镜像,见下文) 执行下面的脚本获得最新的Dockerfile,并构建镜像

debug_mobile_cloud_x86_kind_create_fail/build_node_image_by_lastest_dockerfile.sh

  • 执行 build_kind_cluster_k8s_source :

通过以下方式安装 buildx 插件(必须,否则build报错):

build_kind_cluster_k8s_source/install_docker_buildx_plugin

下载Kubernetes源代码 $(go env GOPATH)/src/k8s.io/kubernetes ,然后构建镜像:

build_kind_cluster_k8s_source/kind_build_node-image

  • 重新执行创建集群:

debug_mobile_cloud_x86_kind_create_fail/kind_create_cluster

Note

构建镜像时启动的容器内部需要访问 github 下载containerd,但是会被GFW阻断,需要解决容器内部proxy设置 docker_client_proxy :

  • 在墙外服务器上 squid_startup 部署squid
  • 修订 ~/.ssh/config 添加:

../../infra_service/ssh/ssh_tunneling/ssh_config_parent-squid

  • 然后执行ssh命令打通端口转发:

../../infra_service/ssh/ssh_tunneling/ssh_parent-squid

  • 在Docker客户端,创建或配置 ~/.docker/config.json 设置以下json格式配置:

../../docker/network/docker_proxy/config.json

接下来创建的新容器,容器内部会自动注入代理配置,也就加速下载

新问题: 创建集群不能找到日志行

上述自定义包含zfs工具的镜像执行创建 dev 集群又遇到新问题:

debug_mobile_cloud_x86_kind_create_fail/create_kind_not_find_log_line

这个问题在 could not find a line that matches "Reached target .*Multi-User System.*" #2460 有人遇到过