问题陈述
我有一个Kubernetes集群,在一个特定的命名空间中运行着许多pod。我想使用Python和Paramiko SSH客户端读取特定pod的日志。
我有吊舱在下面运行
kubectl get pods -n <myNameSpace>
上面命令的结果如下所示
service1-8457bd9899-4jdzz
service2-765b497fbf-2w82j
这是我的Python代码,我知道部署名称,如service1,service2等
我想用这些名字来读日志
kubectl logs service1* -n <myNameSpace> -f --tail 100
但是上面的命令不起作用,因为正则表达式不起作用。
我的解决方案
我运行两个命令,一个获取完整的pod名称,另一个使用该完整名称检查日志
ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command(f'kubectl get pods -n namespace1 |grep service1')
pod_name_service1 = ssh_stdout.read().decode("utf-8").split(' ')[0]
ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command(
f'kubectl logs {pod_name_service1} -n edge -f --tail 100')
service1_logs = ssh_stdout.read().decode("utf-8")
问题
如何仅使用服务部署名称(不使用复制集名称+随机的5位字母数字)来检索日志?有没有其他的办法呢?
2条答案
按热度按时间li9yvcax1#
如果只有一个复制副本,或者您不关心获取哪个复制副本,则可以直接在命令行上使用Deployment名称
请注意,这是在特定Pod上实际工作的几个命令之一,即使您可以使用
deployment/name
语法(其他对象类型也可以)。如果它连接的特定Pod退出,那么kubectl logs
命令也会停止,即使其他副本保持不间断地运行。(我还强烈建议修复代码中的shell注入漏洞。考虑使用Kubernetes SDK执行
kubectl
命令,如果需要,可以通过ssh连接端口转发Kubernetes API端点。7vux5j2d2#
这可能会让你更容易到达那里。(与regex相比,就是这样。)
文档