kubernetes - Kubernetes kubelet 更新节点状态时出错
问题描述
通过 EKS 在 AWS 中运行 Kubernetes 集群。一切似乎都按预期工作,但只是检查所有日志以进行验证。我跳到一个工作节点上,在查看 kubelet 服务时发现了一堆错误
Oct 09 09:42:52 ip-172-26-0-213.ec2.internal kubelet[4226]: E1009 09:42:52.335445 4226 kubelet_node_status.go:377] Error updating node status, will retry: error getting node "ip-172-26-0-213.ec2.internal": Unauthorized
Oct 09 10:03:54 ip-172-26-0-213.ec2.internal kubelet[4226]: E1009 10:03:54.831820 4226 kubelet_node_status.go:377] Error updating node status, will retry: error getting node "ip-172-26-0-213.ec2.internal": Unauthorized
节点都显示为就绪,但我不确定为什么会出现这些错误。有 3 个工作节点,所有 3 个都有相同的 kubelet 错误(主机名明显不同)
附加信息。看起来错误来自 kubelet_node_status.go 中的这一行
node, err := kl.heartbeatClient.CoreV1().Nodes().Get(string(kl.nodeName), opts)
if err != nil {
return fmt.Errorf("error getting node %q: %v", kl.nodeName, err)
}
从工作人员那里,我可以使用 kubectl 执行获取节点就好了:
kubectl get --kubeconfig=/var/lib/kubelet/kubeconfig nodes
NAME STATUS ROLES AGE VERSION
ip-172-26-0-58.ec2.internal Ready <none> 1h v1.10.3
ip-172-26-1-193.ec2.internal Ready <none> 1h v1.10.3
解决方案
事实证明这不是问题。AWS 关于这些错误的官方回复:
kubelet 会定期向 Kubernetes API 报告节点状态。当它这样做时,它需要由 aws-iam-authenticator 生成的身份验证令牌。kubelet 将调用 aws-iam-authenticator 并将令牌存储在其全局缓存中。在 EKS 中,此身份验证令牌将在 21 分钟后过期。
kubelet 不了解令牌的到期时间,因此它将尝试使用其缓存中的令牌访问 API。当 API 返回 Unauthorized 响应时,有一种重试机制从 aws-iam-authenticator 获取新令牌并重试请求。
推荐阅读
- r - R - 通过多个组运行 for 循环(重置)
- javascript - SQLite 选择后跟插入/更新
- html - 我怎样才能让第一行在顶部,第二行垂直居中?
- python-3.x - 无法导入使用 setup.py 生成的 cython 模块
- html - 为什么这个 div 不引导我到该站点?
- python - 通过访问嵌套字典的特定键创建熊猫数据框
- python-3.x - Python - 从列表中返回随机值
- php - 错误:在 Drupal 9 更新后调用 .theme 文件中数组的成员函数 view()
- python - 减去 Pandas 中属于同一组日期的特定行
- sockets - Jetpack 可组合物与 TCP 套接字连接崩溃