Kubernetes Master Worker 节点 Kubeadm 加入问题

Posted

技术标签:

【中文标题】Kubernetes Master Worker 节点 Kubeadm 加入问题【英文标题】:Kubernetes Master Worker Node Kubeadm Join issue 【发布时间】:2019-09-10 01:37:13 【问题描述】:

我正在使用 Kubeadm 在我的笔记本电脑上的 Oracle Virtualbox 上安装 Kubernetes。 一切正常,直到我在 Kuberenes Worker 节点上运行此命令以加入主节点 运行后出现错误

sudo kubeadm join 192.168.56.100:6443 --token 0i2osm.vsp2mk63v1ypeyjf     --discovery-token-ca-cert-hash sha256:18511321fcc4b622628dd1ad2f56dbdd319bf024740d58127818720828cc7bf0

错误

[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/
error execution phase preflight: [preflight] Some fatal errors occurred:
        [ERROR DirAvailable--etc-kubernetes-manifests]: /etc/kubernetes/manifests is not empty
        [ERROR FileAvailable--etc-kubernetes-kubelet.conf]: /etc/kubernetes/kubelet.conf already exists
        [ERROR Port-10250]: Port 10250 is in use
        [ERROR FileAvailable--etc-kubernetes-pki-ca.crt]: /etc/kubernetes/pki/ca.crt already exists
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`

我尝试手动删除文件并再次运行该命令,但它没有解决端口问题。 并且每当我停止在 10250 端口上运行的 kubectl 然后运行命令时,它会给出错误“需要启动 kubectl,当我启动 kubectl 时,它会给出端口 10250 正在使用中的错误”

它是一种鸡和蛋的东西

对我如何解决它有什么看法?

【问题讨论】:

【参考方案1】:

你应该先试试

 #kubeadm reset 

因为你已经有 kubernetes,所以会出错。

【讨论】:

你应该删除 iptabales 不需要删除 iptables 尝试 Kubeadm reset 并生成新的令牌和发现证书,它工作了感谢您的帮助!【参考方案2】:

关于kubeadm reset

1 ) 如描述here:

The "reset" command executes the following phases:

preflight              Run reset pre-flight checks
update-cluster-status  Remove this node from the ClusterStatus object.
remove-etcd-member     Remove a local etcd member.
cleanup-node           Run cleanup node.

所以我建议先运行preflight 阶段(通过使用--skip-phases 标志),然后再一起执行所有阶段。

2 ) 当您执行cleanup-node 阶段时,您可以看到正在记录以下步骤:

.
.

[reset] Stopping the kubelet service

[reset] Unmounting mounted directories in "/var/lib/kubelet"

[reset] Deleting contents of config directories: [
/etc/kubernetes/manifests 
/etc/kubernetes/pki
]

[reset] Deleting files: [
/etc/kubernetes/admin.conf 
/etc/kubernetes/kubelet.conf 
/etc/kubernetes/bootstrap-kubelet.conf 
/etc/kubernetes/controller-manager.conf 
/etc/kubernetes/scheduler.conf
]

.
.

让我们回顾一下[reset] 条目,看看它们如何解决您提到的 4 个错误:

A ) 第一个 [reset] 条目将修复 Port 10250 is in use 问题(kubelet 正在侦听此端口)。

B ) 第四个[reset] 条目将修复/etc/kubernetes/manifests is not empty/etc/kubernetes/kubelet.conf already exists 的两个错误。

C ) 我们留下了/etc/kubernetes/pki/ca.crt already exists 错误。 我认为删除/etc/kubernetes/pki 的第三个[reset] 条目应该解决这个问题。 但是,就我而言,当我以 5 的详细级别运行 kubeadm join(通过附加 --v=5 标志)时,我遇到了以下错误:

I0929 ... checks.go:432] validating if ...
[preflight] Some fatal errors occurred:
[ERROR FileAvailable-etc-kubernetes-pki-ca.crt]: /etc/kubernetes/pki/ca.crt already exists

所以我不得不手动删除/etc/kubernetes/pki 文件夹,然后kubeadm join 再次成功。

【讨论】:

感谢您如此详细的解释。有没有办法使用预先存在的 kubelet 配置和其他一切将节点重新加入到它的主节点?或者我们是否需要始终使用 kubeadm reset 来加入它?【参考方案3】:

别跑

kubeadm init (do not do this)

在加入之前在工作节点上。这仅在您的主节点上运行。这样做可能是您已经拥有这些文件的原因,而您不应该这样做。正如亚辛所说:

kubeadm reset

【讨论】:

以上是关于Kubernetes Master Worker 节点 Kubeadm 加入问题的主要内容,如果未能解决你的问题,请参考以下文章

K8S学习之体系架构介绍

《Kurnetes部署篇:Ubuntu20.04基于containerd部署kubernetes1.24.12单master集群》

[云原生专题-25]:K8S - Kubernetes(K8S)Master集群构建与安装过程详细解读 - worker节点的安装与加入

Linux下部署Kubernetes+KubesphereKubernetes基础

云原生 | Kubernetes篇Kubernetes原理与安装

Kubernetes多主Master方式部署