Kubernetes-上载cristocket时出错:等待条件时超时

l3zydbqr  于 2023-01-20  发布在  Kubernetes
关注(0)|答案(3)|浏览(259)

我正在尝试为具有1个主节点和2个工作节点的Kubernetes群集创建模板。我已经安装了所有的先决条件软件,并在主节点上运行了kubeadmn init。但是,当我尝试运行kubeadmn join时(它是init命令的输出),出现了错误。

[discovery] Created cluster-info discovery client, requesting info
from "https://10.31.2.33:6443" [discovery] Requesting info from
"https://10.31.2.33:6443" again to validate TLS against the pinned
public key [discovery] Cluster info signature and contents are valid
and TLS certificate validates against pinned roots, will use API
Server "10.31.2.33:6443" [discovery] Successfully established
connection with API Server "10.31.2.33:6443" [kubelet] Downloading
configuration for the kubelet from the "kubelet-config-1.12" ConfigMap
in the kube-system namespace [kubelet] Writing kubelet configuration
to file "/var/lib/kubelet/config.yaml" [kubelet] Writing kubelet
environment file with flags to file
"/var/lib/kubelet/kubeadm-flags.env" [preflight] Activating the
kubelet service [tlsbootstrap] Waiting for the kubelet to perform the
TLS Bootstrap... [patchnode] Uploading the CRI Socket information
"/var/run/dockershim.sock" to the Node API object "<workernode2>" as
an annotation error uploading crisocket: timed out waiting for the
condition```

在workdernode 2上运行此代码之前,我已经执行了swapoff -a
我可以运行一次join,但在那之后,作为脚本的一部分,我运行了kubeadmn reset,然后运行了init和join,在出现这种情况的地方运行了几次。
不知道我在哪里犯了什么错误。
我的主要意图是将所有命令都以shell脚本的形式(在主节点上)放置,以便可以在集群上运行它来创建网络。

hgb9j2n6

hgb9j2n61#

重新启动节点后,我遇到了以下问题:

[kubelet] Creating a ConfigMap "kubelet-config-1.13" in namespace kube-system with the configuration for the kubelets in the cluster
[patchnode] Uploading the CRI Socket information "/var/run/dockershim.sock" to the Node API object "k8smaster" as an annotation
[kubelet-check] Initial timeout of 40s passed.
error execution phase upload-config/kubelet: Error writing Crisocket information for the control-plane node: timed out waiting for the condition

步骤来摆脱这个问题:
1.再次检查主机名,重新启动后它可能已更改。

sudo vi /etc/hostname 
sudo vi /etc/hosts

1.执行以下清理操作
代码:

sudo kubeadm reset
rm -rf /var/lib/cni/
sudo rm -rf /var/lib/cni/

systemctl daemon-reload

systemctl restart kubelet

sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F && sudo iptables -X

1.执行带有如下特殊标记的init操作
代码:

sudo kubeadm init --pod-network-cidr=192.168.0.0/16 --apiserver-advertise-address=10.10.10.2 --ignore-preflight-errors=all

(其中www.example.com是主节点的IP,www.example.com是分配给Pod的专用子网) 10.10.10.2 is the IP of master node and 192.168.0.0/16 is the private subnet assigned for Pods)

xmjla07d

xmjla07d2#

我在Ubuntu 16.04 amd 64上遇到过同样的问题,使用以下命令修复了它:

swapoff -a    # will turn off the swap 
kubeadm reset
systemctl daemon-reload
systemctl restart kubelet
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X  # will reset iptables

另外,看看kubeadm GitHub kubeadm swap on the related issue中的这个问题,人们仍然报告在关闭交换后有这个问题。
您也可以尝试在/etc/default/kubelet文件中添加 --fail-swap-on=false 标记,但对我的情况没有帮助。
这个问题似乎在最新的k8版本中得到了修复,因为在升级集群后,我没有遇到过这个问题。

wnvonmuf

wnvonmuf3#

我建议在修改iptables时要谨慎,因为在2节点Ubuntu 20.04 kubeadm集群上进行了大量的故障排除后,CNI插件依赖于内部节点Map。
使用sudo hostnamectl set-hostname c23996dd402c.mylabserver.com,我将主节点改回其Map名称,然后执行sudo systemctl daemon-reload。我注销并重新登录,以确保重新加载工作正常。我可以看到命令提示符改回默认的VM节点名称。
现在,群集的主机名到专用IP的Map匹配:

~$ cat /etc/hosts
127.0.0.1 localhost
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
# Cloud Server Hostname mapping
172.31.xx.xxx   xxxxxxxx.mylabserver.com
woopsie@master:~$ cat /etc/hostname
xxxxxxxx.mylabserver.com

worker1节点也有同样的问题,所以恢复到系统默认值对我来说是更容易的方法。我只是把它改为sudo hostnamectl set-hostname masterdefaultnodename。恕我直言,iptable的更改应该总是在仔细考虑后进行,并作为一个升级的措施来解决我认为的问题。
主机完成,转到工人1 ...

kubectl get nodes
NAME                           STATUS     ROLES           AGE   VERSION
masterdefaultnodename.mylabserver.com   Ready      control-plane   33d   v1.25.0
worker1defautnodname.mylabserver.com   NotReady   <none>          33d   v1.25.0

相关问题