当前位置: 首页 > news >正文

k8s巡检脚本

k8s_inspect.py

#!/usr/bin/env python3# -*- coding: utf-8 -*-""" Kubernetes 集群健康巡检脚本 检查内容: - 节点是否处于 Ready 状态 - Pod 是否正常运行(跳过已完成的 Job) - Deployment 是否达到期望副本数 - Service 是否有可用的后端 Endpoints 使用方法: python3 k8s_inspect.py 依赖安装(建议在虚拟环境中): pipinstallkubernetes"""importsys from kubernetesimportclient, config from kubernetes.client.restimportApiException def load_kube_config():"""加载 Kubernetes 配置:优先尝试 in-cluster 模式,否则使用 kubeconfig 文件""" try: config.load_incluster_config()print("[成功] 使用集群内配置(in-cluster config)")except config.ConfigException: try: config.load_kube_config()print("[成功] 使用本地 kubeconfig 文件")except config.ConfigException as e: print(f"[失败] 无法加载 Kubernetes 配置: {e}")sys.exit(1)def check_nodes():"""检查所有节点是否就绪(Ready)""" print("\n[信息] 正在检查节点状态...")v1=client.CoreV1Api()try: nodes=v1.list_node().itemsifnot nodes: print("[警告] 未发现任何节点")returnFalse all_ready=Truefornodeinnodes: name=node.metadata.name ready=any(cond.type=="Ready"and cond.status=="True"forcondinnode.status.conditions or[])ifnot ready: print(f"[错误] 节点 {name} 未就绪(NotReady)")all_ready=False else: print(f"[正常] 节点 {name} 已就绪")returnall_ready except ApiException as e: print(f"[错误] 获取节点列表失败: {e}")returnFalse def check_pods():"""检查所有命名空间中的 Pod 状态,跳过已完成的 Job Pod""" print("\n[信息] 正在检查 Pod 状态...")v1=client.CoreV1Api()try: pods=v1.list_pod_for_all_namespaces().itemsifnot pods: print("[信息] 未发现任何 Pod")returnTrue all_ok=Trueforpodinpods: namespace=pod.metadata.namespace name=pod.metadata.name phase=pod.status.phase is_job_pod=(pod.metadata.owner_references and any(owner.kind=="Job"forownerinpod.metadata.owner_references))ifis_job_pod and phasein("Succeeded","Completed"):continueifphase=="Running":continueelifphase=="Pending":continueelifany(c.state.waiting and c.state.waiting.reason=="CrashLoopBackOff"forcin(pod.status.container_statuses or[])): print(f"[错误] Pod {namespace}/{name} 处于 CrashLoopBackOff 状态")all_ok=False else: print(f"[警告] Pod {namespace}/{name} 状态异常: {phase}")all_ok=Falsereturnall_ok except ApiException as e: print(f"[错误] 获取 Pod 列表失败: {e}")returnFalse def check_deployments():"""检查所有 Deployment 是否达到期望的可用副本数""" print("\n[信息] 正在检查 Deployment 状态...")apps_v1=client.AppsV1Api()try: deployments=apps_v1.list_deployment_for_all_namespaces().itemsifnot deployments: print("[信息] 未发现任何 Deployment")returnTrue all_ok=Truefordepindeployments: namespace=dep.metadata.namespace name=dep.metadata.name desired=dep.spec.replicas or0available=dep.status.available_replicas or0ifavailable<desired: print(f"[错误] Deployment {namespace}/{name} 可用副本不足: {available}/{desired}")all_ok=Falsereturnall_ok except ApiException as e: print(f"[错误] 获取 Deployment 列表失败: {e}")returnFalse def check_services():"""检查每个带 selector 的 Service 是否有可用的 Endpoints""" print("\n[信息] 正在检查 Service 的 Endpoints...")v1=client.CoreV1Api()try: services=v1.list_service_for_all_namespaces().items services=[sforsinservicesifs.spec.selector]ifnot services: print("[信息] 未发现带 selector 的 Service")returnTrue all_ok=Trueforsvcinservices: namespace=svc.metadata.namespace name=svc.metadata.name try: endpoints=v1.read_namespaced_endpoints(name, namespace)ifnot endpoints.subsets: print(f"[错误] Service {namespace}/{name} 没有可用的后端 Endpoints")all_ok=False except ApiException as e: print(f"[警告] 读取 Service {namespace}/{name} 的 Endpoints 失败: {e}")all_ok=Falsereturnall_ok except ApiException as e: print(f"[错误] 获取 Service 列表失败: {e}")returnFalse def main():"""主函数:执行检查并汇总结果""" print("开始 Kubernetes 集群健康巡检...")load_kube_config()node_ok=check_nodes()pod_ok=check_pods()deploy_ok=check_deployments()svc_ok=check_services()print("\n========== 巡检结果汇总 ==========")print(f"节点状态: {'正常' if node_ok else '异常'}")print(f"Pod 状态: {'正常' if pod_ok else '异常'}")print(f"Deployment: {'正常' if deploy_ok else '异常'}")print(f"Service 后端: {'正常' if svc_ok else '异常'}")ifall([node_ok, pod_ok, deploy_ok, svc_ok]): print("\n集群整体健康,无异常!")sys.exit(0)else: print("\n集群存在异常,请根据上述信息排查!")sys.exit(1)if__name__=="__main__":main()

