python实现获取k8s的pod信息
目录
1. 依赖
2. 代码
3. 执行代码
4. 效果
1. 依赖
#requirements.txt kubernetes>=28.1.0
2. 代码
#!/usr/bin/env python3 """ Kubernetes Pod信息查看脚本 查看monitor命名空间下的所有Pod信息 """ import os from kubernetes import client, config from kubernetes.client.rest import ApiException import json from datetime import datetime def load_k8s_config():"""加载Kubernetes配置"""try:# 尝试从kubeconfig文件加载配置config.load_kube_config()print("✓ 已从kubeconfig文件加载配置")except Exception:try:# 尝试从集群内部加载配置config.load_incluster_config()print("✓ 已从集群内部加载配置")except Exception as e:print(f"✗ 无法加载Kubernetes配置: {e}")return Falsereturn True def get_pods_in_namespace(namespace="monitor"):"""获取指定命名空间下的所有Pod信息"""try:# 创建API客户端v1 = client.CoreV1Api()print(f"\n正在获取 {namespace} 命名空间下的Pod信息...")# 获取Pod列表pods = v1.list_namespaced_pod(namespace=namespace)if not pods.items:print(f"在 {namespace} 命名空间下没有找到Pod")return []print(f"✓ 找到 {len(pods.items)} 个Pod")pod_info_list = []for pod in pods.items:pod_info = {"name": pod.metadata.name,"namespace": pod.metadata.namespace,"status": pod.status.phase,"ready": "Ready" if pod.status.conditions else "Not Ready","restarts": pod.status.container_statuses[0].restart_count if pod.status.container_statuses else 0,"age": pod.metadata.creation_timestamp,"ip": pod.status.pod_ip,"node": pod.spec.node_name,"containers": []}# 获取容器信息if pod.status.container_statuses:for container in pod.status.container_statuses:container_info = {"name": container.name,"image": container.image,"ready": container.ready,"restart_count": container.restart_count,"state": str(container.state)}pod_info["containers"].append(container_info)pod_info_list.append(pod_info)return pod_info_listexcept ApiException as e:print(f"✗ API错误: {e}")return []except Exception as e:print(f"✗ 获取Pod信息时发生错误: {e}")return [] def display_pod_info(pod_info_list):"""显示Pod信息"""if not pod_info_list:returnprint(f"\n{'='*80}")print(f"MONITOR命名空间Pod信息 - {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")print(f"{'='*80}")for i, pod in enumerate(pod_info_list, 1):print(f"\n{i}. Pod名称: {pod['name']}")print(f" 命名空间: {pod['namespace']}")print(f" 状态: {pod['status']}")print(f" 就绪状态: {pod['ready']}")print(f" 重启次数: {pod['restarts']}")print(f" 创建时间: {pod['age']}")print(f" Pod IP: {pod['ip']}")print(f" 节点: {pod['node']}")if pod['containers']:print(f" 容器信息:")for j, container in enumerate(pod['containers'], 1):print(f" {j}. {container['name']}")print(f" 镜像: {container['image']}")print(f" 就绪: {container['ready']}")print(f" 重启次数: {container['restart_count']}")print(f" 状态: {container['state']}") def save_to_json(pod_info_list, filename="monitor_pods.json"):"""将Pod信息保存到JSON文件"""if not pod_info_list:returntry:# 转换datetime对象为字符串for pod in pod_info_list:if pod['age']:pod['age'] = pod['age'].isoformat()with open(filename, 'w', encoding='utf-8') as f:json.dump(pod_info_list, f, ensure_ascii=False, indent=2)print(f"\n✓ Pod信息已保存到 {filename}")except Exception as e:print(f"✗ 保存文件时发生错误: {e}") def main():"""主函数"""print("Kubernetes Pod信息查看工具")print("=" * 50)# 加载Kubernetes配置if not load_k8s_config():return# 获取Pod信息pod_info_list = get_pods_in_namespace("monitor")# 显示Pod信息display_pod_info(pod_info_list)# 保存到JSON文件save_to_json(pod_info_list)print(f"\n{'='*80}")print("脚本执行完成") if __name__ == "__main__":main()
3. 执行代码
pip install -r requirements.txt python get-pod.py #python3执行以下代码 python3 get-pod.py
查看其他命名空间的Pod,可以修改脚本中的namespace
参数:
pod_info_list = get_pods_in_namespace("your-namespace")
4. 效果
查看monitor名字空间下的pod信息
[root@master1 get-pod]# python3 get-pod.py Kubernetes Pod信息查看工具 ================================================== ✓ 已从kubeconfig文件加载配置 正在获取 monitor 命名空间下的Pod信息... ✓ 找到 16 个Pod ================================================================================ MONITOR命名空间Pod信息 - 2025-08-06 23:37:37 ================================================================================ 1. Pod名称: grafana-server-6bf79cb7fc-lnqkd命名空间: monitor状态: Running就绪状态: Ready重启次数: 0创建时间: 2025-08-06 15:27:04+00:00Pod IP: 10.244.137.126节点: master1容器信息:1. grafana镜像: 192.168.48.100/prometheus/grafana:latest就绪: True重启次数: 0状态: {'running': {'started_at': datetime.datetime(2025, 8, 6, 15, 27, 4, tzinfo=tzutc())},'terminated': None,'waiting': None} 2. Pod名称: kube-state-metrics-5565bbc5ff-d4rrp命名空间: monitor状态: Running就绪状态: Ready重启次数: 0创建时间: 2025-08-06 15:27:04+00:00Pod IP: 10.244.180.27节点: master2容器信息:1. kube-state-metrics镜像: quay.io/coreos/kube-state-metrics:latest就绪: True重启次数: 0状态: {'running': {'started_at': datetime.datetime(2025, 8, 6, 15, 27, 4, tzinfo=tzutc())},'terminated': None,'waiting': None} 3. Pod名称: loki-0命名空间: monitor状态: Running就绪状态: Ready重启次数: 0创建时间: 2025-08-06 15:32:40+00:00Pod IP: 10.244.196.131节点: node01容器信息:1. loki镜像: 192.168.48.100/prometheus/grafana/loki:2.6.1就绪: True重启次数: 0状态: {'running': {'started_at': datetime.datetime(2025, 8, 6, 15, 32, 41, tzinfo=tzutc())},'terminated': None,'waiting': None} 4. Pod名称: loki-promtail-7mlwc命名空间: monitor状态: Running就绪状态: Ready重启次数: 1创建时间: 2025-08-05 18:32:36+00:00Pod IP: 10.244.186.239节点: node03容器信息:1. promtail镜像: 192.168.48.100/prometheus/grafana/promtail:2.9.3就绪: True重启次数: 1状态: {'running': {'started_at': datetime.datetime(2025, 8, 6, 15, 31, 40, tzinfo=tzutc())},'terminated': None,'waiting': None} 5. Pod名称: loki-promtail-gdjtz命名空间: monitor状态: Running就绪状态: Ready重启次数: 1创建时间: 2025-08-05 18:32:36+00:00Pod IP: 10.244.137.86节点: master1容器信息:1. promtail镜像: 192.168.48.100/prometheus/grafana/promtail:2.9.3就绪: True重启次数: 1状态: {'running': {'started_at': datetime.datetime(2025, 8, 6, 15, 20, 40, tzinfo=tzutc())},'terminated': None,'waiting': None} 6. Pod名称: loki-promtail-kjtkk命名空间: monitor状态: Running就绪状态: Ready重启次数: 1创建时间: 2025-08-05 18:32:36+00:00Pod IP: 10.244.180.37节点: master2容器信息:1. promtail镜像: 192.168.48.100/prometheus/grafana/promtail:2.9.3就绪: True重启次数: 1状态: {'running': {'started_at': datetime.datetime(2025, 8, 6, 15, 20, 42, tzinfo=tzutc())},'terminated': None,'waiting': None} 7. Pod名称: loki-promtail-n6psz命名空间: monitor状态: Running就绪状态: Ready重启次数: 1创建时间: 2025-08-05 18:32:36+00:00Pod IP: 10.244.140.72节点: node02容器信息:1. promtail镜像: 192.168.48.100/prometheus/grafana/promtail:2.9.3就绪: True重启次数: 1状态: {'running': {'started_at': datetime.datetime(2025, 8, 6, 15, 32, 26, tzinfo=tzutc())},'terminated': None,'waiting': None} 8. Pod名称: loki-promtail-qdn9v命名空间: monitor状态: Running就绪状态: Ready重启次数: 1创建时间: 2025-08-05 18:32:36+00:00Pod IP: 10.244.196.130节点: node01容器信息:1. promtail镜像: 192.168.48.100/prometheus/grafana/promtail:2.9.3就绪: True重启次数: 1状态: {'running': {'started_at': datetime.datetime(2025, 8, 6, 15, 31, 32, tzinfo=tzutc())},'terminated': None,'waiting': None} 9. Pod名称: loki-promtail-zcbmp命名空间: monitor状态: Running就绪状态: Ready重启次数: 0创建时间: 2025-08-06 15:20:58+00:00Pod IP: 10.244.136.57节点: master3容器信息:1. promtail镜像: 192.168.48.100/prometheus/grafana/promtail:2.9.3就绪: True重启次数: 0状态: {'running': {'started_at': datetime.datetime(2025, 8, 6, 15, 20, 59, tzinfo=tzutc())},'terminated': None,'waiting': None} 10. Pod名称: node-exporter-7wshk命名空间: monitor状态: Running就绪状态: Ready重启次数: 1创建时间: 2025-08-05 17:52:28+00:00Pod IP: 192.168.48.105节点: node02容器信息:1. node-exporter镜像: prom/node-exporter:latest就绪: True重启次数: 1状态: {'running': {'started_at': datetime.datetime(2025, 8, 6, 15, 31, 30, tzinfo=tzutc())},'terminated': None,'waiting': None} 11. Pod名称: node-exporter-99rz7命名空间: monitor状态: Running就绪状态: Ready重启次数: 1创建时间: 2025-08-05 17:52:28+00:00Pod IP: 192.168.48.104节点: node01容器信息:1. node-exporter镜像: prom/node-exporter:latest就绪: True重启次数: 1状态: {'running': {'started_at': datetime.datetime(2025, 8, 6, 15, 31, 31, tzinfo=tzutc())},'terminated': None,'waiting': None} 12. Pod名称: node-exporter-cvrms命名空间: monitor状态: Running就绪状态: Ready重启次数: 1创建时间: 2025-08-05 17:52:28+00:00Pod IP: 192.168.48.101节点: master1容器信息:1. node-exporter镜像: prom/node-exporter:latest就绪: True重启次数: 1状态: {'running': {'started_at': datetime.datetime(2025, 8, 6, 15, 20, 41, tzinfo=tzutc())},'terminated': None,'waiting': None} 13. Pod名称: node-exporter-qd5hz命名空间: monitor状态: Running就绪状态: Ready重启次数: 1创建时间: 2025-08-05 17:52:28+00:00Pod IP: 192.168.48.106节点: node03容器信息:1. node-exporter镜像: prom/node-exporter:latest就绪: True重启次数: 1状态: {'running': {'started_at': datetime.datetime(2025, 8, 6, 15, 31, 41, tzinfo=tzutc())},'terminated': None,'waiting': None} 14. Pod名称: node-exporter-stjwr命名空间: monitor状态: Running就绪状态: Ready重启次数: 1创建时间: 2025-08-05 17:52:28+00:00Pod IP: 192.168.48.103节点: master3容器信息:1. node-exporter镜像: prom/node-exporter:latest就绪: True重启次数: 1状态: {'running': {'started_at': datetime.datetime(2025, 8, 6, 15, 20, 39, tzinfo=tzutc())},'terminated': None,'waiting': None} 15. Pod名称: node-exporter-sxdf2命名空间: monitor状态: Running就绪状态: Ready重启次数: 1创建时间: 2025-08-05 17:52:28+00:00Pod IP: 192.168.48.102节点: master2容器信息:1. node-exporter镜像: prom/node-exporter:latest就绪: True重启次数: 1状态: {'running': {'started_at': datetime.datetime(2025, 8, 6, 15, 20, 41, tzinfo=tzutc())},'terminated': None,'waiting': None} 16. Pod名称: prometheus-alertmanager-5758b69574-prhdb命名空间: monitor状态: Pending就绪状态: Ready重启次数: 0创建时间: 2025-08-06 15:26:54+00:00Pod IP: 10.244.136.4节点: master3容器信息:1. alertmanager镜像: prom/alertmanager:v0.23.0就绪: False重启次数: 0状态: {'running': None,'terminated': None,'waiting': {'message': None, 'reason': 'PodInitializing'}}2. prometheus镜像: 192.168.48.100/prometheus/prometheus:latest就绪: False重启次数: 0状态: {'running': None,'terminated': None,'waiting': {'message': None, 'reason': 'PodInitializing'}} ✓ Pod信息已保存到 monitor_pods.json ================================================================================ 脚本执行完成
同时生成了pod信息的json文件
[root@master1 get-pod]# ls get-pod.py monitor_pods.json README.md requirements.txt