kubernetes - 如何解决为什么我的服务中的端点没有更新?
问题描述
我有一个在 Google Kubernetes Engine 上运行的 Kubernetes 集群。
我有一个部署,我手动(通过编辑hpa
对象)从 100 个副本扩展到 300 个副本以进行一些负载测试。当我通过向服务发送 HTTP 请求对部署进行负载测试时,似乎并非所有 pod 都获得了相同数量的流量,只有大约 100 个 pod 显示它们正在处理流量(通过查看它们的 CPU 负载和我们的自定义指标)。所以我怀疑该服务没有对所有 pod 之间的请求进行负载均衡。
如果我检查deployment
,我可以看到所有 300 个副本都准备好了。
$ k get deploy my-app --show-labels
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE LABELS
my-app 300 300 300 300 21d app=my-app
另一方面,当我检查 时service
,我看到了这个:
$ k describe svc my-app
Name: my-app
Namespace: production
Labels: app=my-app
Selector: app=my-app
Type: ClusterIP
IP: 10.40.9.201
Port: http 80/TCP
TargetPort: http/TCP
Endpoints: 10.36.0.5:80,10.36.1.5:80,10.36.100.5:80 + 114 more...
Port: https 443/TCP
TargetPort: https/TCP
Endpoints: 10.36.0.5:443,10.36.1.5:443,10.36.100.5:443 + 114 more...
Session Affinity: None
Events: <none>
对我来说奇怪的是这部分
Endpoints: 10.36.0.5:80,10.36.1.5:80,10.36.100.5:80 + 114 more...
我期待在那里看到 300 个端点,这个假设是否正确?
(我也发现了这篇关于类似问题的帖子,但是作者在端点更新之前只经历了几分钟的延迟,但对我来说,即使在半小时内也没有改变。)
我该如何解决问题所在?我读到这是由 Endpoints 控制器完成的,但我找不到任何有关在何处检查其日志的信息。
更新:我们设法再复制了几次。有时它不太严重,例如 381 个端点而不是 445 个。我们注意到的一件有趣的事情是,如果我们检索端点的详细信息:
$ k describe endpoints my-app
Name: my-app
Namespace: production
Labels: app=my-app
Annotations: <none>
Subsets:
Addresses: 10.36.0.5,10.36.1.5,10.36.10.5,...
NotReadyAddresses: 10.36.199.5,10.36.209.5,10.36.239.2,...
然后一堆 IP 被“卡住”在NotReadyAddresses
状态中(不是那些从服务中“丢失”的 IP,但如果我将 和 中的 IP 数量相加Addresses
,NotReadyAddresses
那仍然少于就绪 pod 的总数)。虽然我不知道这是否相关,但我在网上找不到太多关于这个NotReadyAddresses
领域的信息。
解决方案
事实证明,这是由于在我们的节点池中使用了可抢占的虚拟机造成的,如果节点不是可抢占的,则不会发生这种情况。
我们无法找出根本原因的更多细节,但使用 preemtibles 作为节点无论如何都不是官方支持的方案,因此我们切换到常规 VM。
推荐阅读
- python - 无法在 R Studio 上导入 Python 模块
- c++ - 我可以在 CreateFileW() 中使用 LockFileEx() 和 FILE_APPEND_DATA 吗?
- python - pytz 为“非洲/喀土穆”提供了错误的时区偏移
- java - 如何在 android 中使用来自 apache/poi/ss/formula/functions/Mirr.html 的 Mirr() 函数?
- php - 运行安装在我的机器上的 phpMyadmin MySql 和 MySQL root 的可预见问题
- python - 例如,如何获得夜间 = 1 的列的平均值/平均值
- python - 如何使用 Python 获取属性 XPATH 列表?
- python - 当我尝试附加值时出现 NameError
- c++ - c++中的动态分配问题,仅适用于第一次迭代
- node.js - 在 mongo db 集合中给出未定义的值