Mar*_*cze 5 kubernetes google-kubernetes-engine
我有一个在 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
Run Code Online (Sandbox Code Playgroud)
另一方面,当我检查 时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>
Run Code Online (Sandbox Code Playgroud)
这部分对我来说很奇怪
Endpoints: 10.36.0.5:80,10.36.1.5:80,10.36.100.5:80 + 114 more...
Run Code Online (Sandbox Code Playgroud)
我期待在那里看到 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,...
Run Code Online (Sandbox Code Playgroud)
然后一堆IP地址都是在“卡住”NotReadyAddresses状态(不是从服务“失踪”不过,如果我总结了IP地址的数量在那些Addresses和NotReadyAddresses,这仍低于准备豆荚总数)。虽然我根本不知道这是否相关,但我在网上找不到关于这个NotReadyAddresses领域的太多信息。
事实证明,这是由于我们的节点池中使用了可抢占式虚拟机引起的,如果节点不是可抢占式的,则不会发生这种情况。
我们无法找出根本原因的更多细节,但无论如何,使用前置任务作为节点并不是官方支持的场景,因此我们改用常规虚拟机。
| 归档时间: |
|
| 查看次数: |
1357 次 |
| 最近记录: |