在 Kubernetes 中,探针(Probes)用于检测容器的健康状态,主要包括以下三种:

  1. Liveness Probe(存活探针):检测容器是否正在运行。
  2. Readiness Probe(就绪探针):检测容器是否准备好接收流量。
  3. Startup Probe(启动探针):检测容器是否已完成启动。

如果 Deployment 未配置这些探针,可能会导致容器在异常状态下继续运行或接收流量。因此,列出所有未配置探针的 Deployment 是一个常见的运维需求。


列出所有未配置探针的 Deployment

以下是一个 Shell 脚本,用于列出 Kubernetes 集群中所有未配置探针的 Deployment:

#!/bin/bash

# 设置命名空间(默认为所有命名空间)
NAMESPACE="${1:-}" # 获取所有 Deployment
if [[ -z "$NAMESPACE" ]]; then
DEPLOYMENTS=$(kubectl get deployments --all-namespaces -o json)
else
DEPLOYMENTS=$(kubectl get deployments -n "$NAMESPACE" -o json)
fi # 解析 Deployment
echo "$DEPLOYMENTS" | jq -r '
.items[] |
select(
(.spec.template.spec.containers[]? |
(.livenessProbe? == null) and
(.readinessProbe? == null) and
(.startupProbe? == null)
)
) |
"Namespace: \(.metadata.namespace) | Deployment: \(.metadata.name)"
'

脚本说明

  1. 参数说明

    • NAMESPACE:可选参数,指定要检查的命名空间。如果不指定,则检查所有命名空间。
  2. 获取 Deployment

    • 使用 kubectl get deployments 获取所有 Deployment 的 JSON 格式数据。
  3. 过滤未配置探针的 Deployment

    • 使用 jq 解析 JSON 数据,筛选出未配置 livenessProbereadinessProbestartupProbe 的 Deployment。
  4. 输出结果

    • 输出未配置探针的 Deployment 的命名空间和名称。

使用方法

  1. 安装依赖

    • 确保已安装 kubectljq

    • 安装 jq

      # Ubuntu/Debian
      sudo apt-get install jq # CentOS/RHEL
      sudo yum install jq # macOS
      brew install jq
  2. 运行脚本

    • 检查所有命名空间:

      ./check-probes.sh
    • 检查指定命名空间(如 default):

      ./check-probes.sh default
  3. 示例输出

    Namespace: default | Deployment: my-app
    Namespace: kube-system | Deployment: coredns

扩展功能

  1. 列出未配置特定探针的 Deployment

    如果需要单独检查未配置 livenessProbereadinessProbestartupProbe 的 Deployment,可以修改 jq 过滤条件。例如:

    • 仅检查未配置 livenessProbe 的 Deployment:

      echo "$DEPLOYMENTS" | jq -r '
      .items[] |
      select(
      (.spec.template.spec.containers[]? |
      (.livenessProbe? == null)
      )
      ) |
      "Namespace: \(.metadata.namespace) | Deployment: \(.metadata.name)"
      '
  2. 输出详细信息

    如果需要输出 Deployment 的详细信息(如容器名称),可以修改 jq 输出格式:

    echo "$DEPLOYMENTS" | jq -r '
    .items[] |
    select(
    (.spec.template.spec.containers[]? |
    (.livenessProbe? == null) and
    (.readinessProbe? == null) and
    (.startupProbe? == null)
    )
    ) |
    "Namespace: \(.metadata.namespace) | Deployment: \(.metadata.name) | Containers: \([.spec.template.spec.containers[].name] | join(", "))"
    '

    示例输出:

    Namespace: default | Deployment: my-app | Containers: app, sidecar
  3. 导出结果到文件

    将结果导出到文件:

    ./check-probes.sh > no-probes-deployments.txt

总结

通过该脚本,可以快速列出 Kubernetes 集群中所有未配置探针的 Deployment,帮助运维人员及时发现潜在问题并优化容器健康检查配置。

