最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實(shí)現(xiàn)獲取k8s的pod信息方式

 更新時(shí)間:2025年09月22日 15:53:51   作者:九制橘皮茶  
文章介紹了通過(guò)腳本查看Kubernetes其他命名空間Pod的方法,需修改namespace參數(shù),執(zhí)行后可生成指定命名空間(如monitor)的Pod信息JSON文件,適用于監(jiān)控和調(diào)試場(chǎng)景

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"? 無(wú)法加載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} 命名空間下沒(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名稱: {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名稱: 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名稱: 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名稱: 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名稱: 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名稱: 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名稱: 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名稱: 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名稱: 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名稱: 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名稱: 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名稱: 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名稱: 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名稱: 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名稱: 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名稱: 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名稱: 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)文章

最新評(píng)論

和龙市| 石屏县| 菏泽市| 山阴县| 白山市| 洛南县| 宁安市| 申扎县| 吉首市| 新沂市| 高台县| 莱州市| 台湾省| 孝感市| 宁陕县| 扬州市| 丹棱县| 锡林郭勒盟| 崇文区| 南昌县| 谢通门县| 新巴尔虎左旗| 措美县| 绩溪县| 长汀县| 新安县| 梧州市| 庆城县| 台东县| 嘉定区| 全椒县| 安福县| 闽侯县| 大丰市| 苏尼特左旗| 通州市| 宁晋县| 山东| 赤水市| 南丹县| 德化县|