如何仅使用带有正则表达式的部署名称来检查特定 pod 的日志

问题描述 投票:0回答:2

问题陈述

我有一个 Kubernetes 集群,其中有许多在特定命名空间中运行的 pod。我想使用 Python 和 Paramiko SSH 客户端读取特定 pod 的日志。

我有豆荚在下面运行

kubectl get pods -n <myNameSpace>

上面命令的结果看起来像

service1-8457bd9899-4jdzz
service2-765b497fbf-2w82j

这是我的 Python 代码,我知道服务 1、服务 2 等部署名称

我想单独使用这些名称来阅读日志

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位字母数字)来检索日志?还有其他方法吗?

python kubernetes paramiko
2个回答
1
投票

如果只有一个replica,或者不关心得到哪个replica,可以直接在命令行使用Deployment名称

kubectl logs -n my-namespace deployment/service1 --tail 100 -f

请注意,这是实际上适用于特定 Pod 的几个命令之一,即使您可以使用

deployment/name
语法(其他对象类型也可以)。如果它附加到的特定 Pod 退出,那么
kubectl logs
命令也会停止,即使其他副本保持不间断运行。

(我还强烈建议修复代码中的 shell 注入漏洞。考虑使用 Kubernetes SDK 执行

kubectl
命令,如果需要,可以通过 ssh 连接端口转发 Kubernetes API 端点。)


0
投票

这可能会让你更容易到达那里。 (与正则表达式相比。)

kubectl logs -l app=yourappname

文档

© www.soinside.com 2019 - 2024. All rights reserved.