无法将工作节点连接到 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
尝试从工作节点连接到集群时出现下面提到的错误。
集群版本为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