无法将工作节点连接到 kubernetes 集群

Unable to connect worker node to kubernetes cluster

尝试从工作节点连接到集群时出现下面提到的错误。

集群版本为1.10.4,节点版本为1.11.0

[discovery] Successfully established connection with API Server "10.148.0.2:6443"
[kubelet] Downloading configuration for the kubelet from the "kubelet-config-1.11" ConfigMap in the kube-system namespace
configmaps "kubelet-config-1.11" is forbidden: User "system:bootstrap:7fho7b" cannot get configmaps in the namespace "kube-system"

由于您使用了各种 kubeadm 版本,kubelet-config-1.* 配置映射的控制(主)节点和工作节点之间存在不匹配。

检查您的 Configmap 主控制节点上的 kube-system 命名空间:

kubectl get configmap -n kube-system

我假设 kubelet-config 版本的结果值与错误消息中的 kubelet-config-1.11 不同。

因此,您应该将 kubeadm 升级到版本 1.11 以匹配您的工作节点 kubeadm 版本。

GitHub 上讨论了类似的案例。

问题不是 kubeadm 版本,而是 kubelet 版本。

当您 运行 kubeadm join 时,kubeadm 将查看主机系统中安装了哪个 kubelet 版本,然后它会向 API 服务器询问正确的配置。

代码是 here:

// DownloadConfig downloads the kubelet configuration from a ConfigMap and writes it to disk.
// Used at "kubeadm join" time
func DownloadConfig(client clientset.Interface, kubeletVersion *version.Version, kubeletDir string) error {

    // Download the ConfigMap from the cluster based on what version the kubelet is
    configMapName := kubeadmconstants.GetKubeletConfigMapName(kubeletVersion)

一定要检查你的 kubeadm 和 kubelet 版本,确保你的所有节点都使用相同版本的这些包。在安装之前,您应该 "mark and hold" 您主机上的这些版本:

检查每个的当前版本:

kubelet --version

检查 kubeadm

kubeadm 版本

如果它们不同,则说明您遇到了问题。您应该在所有节点中重新安装相同的版本并允许降级。我在下面命令中的版本可能比当前版本旧,您可以用更新的版本号替换版本号,但这会起作用:

sudo apt-get install -y docker-ce=18.06.1~ce~3-0~ubuntu kubelet=1.12.2-00 kubeadm=1.12.2-00 kubectl =1.12.2-00 --allow-downgrades

然后,一旦安装,标记并保留它们,这样它们就不能自动升级,并破坏你的系统

sudo apt-mark hold docker-ce kubelet kubeadm kubectl