You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Kubernetes Python API读取Pod日志时返回HTTP 400错误

问题排查与解决

错误原因分析

从异常返回的响应体可明确定位问题:

"message":"container {'name': 'nginx', ...} is not valid for pod nginx-deployment-cb99699bc-7jr98"

调用read_namespaced_pod_log接口时,container参数传入了完整的容器状态字典,但接口要求的是容器名称字符串。代码中for container in pod_details["status"]["containerStatuses"]循环里,container变量是包含name、state等字段的字典对象,直接传入接口导致Kubernetes API无法识别。

修复后的代码

修改循环内的参数传递,将container替换为container["name"],同时注意Pod日志为纯文本格式,无需用json.loads解析:

#!/usr/bin/python3
import requests
import json
from kubernetes import client, config
from kubernetes.client import configuration
from kubernetes.stream import stream

config.load_kube_config()
configuration.assert_hostname = False
k8sapi = client.CoreV1Api()

resp_obj = k8sapi.list_pod_for_all_namespaces(
        watch=False,
        _preload_content=False
        )
pods_all = json.loads(resp_obj.data)


for pod in pods_all["items"]:
        pod_name  = pod["metadata"]["name"]
        pod_ns = pod["metadata"]["namespace"]
        pod_details = json.loads((k8sapi.read_namespaced_pod(name=pod_name, namespace=pod_ns, _preload_content=False)).data)
        for container in pod_details["status"]["containerStatuses"]:
                if "waiting" in container["state"]:
                        try:
                                # 传入容器名称而非整个字典,日志为纯文本无需JSON解析
                                pod_log = k8sapi.read_namespaced_pod_log(
                                    name=pod_name, 
                                    container=container["name"], 
                                    namespace=pod_ns, 
                                    _preload_content=False
                                ).data
                                print(f"Pod {pod_name} 容器 {container['name']} 日志:\n{pod_log}")
                        except Exception as e:
                                print(f"获取日志失败: {str(e)}")
        print("-------")

额外说明

  • read_namespaced_pod_log返回的日志内容是纯文本形式,即使容器处于启动失败状态,日志也是文本格式的错误信息,直接使用返回的data即可。
  • 容器处于ImagePullBackOff状态时,日志会包含镜像拉取失败的详细信息,可辅助进一步排查问题。

内容的提问来源于stack exchange,提问作者3br10ee032

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 13:09:54