如何查找正在处理请求的Kubernetes吊舱

问题描述:

我正在运行2个吊舱和一个Type:NodePort服务,以在吊舱之间平衡请求。我想知道何时向服务发送请求,该请求转发到哪个窗格。有没有办法找到这个,因为看看响应,看起来所有的请求都是由同一个pod处理的。如何查找正在处理请求的Kubernetes吊舱

  1. 你可以看一下应用程序日志文件,如果你使用一个。如果您在标准输出中打印任何内容,请使用kubectl logs <pod>来查看消息。

  2. 对于测试,您可以在响应中包含pod主机名。

+0

我试过'kubectl日志',它是空的。 – PMat

+0

你记录什么了吗? –

很可能是因为您的上下文和命名空间不足,您无法看到日志。

尝试使用kubectl get pods -o wide --all-namespaces | grep <pod>来获取pod所在的名称空间以及节点IP地址的信息。

然后喂,进入下面的命令来获得最后100行日志 kubectl --namespace <namespace> logs --tail 100 -f <pod>

另外还有一点荚不与服务相关联的远程机会的运行尾巴。要检查运行kubectl describe services --namespace <namespace> <service>并在Selector:部分中查找应用程序名称

您也可以执行到容器中,查看该端口本身是否可以访问或绑定端口。如果它不在收听或回答,很可能是由于该服务没有与名称空间中的应用程序相关联。

+0

选择器指向我的部署 – PMat

默认情况下,kubernetes Service将使用WRR进行负载平衡。在创建服务时,将在节点中生成iptables规则。

可以肯定的是,ssh进入节点并运行iptables-save|less。搜索服务的名称。在下面的示例中,服务microbot负载平衡具有3个副本的microbot部署。你的案例中应该有2个条目,因为你只有2个豆荚。

-A KUBE-SVC-LX5ZXALLN4UQ7ZFL -m comment --comment "default/microbot:" -m statistic --mode random --probability 0.33332999982 -j KUBE-SEP-OZCDYTQTC3KQGJK5 
-A KUBE-SVC-LX5ZXALLN4UQ7ZFL -m comment --comment "default/microbot:" -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-SKIRAXBCCQB5R4MV 
-A KUBE-SVC-LX5ZXALLN4UQ7ZFL -m comment --comment "default/microbot:" -j KUBE-SEP-SPMPNZCOIJIRSNNQ 

如果iptables输出并不像上述情况,很可能是您的服务配置不正确。就像Heidi所说的那样,这个吊舱与服务无关。

+0

我有两个pod,我的看起来像这样'-A KUBE-SVC-RCFZYSCVQORLOLVD -m注释 - 注释“default/memory-service:”-m statistic --mode random --probability 0.50000000000 - j KUBE-SEP-CXEQ55XIH4PURQSE -A KUBE-SVC-RCFZYSCVQORLOLVD -m注释 - 注释“default/memory-service:”-j KUBE-SEP-QL7KI24MTSZRY3Q3' – PMat

+0

iptables规则看起来是正确的,应该正确地进行负载平衡。你可以让每个命中的'memory-service'守护进程日志?这样你就可以用'kubectl logs -f'这个容器来观察。或者,在部署中公开另外1个端口并将其与服务关联。一旦你这样做了''kubectl exec'到pod中,安装netcat并让它在额外的端口上连续监听。然后再次运行你的测试。我就是这样调试的。 –