Kubelet 停止发布节点状态

Nes*_*uzo 11 kubernetes kubelet

我的两个集群节点有时会Kubelet stopped posting node status进入。kubectl describe node在该节点的日志中我看到:

Dec 11 12:01:03 alma-kube1 kubelet[946]: E1211 06:01:03.166998     946 controller.go:115] failed to ensure node lease exists, will retry in 6.4s, error: Get https://192.168.151.52:6443/apis/coordination.k8s.io/v1beta1/namespaces/kube-node-lease/leases/alma-kube1?timeout=10s: read tcp 192.168.170.7:46824->192.168.151.52:6443: use of closed network connection
Dec 11 12:01:03 alma-kube1 kubelet[946]: W1211 06:01:03.167045     946 reflector.go:289] object-"kube-public"/"myregistrykey": watch of *v1.Secret ended with: very short watch: object-"kube-public"/"myregistrykey": Unexpected watch close - watch lasted less than a second and no items received
Dec 11 12:01:03 alma-kube1 kubelet[946]: W1211 06:01:03.167356     946 reflector.go:289] object-"kube-system"/"kube-router-token-bfzkn": watch of *v1.Secret ended with: very short watch: object-"kube-system"/"kube-router-token-bfzkn": Unexpected watch close - watch lasted less than a second and no items received
Dec 11 12:01:03 alma-kube1 kubelet[946]: W1211 06:01:03.167418     946 reflector.go:289] object-"kube-public"/"default-token-kcnfl": watch of *v1.Secret ended with: very short watch: object-"kube-public"/"default-token-kcnfl": Unexpected watch close - watch lasted less than a second and no items received
Dec 11 12:01:13 alma-kube1 kubelet[946]: E1211 06:01:13.329262     946 kubelet_node_status.go:385] Error updating node status, will retry: failed to patch status "{\"status\":{\"$setElementOrder/conditions\":[{\"type\":\"MemoryPressure\"},{\"type\":\"DiskPressure\"},{\"type\":\"PIDPressure\"},{\"type\":\"Ready\"}],\"conditions\":[{\"lastHeartbeatTime\":\"2019-12-11T06:01:03Z\",\"type\":\"MemoryPressure\"},{\"lastHeartbeatTime\":\"2019-12-11T06:01:03Z\",\"type\":\"DiskPressure\"},{\"lastHeartbeatTime\":\"2019-12-11T06:01:03Z\",\"type\":\"PIDPressure\"},{\"lastHeartbeatTime\":\"2019-12-11T06:01:03Z\",\"type\":\"Ready\"}]}}" for node "alma-kube1": Patch https://192.168.151.52:6443/api/v1/nodes/alma-kube1/status?timeout=10s: net/http: request canceled (Client.Timeout exceeded while awaiting headers)
Run Code Online (Sandbox Code Playgroud)

vla*_*ror 6

长话短说

ssh <failing node>
sudo systemctl restart kubelet
Run Code Online (Sandbox Code Playgroud)

我应该问自己“你尝试过打开和关闭它吗?”这句神奇的话。我不知道是什么导致我的kubelet失败,但我只是ssh进入虚拟机并重新启动kubelet服务,一切都重新开始工作。


Mal*_*ata 2

问题是kubelet有时无法修补其节点状态,超过 250 个资源停留在节点上,kubelet 无法同时使用 kube-apiserver 观看超过 250 个流。将 kube-apiserver 调整 --http2-max-streams-per-connection为 1000 以减轻痛苦。

查看:kubernetes-patch

编辑:

Kubernetes 使用客户端证书、不记名令牌、身份验证代理或 HTTP 基本身份验证通过身份验证插件对 API 请求进行身份验证。当向 API 服务器发出 HTTP 请求时,插件会尝试将以下属性与请求关联起来:

您可以一次启用多种身份验证方法。您通常应该至少使用两种方法:

  • 服务帐户的服务帐户令牌
  • 至少一种用于用户身份验证的其他方法。

当启用多个验证器模块时,成功验证请求的第一个模块会短路评估。API 服务器不保证验证器的运行顺序。

您可以在此处找到有关令牌的信息:令牌

您还可以使用服务帐户,它是自动启用的身份验证器,它使用签名的不记名令牌来验证请求。

服务帐户通常由 API 服务器自动创建,并通过 ServiceAccount 准入控制器与集群中运行的 Pod 关联。不记名令牌安装在众所周知位置的 Pod 中,并允许集群内进程与 API 服务器通信。

服务帐户承载令牌在集群外部使用完全有效,并且可用于为希望与 Kubernetes API 通信的长期作业创建身份。要手动创建服务帐户,只需使用 kubectl create serviceaccount (NAME) 命令即可。这将在当前命名空间中创建一个服务帐户和关联的密钥。

秘密通常包含一系列重要的值,其中许多可能会导致 Kubernetes 内部(例如服务帐户令牌)和外部系统升级。即使单个应用程序可以推断出它期望与之交互的秘密的力量,同一命名空间内的其他应用程序也可以使这些假设无效。

要首先检查令牌,您必须列出秘密,然后描述它们 ( $ kubectl describe secret secret-name)。

要列出机密,请执行以下命令:

$ kubectl get secret
Run Code Online (Sandbox Code Playgroud)

秘密通常包含一系列重要的值,其中许多可能会导致 Kubernetes 内部(例如服务帐户令牌)和外部系统升级。即使单个应用程序可以推断出它期望与之交互的秘密的力量,同一命名空间内的其他应用程序也可以使这些假设无效。

您可以在这里找到更多信息:秘密