加入群集需要很长时间



我已经设置了我的主节点,我正在尝试加入工作节点,如下所示:

kubeadm join 192.168.30.1:6443 --token 3czfua.os565d6l3ggpagw7 --discovery-token-ca-cert-hash sha256:3a94ce61080c71d319dbfe3ce69b555027bfe20f4dbe21a9779fd902421b1a63

但是,该命令将永远挂起,处于以下状态:

[preflight] Running pre-flight checks
[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/

既然这只是一个警告,为什么它实际上会失败?

编辑:我在/var/log/syslog中注意到以下内容

Mar 29 15:03:15 ubuntu-xenial kubelet[9626]: F0329 15:03:15.353432    9626 server.go:193] failed to load Kubelet config file /var/lib/kubelet/config.yaml, error failed to read kubelet config file "/var/lib/kubelet/config.yaml", error: open /var/lib/kubelet/config.yaml: no such file or directory
Mar 29 15:03:15 ubuntu-xenial systemd[1]: kubelet.service: Main process exited, code=exited, status=255/n/a
Mar 29 15:03:15 ubuntu-xenial systemd[1]: kubelet.service: Unit entered failed state.

如果您想在工作人员加入主服务器时查看更多详细信息,请首先使用:

kubeadm join 192.168.1.100:6443 --token m3jfbb.wq5m3pt0qo5g3bt9     --discovery-token-ca-cert-hash sha256:d075e5cc111ffd1b97510df9c517c122f1c7edf86b62909446042cc348ef1e0b --v=2

使用上面的命令,我可以看到我的工作线程无法与主节点建立连接,所以我只是停止了防火墙:

systemctl stop firewalld 

这可以通过创建一个新令牌来解决 使用此命令:

kubeadm token create --print-join-command

并使用生成的令牌将其他节点加入群集

问题与kubeadm没有安装开箱即用的网络 CNI 兼容解决方案有关;

因此,如果没有此步骤,kubernetes节点/主节点将无法建立任何形式的通信;

以下任务解决了此问题:

- name: kubernetes.yml --> Install Flannel
shell: kubectl -n kube-system apply -f https://raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml
become: yes
environment:
KUBECONFIG: "/etc/kubernetes/admin.conf"
when: inventory_hostname in (groups['masters'] | last)

我在 CentOS 7 上确实遇到了同样的错误,但就我而言,join 命令工作没有问题,所以它确实只是一个警告。

>  [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker
> cgroup driver. The recommended driver is "systemd". Please follow the
> guide at https://kubernetes.io/docs/setup/cri/ [preflight] Reading
> configuration from the cluster... [preflight] FYI: You can look at
> this config file with 'kubectl -n kube-system get cm kubeadm-config
> -oyaml' [kubelet-start] Downloading configuration for the kubelet from the "kubelet-config-1.14" ConfigMap in the kube-system namespace

正如官方文档所提到的,有两个常见问题使 init 挂起(我想它也适用于 join 命令):

Kubelet 的默认 cgroup 驱动程序配置不同于 由 Docker 使用。检查系统日志文件(例如/var/log/message) 或者检查 journalctl -u kubelet 的输出。如果您看到某些内容 如下所示:

首先尝试官方文档中的步骤,如果不起作用,请提供更多信息,以便我们在需要时进一步排除故障。

我有一堆 k8s 部署脚本最近因相同的错误消息而中断......看起来 Docker 更改了它的安装。 试试这个——

以前的安装: apt-get isntall docker-ce

更新的安装: apt-get install docker-ce docker-ce-cli containerd.io

/var/lib/kubelet/config.yaml 是如何创建的?

关于/var/lib/kubelet/config.yaml: no such file or directory错误。

以下是创建上述文件应在工作节点上进行的步骤。

1 ) 创建/var/lib/kubelet/文件夹。
它是在安装 kubelet 服务时创建的,如下所示:

sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

2)config.yaml的创造。
kubeadm 加入流程应该发生,所以当你运行kubeadm join时,kubeadm 使用 Bootstrap 令牌凭据来执行 TLS 引导程序,它会获取下载kubelet-config-1.XConfigMap 所需的凭据并将其写入/var/lib/kubelet/config.yaml

成功执行后,您应该看到以下日志:

.
.
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
.
.

因此,在这两个步骤之后,您应该已经准备好/var/lib/kubelet/config.yaml

kubeadm 联接流失败

在您的情况下,kubeadm 加入流程似乎失败了,这可能是由于多种原因造成的,例如 iptables 配置错误、已在使用的端口、容器运行时未正确安装等 - 如此处和此处所述。

据我所知,没有网络CNI兼容解决方案的事实应该不会影响/var/lib/kubelet/config.yaml的创建:

A) 我们可以看到 kubeadm 预检检查哪些问题会导致加入阶段失败。

B ) 我还通过删除我使用的当前解决方案 (Calico) 并再次运行kubeadm resetkubeadm join来测试此问题,kubeadm日志中没有出现错误(我有我上面提到的成功执行日志)并且/var/lib/kubelet/config.yaml创建正确。

(*) 当然,集群无法在这种状态下运行 - 我只是想强调,我认为问题是 A 中提到的选项之一。

最新更新