python實(shí)現(xiàn)獲取k8s的pod信息方式
1. 依賴(lài)
#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"? 無(wú)法加載Kubernetes配置: {e}")
return False
return True
?
?
def get_pods_in_namespace(namespace="monitor"):
"""獲取指定命名空間下的所有Pod信息"""
try:
# 創(chuàng)建API客戶(hù)端
v1 = client.CoreV1Api()
print(f"\n正在獲取 {namespace} 命名空間下的Pod信息...")
# 獲取Pod列表
pods = v1.list_namespaced_pod(namespace=namespace)
if not pods.items:
print(f"在 {namespace} 命名空間下沒(méi)有找到Pod")
return []
print(f"? 找到 {len(pods.items)} 個(gè)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錯(cuò)誤: {e}")
return []
except Exception as e:
print(f"? 獲取Pod信息時(shí)發(fā)生錯(cuò)誤: {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名稱(chēng): {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)建時(shí)間: {pod['age']}")
print(f" Pod IP: {pod['ip']}")
print(f" 節(jié)點(diǎn): {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:
# 轉(zhuǎn)換datetime對(duì)象為字符串
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"? 保存文件時(shí)發(fā)生錯(cuò)誤: {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 個(gè)Pod
?
================================================================================
MONITOR命名空間Pod信息 - 2025-08-06 23:37:37
================================================================================
?
1. Pod名稱(chēng): grafana-server-6bf79cb7fc-lnqkd
命名空間: monitor
狀態(tài): Running
就緒狀態(tài): Ready
重啟次數(shù): 0
創(chuàng)建時(shí)間: 2025-08-06 15:27:04+00:00
Pod IP: 10.244.137.126
節(jié)點(diǎn): 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名稱(chēng): kube-state-metrics-5565bbc5ff-d4rrp
命名空間: monitor
狀態(tài): Running
就緒狀態(tài): Ready
重啟次數(shù): 0
創(chuàng)建時(shí)間: 2025-08-06 15:27:04+00:00
Pod IP: 10.244.180.27
節(jié)點(diǎn): 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名稱(chēng): loki-0
命名空間: monitor
狀態(tài): Running
就緒狀態(tài): Ready
重啟次數(shù): 0
創(chuàng)建時(shí)間: 2025-08-06 15:32:40+00:00
Pod IP: 10.244.196.131
節(jié)點(diǎn): 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名稱(chēng): loki-promtail-7mlwc
命名空間: monitor
狀態(tài): Running
就緒狀態(tài): Ready
重啟次數(shù): 1
創(chuàng)建時(shí)間: 2025-08-05 18:32:36+00:00
Pod IP: 10.244.186.239
節(jié)點(diǎn): 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名稱(chēng): loki-promtail-gdjtz
命名空間: monitor
狀態(tài): Running
就緒狀態(tài): Ready
重啟次數(shù): 1
創(chuàng)建時(shí)間: 2025-08-05 18:32:36+00:00
Pod IP: 10.244.137.86
節(jié)點(diǎn): 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名稱(chēng): loki-promtail-kjtkk
命名空間: monitor
狀態(tài): Running
就緒狀態(tài): Ready
重啟次數(shù): 1
創(chuàng)建時(shí)間: 2025-08-05 18:32:36+00:00
Pod IP: 10.244.180.37
節(jié)點(diǎn): 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名稱(chēng): loki-promtail-n6psz
命名空間: monitor
狀態(tài): Running
就緒狀態(tài): Ready
重啟次數(shù): 1
創(chuàng)建時(shí)間: 2025-08-05 18:32:36+00:00
Pod IP: 10.244.140.72
節(jié)點(diǎn): 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名稱(chēng): loki-promtail-qdn9v
命名空間: monitor
狀態(tài): Running
就緒狀態(tài): Ready
重啟次數(shù): 1
創(chuàng)建時(shí)間: 2025-08-05 18:32:36+00:00
Pod IP: 10.244.196.130
節(jié)點(diǎn): 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名稱(chēng): loki-promtail-zcbmp
命名空間: monitor
狀態(tài): Running
就緒狀態(tài): Ready
重啟次數(shù): 0
創(chuàng)建時(shí)間: 2025-08-06 15:20:58+00:00
Pod IP: 10.244.136.57
節(jié)點(diǎn): 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名稱(chēng): node-exporter-7wshk
命名空間: monitor
狀態(tài): Running
就緒狀態(tài): Ready
重啟次數(shù): 1
創(chuàng)建時(shí)間: 2025-08-05 17:52:28+00:00
Pod IP: 192.168.48.105
節(jié)點(diǎn): 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名稱(chēng): node-exporter-99rz7
命名空間: monitor
狀態(tài): Running
就緒狀態(tài): Ready
重啟次數(shù): 1
創(chuàng)建時(shí)間: 2025-08-05 17:52:28+00:00
Pod IP: 192.168.48.104
節(jié)點(diǎn): 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名稱(chēng): node-exporter-cvrms
命名空間: monitor
狀態(tài): Running
就緒狀態(tài): Ready
重啟次數(shù): 1
創(chuàng)建時(shí)間: 2025-08-05 17:52:28+00:00
Pod IP: 192.168.48.101
節(jié)點(diǎn): 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名稱(chēng): node-exporter-qd5hz
命名空間: monitor
狀態(tài): Running
就緒狀態(tài): Ready
重啟次數(shù): 1
創(chuàng)建時(shí)間: 2025-08-05 17:52:28+00:00
Pod IP: 192.168.48.106
節(jié)點(diǎn): 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名稱(chēng): node-exporter-stjwr
命名空間: monitor
狀態(tài): Running
就緒狀態(tài): Ready
重啟次數(shù): 1
創(chuàng)建時(shí)間: 2025-08-05 17:52:28+00:00
Pod IP: 192.168.48.103
節(jié)點(diǎn): 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名稱(chēng): node-exporter-sxdf2
命名空間: monitor
狀態(tài): Running
就緒狀態(tài): Ready
重啟次數(shù): 1
創(chuàng)建時(shí)間: 2025-08-05 17:52:28+00:00
Pod IP: 192.168.48.102
節(jié)點(diǎn): 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名稱(chēng): prometheus-alertmanager-5758b69574-prhdb
命名空間: monitor
狀態(tài): Pending
就緒狀態(tài): Ready
重啟次數(shù): 0
創(chuàng)建時(shí)間: 2025-08-06 15:26:54+00:00
Pod IP: 10.244.136.4
節(jié)點(diǎn): 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í)行完成同時(shí)生成了pod信息的json文件
[root@master1 get-pod]# ls get-pod.py monitor_pods.json README.md requirements.txt
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python使用tarfile模塊實(shí)現(xiàn)免費(fèi)壓縮解壓
Python自帶的tarfile模塊可以方便讀取tar歸檔文件,厲害的是可以處理使用gzip和bz2壓縮歸檔文件tar.gz和tar.bz2,這篇文章主要介紹了Python使用tarfile模塊實(shí)現(xiàn)免費(fèi)壓縮解壓,需要的朋友可以參考下2024-03-03
python實(shí)現(xiàn)無(wú)邊框進(jìn)度條的實(shí)例代碼
這篇文章主要介紹了python實(shí)現(xiàn)無(wú)邊框進(jìn)度條的實(shí)例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
基于python實(shí)現(xiàn)MUI區(qū)域滾動(dòng)
這篇文章主要介紹的是python實(shí)現(xiàn)MUI區(qū)域滾動(dòng),MUI提供了區(qū)域滾動(dòng)的組件,使用時(shí)遵循DOM結(jié)構(gòu)就可以,下面來(lái)看看文章具體的實(shí)現(xiàn)內(nèi)容,需要的朋友可以參考一下2021-11-11
使用Python實(shí)現(xiàn)對(duì)PDF文件進(jìn)行密碼保護(hù)
這篇文章主要為大家詳細(xì)了如何使用Python來(lái)實(shí)現(xiàn)PDF文件的密碼保護(hù),以確保只有授權(quán)的用戶(hù)可以訪問(wèn)文檔,文中的示例代碼簡(jiǎn)潔易懂,有需要的小伙伴可以參考一下2024-01-01
python實(shí)現(xiàn)回旋矩陣方式(旋轉(zhuǎn)矩陣)
今天小編就為大家分享一篇python實(shí)現(xiàn)回旋矩陣方式(旋轉(zhuǎn)矩陣),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
Python實(shí)現(xiàn)統(tǒng)計(jì)單詞出現(xiàn)的個(gè)數(shù)
這篇文章主要介紹了Python實(shí)現(xiàn)統(tǒng)計(jì)單詞出現(xiàn)的個(gè)數(shù),本文給出了實(shí)現(xiàn)代碼以及使用方法,需要的朋友可以參考下2015-05-05
Python 字符串類(lèi)型列表轉(zhuǎn)換成真正列表類(lèi)型過(guò)程解析
這篇文章主要介紹了Python 字符串類(lèi)型列表轉(zhuǎn)換成真正列表類(lèi)型過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08

