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

时间:2018-07-17 12:04:42

标签: linux kubernetes ubuntu-16.04

在尝试从工作节点连接到集群时遇到以下错误。

集群版本为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"

3 个答案:

答案 0 :(得分:1)

一定要检查kubeadm和kubelet的版本,并确保所有节点上都使用了相同版本的软件包。在安装之前,您应该在主机上“标记并保留”这些版本:

检查每个版本的当前版本:

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-降级

然后,在安装它们之后,标记并保留它们,以使其无法自动升级并破坏您的系统

sudo apt-mark hold docker-ce kubelet kubeadm kubectl

答案 1 :(得分:0)

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

在主控制节点上检查Configmap的{​​{1}}名称空间:

kube-system

我认为错误消息中kubectl get configmap -n kube-system 版本的结果值将与kubelet-config不同。

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

GitHub上讨论了类似的情况。

答案 2 :(得分:0)

问题不是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)