我已经设置了主节点,并尝试按如下方式加入工作节点:
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.
答案 0 :(得分:2)
首先,如果您想在工作人员加入主要用途时看到更多详细信息:
kubeadm join 192.168.1.100:6443 --token m3jfbb.wq5m3pt0qo5g3bt9 --discovery-token-ca-cert-hash sha256:d075e5cc111ffd1b97510df9c517c122f1c7edf86b62909446042cc348ef1e0b --v=2
使用上述命令,我可以看到我的工作人员无法与主服务器建立连接,所以我只是停止了防火墙:
systemctl stop firewalld
答案 1 :(得分:1)
问题与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)
答案 2 :(得分:0)
我在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的输出。如果看到什么 类似于以下内容:
首先尝试执行official documentation中的步骤,如果该步骤不起作用,请提供更多信息,以便我们在需要时进行进一步的故障排除。
答案 3 :(得分:0)
我有一堆k8s部署脚本,最近由于相同的错误消息而中断了……好像docker改变了它的安装。试试这个-
先前安装: apt-get isntall docker-ce
更新的安装: apt-get install docker-ce docker-ce-cli containerd.io
答案 4 :(得分:0)
关于/var/lib/kubelet/config.yaml: no such file or directory
错误。
下面是在工作程序节点上应该执行的步骤,以便创建提到的文件。
1)创建/var/lib/kubelet/
文件夹。
它是根据here所述安装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 Token凭证执行TLS引导程序,该引导程序将获取下载kubelet-config-1.X
ConfigMap并写入所需的凭证。到/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 join flow失败可能是由于多种原因而发生的,例如iptables配置错误,端口已被使用,容器运行时未正确安装等'-如{{ 3}}和here。
据我所知,没有适用于网络的CNI兼容解决方案这一事实不应影响/var/lib/kubelet/config.yaml
的创建:
A)我们可以在here下看到导致连接阶段失败的问题。
B)我还通过删除当前使用的解决方案(Calico)并再次运行kubeadm reset
和kubeadm join
来测试此问题,并且kubeadm
日志中没有出现错误(我已经得到了我上面提到的成功执行日志),并且/var/lib/kubelet/config.yaml
已正确创建。
(*)当然,集群无法在这种状态下运行-我只是想强调一点,我认为问题是A中提到的选项之一。
答案 5 :(得分:0)
这可以通过创建一个新的令牌来解决 使用这个命令:
<块引用>kubeadm token create --print-join-command
并使用生成的令牌将其他节点加入集群