http://www.jsqmd.com/news/254002/

相关文章:

  • 吉安市吉州青原吉安吉水峡江雅思培训辅导机构推荐:2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025
  • 串口面向对象封装实例
  • 强烈安利8个一键生成论文工具,MBA论文写作必备!
  • 六、处理Word文件的实用操作
  • 2026年福建草本基因枪美容仪器公司实力解析:美航草本年轻态 /草本年轻态门店 /草本年轻态门店地址 /美航著妍草本年轻态 /美航草本年轻态加盟多钱机构精选 - 品牌推荐官
  • 2026论文写作AI工具终极测评:全流程提效首选,免费神器认准这款
  • 导师严选2026最新!10款AI论文写作软件测评:专科生毕业论文必备工具
  • 2026福建卫生高级职称该怎么备考?这份通关攻略助你高效突围 - 医考机构品牌测评专家
  • 外包交付加速,XinServer 实操案例解析
  • spaCy从入门到精通:1.1 spaCy简介与特点
  • 2026年工业内窥镜厂家推荐排行榜,管道/旋转/井下/测量/高清/超清内窥镜,专业品牌深度解析与选购指南 - 品牌企业推荐师(官方)
  • 基于VUE的农村帮扶管理系统[VUE]-计算机毕业设计源码+LW文档
  • 楼宇自控系统是什么?和其它控制系统到底有什么区别?
  • 12. Material Design
  • 2026副主任药师考试机构实力榜:三大靠谱选择深度测评与口碑推荐 - 医考机构品牌测评专家
  • 【AI编程工具】-TRAE CN v3.3.21 手把手教你玩转全新Skills技能!
  • 救命神器!9款AI论文平台测评:本科生毕业论文救星
  • 基于VUE的宁新学校学生宿舍管理信息系统[VUE]-计算机毕业设计源码+LW文档
  • 2026年副主任药师考试培训机构深度测评:口碑与实力兼备的选择指南 - 医考机构品牌测评专家
  • 实验课速通SQLServer期末考点五:数据库维护
  • spaCy从入门到精通:1.2 安装与环境配置
  • 2026年音乐放松按摩椅厂家权威推荐榜单:音乐放松椅/体感型音乐放松椅/户外素质拓展箱/团体活动工具箱/活动工具箱源头厂家精选 - 品牌推荐官
  • 福建卫生高级职称备考机构深度解析 - 医考机构品牌测评专家
  • 【2026最新版】迅雷看看下载安装教程|电脑版详细安装步骤 + 常见问题解决 - PC修复电脑医生
  • 赣州市全南宁都于都兴国寻乌石城雅思培训辅导机构推荐:2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025
  • GEO服务商技术对决:谁能为您的AI搜索可见度保驾护航?
  • 基于VUE的猫舍小猫管理系统[VUE]-计算机毕业设计源码+LW文档
  • 2026陕西保安服务公司TOP5精选推荐榜:秩序维护、门卫守护、临时勤务服务 - 深度智识库
  • 海外碳酸镁实力派:2025年厂家排行与优势分析,市场碳酸镁精选实力品牌榜单发布 - 品牌推荐师
  • 1.1 什么是Whisper? | 《Whisper语音识别实战专栏》