news 2026/5/30 21:09:20

k8s巡检脚本

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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()

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 22:30:39

四大 AI 模型结果对比实测:揭秘未来前后端开发的三大黄金趋势

当 AI 技术浪潮席卷各行各业&#xff0c;前端的交互体验革新与后端的架构效能升级&#xff0c;正迎来前所未有的变革拐点。作为技术决策与开发实践的核心风向标&#xff0c;前后端领域的未来趋势从不缺讨论&#xff0c;但这一次&#xff0c;我们将依托四大 AI 模型的深度数据分…

作者头像 李华
网站建设 2026/5/28 13:06:03

【毕业设计】SpringBoot+Vue+MySQL web酒店客房管理系统平台源码+数据库+论文+部署文档

摘要 随着旅游业的快速发展和酒店行业的日益繁荣&#xff0c;酒店客房管理的效率和智能化水平成为行业竞争的关键因素。传统的酒店管理模式依赖人工操作&#xff0c;存在信息滞后、管理成本高、客户体验差等问题。为了提升酒店运营效率、优化客户服务体验&#xff0c;设计并实现…

作者头像 李华
网站建设 2026/5/28 13:06:10

期货反向跟单-无人化探索

谈到期货反向跟单&#xff0c;市场共识始终聚焦于 “人性” 二字。期货市场的盈亏博弈&#xff0c;本质是人性弱点的放大&#xff0c;多数交易者的亏损源于四大陷阱&#xff1a;贪婪让盈利持仓迟迟不离场&#xff0c;最终利润回吐甚至转亏&#xff1b;侥幸心理主导下&#xff0…

作者头像 李华
网站建设 2026/5/29 1:00:01

使用rosbag::Bag bag(“20130110.bag“)出现段错误

使用 rosbag::Bag 出现段错误问题&#xff1a;分析&#xff1a;解决&#xff1a;问题&#xff1a; Starting program: /bin/test_rosbag_io [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1&…

作者头像 李华
网站建设 2026/5/28 13:06:09

模拟信号到FFT频谱图分析过程

这是一个从连续到离散,再到频域分析的完整链条,涉及多个关键变换。 一、起点:连续时间模拟信号 我们有一个真实的物理信号: xa(t)(连续、模拟) x_a(t) \quad \text{(连续、模拟)} xa​(t)(连续、模拟) 其连续时间傅里叶变换(CTFT)为: Xa(jΩ)=∫−∞∞xa(t)e−jΩtdt X…

作者头像 李华
网站建设 2026/5/30 3:38:00

mysql in相关的知识

MySQL 会先对in子查询结果去重, 会启用using <auto_distinct_key>&#xff0c;生成临时的去重键&#xff0c;把 [1,1,2] 变成 [1,2]

作者头像 李华