k8s列出所有未配置探针的deployment

打印 上一主题 下一主题

主题 842|帖子 842|积分 2526

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

  • Liveness Probe(存活探针):检测容器是否正在运行。
  • Readiness Probe(就绪探针):检测容器是否预备好接收流量。
  • Startup Probe(启动探针):检测容器是否已完成启动。
假如 Deployment 未配置这些探针,可能会导致容器在异常状态下继续运行或接收流量。因此,列出所有未配置探针的 Deployment 是一个常见的运维需求。
列出所有未配置探针的 Deployment

以下是一个 Shell 脚本,用于列出 Kubernetes 集群中所有未配置探针的 Deployment:
  1. #!/bin/bash
  2. # 设置命名空间(默认为所有命名空间)
  3. NAMESPACE="${1:-}"
  4. # 获取所有 Deployment
  5. if [[ -z "$NAMESPACE" ]]; then
  6.   DEPLOYMENTS=$(kubectl get deployments --all-namespaces -o json)
  7. else
  8.   DEPLOYMENTS=$(kubectl get deployments -n "$NAMESPACE" -o json)
  9. fi
  10. # 解析 Deployment
  11. echo "$DEPLOYMENTS" | jq -r '
  12.   .items[] |
  13.   select(
  14.     (.spec.template.spec.containers[]? |
  15.       (.livenessProbe? == null) and
  16.       (.readinessProbe? == null) and
  17.       (.startupProbe? == null)
  18.     )
  19.   ) |
  20.   "Namespace: \(.metadata.namespace) | Deployment: \(.metadata.name)"
  21. '
复制代码
脚本阐明


  • 参数阐明

    • NAMESPACE:可选参数,指定要检查的命名空间。假如不指定,则检查所有命名空间。

  • 获取 Deployment

    • 使用 kubectl get deployments 获取所有 Deployment 的 JSON 格式数据。

  • 过滤未配置探针的 Deployment

    • 使用 jq 解析 JSON 数据,筛选出未配置 livenessProbe、readinessProbe 和 startupProbe 的 Deployment。

  • 输出结果

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

使用方法


  • 安装依赖

    • 确保已安装 kubectl 和 jq。
    • 安装 jq:
      1. # Ubuntu/Debian
      2. sudo apt-get install jq
      3. # CentOS/RHEL
      4. sudo yum install jq
      5. # macOS
      6. brew install jq
      复制代码

  • 运行脚本

    • 检查所有命名空间:
      1. ./check-probes.sh
      复制代码
    • 检查指定命名空间(如 default):
      1. ./check-probes.sh default
      复制代码

  • 示例输出
    1. Namespace: default | Deployment: my-app
    2. Namespace: kube-system | Deployment: coredns
    复制代码
扩展功能


  • 列出未配置特定探针的 Deployment
    假如需要单独检查未配置 livenessProbe、readinessProbe 或 startupProbe 的 Deployment,可以修改 jq 过滤条件。例如:

    • 仅检查未配置 livenessProbe 的 Deployment:
      1. echo "$DEPLOYMENTS" | jq -r '
      2.   .items[] |
      3.   select(
      4.     (.spec.template.spec.containers[]? |
      5.       (.livenessProbe? == null)
      6.     )
      7.   ) |
      8.   "Namespace: \(.metadata.namespace) | Deployment: \(.metadata.name)"
      9. '
      复制代码

  • 输出详细信息
    假如需要输出 Deployment 的详细信息(如容器名称),可以修改 jq 输出格式:
    1. echo "$DEPLOYMENTS" | jq -r '
    2.   .items[] |
    3.   select(
    4.     (.spec.template.spec.containers[]? |
    5.       (.livenessProbe? == null) and
    6.       (.readinessProbe? == null) and
    7.       (.startupProbe? == null)
    8.     )
    9.   ) |
    10.   "Namespace: \(.metadata.namespace) | Deployment: \(.metadata.name) | Containers: \([.spec.template.spec.containers[].name] | join(", "))"
    11. '
    复制代码
    示例输出:
    1. Namespace: default | Deployment: my-app | Containers: app, sidecar
    复制代码
  • 导出结果到文件
    将结果导出到文件:
    1. ./check-probes.sh > no-probes-deployments.txt
    复制代码
总结

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

悠扬随风

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表