k8s列出所有未配置探针的deployment的更多相关文章

  1. k8s endpoints k8s未配置选择器的service

    service 其实是一个TCP/UDP 代理 不仅可以代理Pod也可以代理其他的非Pod资源,例如外网的数据库,或者其他的资源 创建未配置选择器的service, service 的对外端口是500 ...

  2. k8s之资源限制以及探针检查

    k8s之资源限制以及探针检查 一.资源限制 1. 资源限制的使用 当定义Pod时可以选择性地为每个容器设定所需要的资源数量.最常见的可设定资源是CPU和内存大小,以及其他类型的资源. 2. reuqe ...

  3. [转帖]在 k8s 中通过 Ingress 配置域名访问

    在 k8s 中通过 Ingress 配置域名访问 https://juejin.im/post/5db8da4b6fb9a0204520b310 在上篇文章中我们已经使用 k8s 部署了第一个应用,此 ...

  4. 4.2 K8S超级完整安装配置

    前言: 采坑 k8s有3种安装方式,如下所示: minikube:这是一个k8s集群模拟器,只有一个节点的集群,只为了测试使用,master和node都在一台机器上 直接使用带有容器功能的云平台安装: ...

  5. 允许asp.net MVC报 错说明: 访问服务此请求所需的资源时出错。服务器可能未配置为访问所请求的 URL。错误消息 401.2。: 未经授权

    运行mvc3程序报以下错误 详细报错如下: “/”应用程序中的服务器错误. 访问被拒绝. 说明: 访问服务此请求所需的资源时出错.服务器可能未配置为访问所请求的 URL. 错误消息 401.2.: 未 ...

  6. 微信小程序问题2:未配置

    app.json 中未配置当前页面 pages/swipertest/swipertest 请检查后重试.console.error(`PAGE DEFINE ERRORapp.json 中未配置,当 ...

  7. 配置闪回恢复区开启归档,未配置清理归档脚本,数据库hang住

    问题现象,测试环境执行SQL hang住 enmo:/home/oracle/worksh dg.sh SQL*Plus: Release Production on Mon May :: Copyr ...

  8. .NET Core + K8S + Apollo 玩转配置中心

    1.引言 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理 ...

  9. K8S日志接入sls配置

    背景 原有日志方案查询日志很不方便且效率低,而且也不支持基于日志的高级操作.如:聚合,图形展示,关键字检测等. 方案 接入阿里云的sls日志服务. 实施 1.通过环境变量进行日志接入 配置如下: 字段 ...

  10. K8S原来如此简单(三)Pod+Deployment

    上篇我们已经安装好k8s1.23集群,现在我们开始使用k8s部署我们的项目 Pod Pod 是一组容器集合,是可以在 Kubernetes 中创建和管理的.最小的可部署的计算单元.这些容器共享存储.网 ...

随机推荐

  1. docker的使用-01配置国内镜像仓库提高加快拉取镜像的速度

    docker的使用-01配置国内镜像仓库提高加快拉取镜像的速度 我的docker版本:(win10专业版,安装的当前最新版docker desktop) docker --version Docker ...

  2. 需求解决 _针对特定Class设置样式 _CSS _20210906

    需求解决 _针对特定Class设置样式 _CSS _20210906 有一个需求,需要对一些具有 某个Class的标签 ,icon,以及其中的字体设置 隐藏或者展示 解决方法如下:(需要对 该页面引用 ...

  3. Issac_GYM重要过程记录

    1 下载相关文件 进入github中下载相关的文件 https://github.com/leggedrobotics/legged_gym 2 加载自己绘制的URTL文件 这个链接用来下载宇树的Go ...

  4. Httprunner生成Allure格式HTML报告

    一.httprunner v2.x版本的报告 最近组内其他同学使用httprunner做接口自动化,之前没有接触过httprunner,发现httprunner相比pytest和unittest有自己 ...

  5. Nuxt.js 应用中的 nitro:build:public-assets 事件钩子详解

    title: Nuxt.js 应用中的 nitro:build:public-assets 事件钩子详解 date: 2024/11/5 updated: 2024/11/5 author: cmdr ...

  6. 基于pikachu靶场的水平越权详解

    1. pikachu靶场搭建 如果你在之前已经使用过phpstudy了,参考pikachu 靶场环境搭建 如果在靶场搭建中遇到一些问题,参考皮卡丘靶场搭建遇到的问题大全 2. 水平越权简介 水平越权是 ...

  7. 安卓微信小程序开发之“蓝牙”

    一.写在前面 在微信当中是支持两种蓝牙模式,分别是"经典蓝牙--BT"和"低功耗蓝牙--BLE".通常在和外围单片机设备进行连接的时候用的是低功耗蓝牙这个模式, ...

  8. Qml 中的那些坑(七)---ComboBox嵌入Popup时,滚动内容超过其可见区域不会关闭ComboBox弹窗

    [写在前面] 最近在写信息提交 ( 表单 ) 的窗口时发现一个奇怪的 BUG: 其代码如下: import QtQuick 2.15 import QtQuick.Controls 2.15 impo ...

  9. 内网 BitTorrent 下载环境搭建——基于 Transmission

    背景 前段时间为公司的产品增加了磁力链.种子下载的能力,测试时发现网上搜到的热门种子,有时好用,有时不好用,不好用主要表现在:没速度.速度慢.速度不稳定.下载一部分后没速度等,严重拖累了测试工作.为此 ...

  10. 使用 python matplotlib 将 LaTex 公式转为 svg

    使用 python matplotlib 将 LaTex 公式转为 svg,从而方便插入无法打出所需公式的ppt中. import matplotlib.pyplot as plt def latex ...