python實現(xiàn)獲取k8s的pod信息方式
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:
# 嘗試從集群內(nèi)部加載配置
config.load_incluster_config()
print("? 已從集群內(nèi)部加載配置")
except Exception as e:
print(f"? 無法加載Kubernetes配置: {e}")
return False
return True
?
?
def get_pods_in_namespace(namespace="monitor"):
"""獲取指定命名空間下的所有Pod信息"""
try:
# 創(chuàng)建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_list
except ApiException as e:
print(f"? API錯誤: {e}")
return []
except Exception as e:
print(f"? 獲取Pod信息時發(fā)生錯誤: {e}")
return []
?
?
def display_pod_info(pod_info_list):
"""顯示Pod信息"""
if not pod_info_list:
return
print(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" 狀態(tài): {pod['status']}")
print(f" 就緒狀態(tài): {pod['ready']}")
print(f" 重啟次數(shù): {pod['restarts']}")
print(f" 創(chuàng)建時間: {pod['age']}")
print(f" Pod IP: {pod['ip']}")
print(f" 節(jié)點: {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" 重啟次數(shù): {container['restart_count']}")
print(f" 狀態(tài): {container['state']}")
?
?
def save_to_json(pod_info_list, filename="monitor_pods.json"):
"""將Pod信息保存到JSON文件"""
if not pod_info_list:
return
try:
# 轉換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"? 保存文件時發(fā)生錯誤: {e}")
?
?
def main():
"""主函數(shù)"""
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("腳本執(zhí)行完成")
?
?
if __name__ == "__main__":
main()?
3. 執(zhí)行代碼
pip install -r requirements.txt python get-pod.py #python3執(zhí)行以下代碼 python3 get-pod.py
查看其他命名空間的Pod,可以修改腳本中的namespace參數(shù):
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
狀態(tài): Running
就緒狀態(tài): Ready
重啟次數(shù): 0
創(chuàng)建時間: 2025-08-06 15:27:04+00:00
Pod IP: 10.244.137.126
節(jié)點: master1
容器信息:
1. grafana
鏡像: 192.168.48.100/prometheus/grafana:latest
就緒: True
重啟次數(shù): 0
狀態(tài): {'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
狀態(tài): Running
就緒狀態(tài): Ready
重啟次數(shù): 0
創(chuàng)建時間: 2025-08-06 15:27:04+00:00
Pod IP: 10.244.180.27
節(jié)點: master2
容器信息:
1. kube-state-metrics
鏡像: quay.io/coreos/kube-state-metrics:latest
就緒: True
重啟次數(shù): 0
狀態(tài): {'running': {'started_at': datetime.datetime(2025, 8, 6, 15, 27, 4, tzinfo=tzutc())},
'terminated': None,
'waiting': None}
?
3. Pod名稱: loki-0
命名空間: monitor
狀態(tài): Running
就緒狀態(tài): Ready
重啟次數(shù): 0
創(chuàng)建時間: 2025-08-06 15:32:40+00:00
Pod IP: 10.244.196.131
節(jié)點: node01
容器信息:
1. loki
鏡像: 192.168.48.100/prometheus/grafana/loki:2.6.1
就緒: True
重啟次數(shù): 0
狀態(tài): {'running': {'started_at': datetime.datetime(2025, 8, 6, 15, 32, 41, tzinfo=tzutc())},
'terminated': None,
'waiting': None}
?
4. Pod名稱: loki-promtail-7mlwc
命名空間: monitor
狀態(tài): Running
就緒狀態(tài): Ready
重啟次數(shù): 1
創(chuàng)建時間: 2025-08-05 18:32:36+00:00
Pod IP: 10.244.186.239
節(jié)點: node03
容器信息:
1. promtail
鏡像: 192.168.48.100/prometheus/grafana/promtail:2.9.3
就緒: True
重啟次數(shù): 1
狀態(tài): {'running': {'started_at': datetime.datetime(2025, 8, 6, 15, 31, 40, tzinfo=tzutc())},
'terminated': None,
'waiting': None}
?
5. Pod名稱: loki-promtail-gdjtz
命名空間: monitor
狀態(tài): Running
就緒狀態(tài): Ready
重啟次數(shù): 1
創(chuàng)建時間: 2025-08-05 18:32:36+00:00
Pod IP: 10.244.137.86
節(jié)點: master1
容器信息:
1. promtail
鏡像: 192.168.48.100/prometheus/grafana/promtail:2.9.3
就緒: True
重啟次數(shù): 1
狀態(tài): {'running': {'started_at': datetime.datetime(2025, 8, 6, 15, 20, 40, tzinfo=tzutc())},
'terminated': None,
'waiting': None}
?
6. Pod名稱: loki-promtail-kjtkk
命名空間: monitor
狀態(tài): Running
就緒狀態(tài): Ready
重啟次數(shù): 1
創(chuàng)建時間: 2025-08-05 18:32:36+00:00
Pod IP: 10.244.180.37
節(jié)點: master2
容器信息:
1. promtail
鏡像: 192.168.48.100/prometheus/grafana/promtail:2.9.3
就緒: True
重啟次數(shù): 1
狀態(tài): {'running': {'started_at': datetime.datetime(2025, 8, 6, 15, 20, 42, tzinfo=tzutc())},
'terminated': None,
'waiting': None}
?
7. Pod名稱: loki-promtail-n6psz
命名空間: monitor
狀態(tài): Running
就緒狀態(tài): Ready
重啟次數(shù): 1
創(chuàng)建時間: 2025-08-05 18:32:36+00:00
Pod IP: 10.244.140.72
節(jié)點: node02
容器信息:
1. promtail
鏡像: 192.168.48.100/prometheus/grafana/promtail:2.9.3
就緒: True
重啟次數(shù): 1
狀態(tài): {'running': {'started_at': datetime.datetime(2025, 8, 6, 15, 32, 26, tzinfo=tzutc())},
'terminated': None,
'waiting': None}
?
8. Pod名稱: loki-promtail-qdn9v
命名空間: monitor
狀態(tài): Running
就緒狀態(tài): Ready
重啟次數(shù): 1
創(chuàng)建時間: 2025-08-05 18:32:36+00:00
Pod IP: 10.244.196.130
節(jié)點: node01
容器信息:
1. promtail
鏡像: 192.168.48.100/prometheus/grafana/promtail:2.9.3
就緒: True
重啟次數(shù): 1
狀態(tài): {'running': {'started_at': datetime.datetime(2025, 8, 6, 15, 31, 32, tzinfo=tzutc())},
'terminated': None,
'waiting': None}
?
9. Pod名稱: loki-promtail-zcbmp
命名空間: monitor
狀態(tài): Running
就緒狀態(tài): Ready
重啟次數(shù): 0
創(chuàng)建時間: 2025-08-06 15:20:58+00:00
Pod IP: 10.244.136.57
節(jié)點: master3
容器信息:
1. promtail
鏡像: 192.168.48.100/prometheus/grafana/promtail:2.9.3
就緒: True
重啟次數(shù): 0
狀態(tài): {'running': {'started_at': datetime.datetime(2025, 8, 6, 15, 20, 59, tzinfo=tzutc())},
'terminated': None,
'waiting': None}
?
10. Pod名稱: node-exporter-7wshk
命名空間: monitor
狀態(tài): Running
就緒狀態(tài): Ready
重啟次數(shù): 1
創(chuàng)建時間: 2025-08-05 17:52:28+00:00
Pod IP: 192.168.48.105
節(jié)點: node02
容器信息:
1. node-exporter
鏡像: prom/node-exporter:latest
就緒: True
重啟次數(shù): 1
狀態(tài): {'running': {'started_at': datetime.datetime(2025, 8, 6, 15, 31, 30, tzinfo=tzutc())},
'terminated': None,
'waiting': None}
?
11. Pod名稱: node-exporter-99rz7
命名空間: monitor
狀態(tài): Running
就緒狀態(tài): Ready
重啟次數(shù): 1
創(chuàng)建時間: 2025-08-05 17:52:28+00:00
Pod IP: 192.168.48.104
節(jié)點: node01
容器信息:
1. node-exporter
鏡像: prom/node-exporter:latest
就緒: True
重啟次數(shù): 1
狀態(tài): {'running': {'started_at': datetime.datetime(2025, 8, 6, 15, 31, 31, tzinfo=tzutc())},
'terminated': None,
'waiting': None}
?
12. Pod名稱: node-exporter-cvrms
命名空間: monitor
狀態(tài): Running
就緒狀態(tài): Ready
重啟次數(shù): 1
創(chuàng)建時間: 2025-08-05 17:52:28+00:00
Pod IP: 192.168.48.101
節(jié)點: master1
容器信息:
1. node-exporter
鏡像: prom/node-exporter:latest
就緒: True
重啟次數(shù): 1
狀態(tài): {'running': {'started_at': datetime.datetime(2025, 8, 6, 15, 20, 41, tzinfo=tzutc())},
'terminated': None,
'waiting': None}
?
13. Pod名稱: node-exporter-qd5hz
命名空間: monitor
狀態(tài): Running
就緒狀態(tài): Ready
重啟次數(shù): 1
創(chuàng)建時間: 2025-08-05 17:52:28+00:00
Pod IP: 192.168.48.106
節(jié)點: node03
容器信息:
1. node-exporter
鏡像: prom/node-exporter:latest
就緒: True
重啟次數(shù): 1
狀態(tài): {'running': {'started_at': datetime.datetime(2025, 8, 6, 15, 31, 41, tzinfo=tzutc())},
'terminated': None,
'waiting': None}
?
14. Pod名稱: node-exporter-stjwr
命名空間: monitor
狀態(tài): Running
就緒狀態(tài): Ready
重啟次數(shù): 1
創(chuàng)建時間: 2025-08-05 17:52:28+00:00
Pod IP: 192.168.48.103
節(jié)點: master3
容器信息:
1. node-exporter
鏡像: prom/node-exporter:latest
就緒: True
重啟次數(shù): 1
狀態(tài): {'running': {'started_at': datetime.datetime(2025, 8, 6, 15, 20, 39, tzinfo=tzutc())},
'terminated': None,
'waiting': None}
?
15. Pod名稱: node-exporter-sxdf2
命名空間: monitor
狀態(tài): Running
就緒狀態(tài): Ready
重啟次數(shù): 1
創(chuàng)建時間: 2025-08-05 17:52:28+00:00
Pod IP: 192.168.48.102
節(jié)點: master2
容器信息:
1. node-exporter
鏡像: prom/node-exporter:latest
就緒: True
重啟次數(shù): 1
狀態(tài): {'running': {'started_at': datetime.datetime(2025, 8, 6, 15, 20, 41, tzinfo=tzutc())},
'terminated': None,
'waiting': None}
?
16. Pod名稱: prometheus-alertmanager-5758b69574-prhdb
命名空間: monitor
狀態(tài): Pending
就緒狀態(tài): Ready
重啟次數(shù): 0
創(chuàng)建時間: 2025-08-06 15:26:54+00:00
Pod IP: 10.244.136.4
節(jié)點: master3
容器信息:
1. alertmanager
鏡像: prom/alertmanager:v0.23.0
就緒: False
重啟次數(shù): 0
狀態(tài): {'running': None,
'terminated': None,
'waiting': {'message': None, 'reason': 'PodInitializing'}}
2. prometheus
鏡像: 192.168.48.100/prometheus/prometheus:latest
就緒: False
重啟次數(shù): 0
狀態(tài): {'running': None,
'terminated': None,
'waiting': {'message': None, 'reason': 'PodInitializing'}}
?
? Pod信息已保存到 monitor_pods.json
?
================================================================================
腳本執(zhí)行完成同時生成了pod信息的json文件
[root@master1 get-pod]# ls get-pod.py monitor_pods.json README.md requirements.txt
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
python?requests實現(xiàn)上傳excel數(shù)據(jù)流
這篇文章主要介紹了python?requests實現(xiàn)上傳excel數(shù)據(jù)流,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02
Numpy數(shù)組array和矩陣matrix轉換方法
這篇文章主要介紹了Numpy數(shù)組array和矩陣matrix轉換方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-08-08
PyQt通過動畫實現(xiàn)平滑滾動的QScrollArea
這篇文章主要為大家詳細介紹了PyQt如何使用Qt的動畫框架 QPropertyAnimation來實現(xiàn)平滑滾動的QScrollArea,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的可以學習一下2023-01-01
pymongo給mongodb創(chuàng)建索引的簡單實現(xiàn)方法
這篇文章主要介紹了pymongo給mongodb創(chuàng)建索引的簡單實現(xiàn)方法,涉及Python使用pymongo模塊操作mongodb的技巧,需要的朋友可以參考下2015-05-05
Python?十大經(jīng)典排序算法實現(xiàn)詳解
排序算法是《數(shù)據(jù)結構與算法》中最基本的算法之一。排序算法可以分為內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存2022-01-01
使用Python和PyQt5實現(xiàn)全方面系統(tǒng)資源監(jiān)控
這篇文章主要介紹了一個基于PyQt5和psutil庫開發(fā)的系統(tǒng)資源監(jiān)控工具,該工具不僅具有強大的系統(tǒng)監(jiān)控功能,還采用了電影中經(jīng)典的數(shù)字雨視覺效果作為背景,感興趣的可以了解下2025-06-06
Win10 GPU運算環(huán)境搭建(CUDA10.0+Cudnn 7.6.5+pytroch1.2+tensorflow1.
熟悉深度學習的人都知道,深度學習是需要訓練的,本文主要介紹了Win10 GPU運算環(huán)境搭建,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09
Pytest執(zhí)行unittest TestSuite(測試套件)的實現(xiàn)方法
TestSuite一直是unittest的靈活與精髓之處,在繁多的測試用例中,可以任意挑選和組合各種用例集,這篇文章主要介紹了Pytest執(zhí)行unittest TestSuite(測試套件)的實現(xiàn)方法,需要的朋友可以參考下2021-08-08
Python實現(xiàn)http接口自動化測試的示例代碼
這篇文章主要介紹了Python實現(xiàn)http接口自動化測試的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-10-10

