a54546 发表于 2025-2-6 23:52:50

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

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

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

以下是一个 Shell 脚本,用于列出 Kubernetes 集群中所有未配置探针的 Deployment:
#!/bin/bash# 设置命名空间(默认为所有命名空间)NAMESPACE="${1:-}"# 获取所有 Deploymentif [[ -z "$NAMESPACE" ]]; thenDEPLOYMENTS=$(kubectl get deployments --all-namespaces -o json)elseDEPLOYMENTS=$(kubectl get deployments -n "$NAMESPACE" -o json)fi# 解析 Deploymentecho "$DEPLOYMENTS" | jq -r '.items[] |   select(    (.spec.template.spec.containers[]? |       (.livenessProbe? == null) and       (.readinessProbe? == null) and       (.startupProbe? == null)    )) |   "Namespace: \(.metadata.namespace) | Deployment: \(.metadata.name)"'<hr>脚本说明


[*]参数说明

[*]NAMESPACE:可选参数,指定要检查的命名空间。如果不指定,则检查所有命名空间。

[*]获取 Deployment

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

[*]过滤未配置探针的 Deployment

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

[*]输出结果

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

<hr>使用方法


[*]安装依赖

[*]确保已安装 kubectl 和 jq。
[*]安装 jq:
# Ubuntu/Debiansudo apt-get install jq# CentOS/RHELsudo yum install jq# macOSbrew install jq

[*]运行脚本

[*]检查所有命名空间:
./check-probes.sh
[*]检查指定命名空间(如 default):
./check-probes.sh default

[*]示例输出
Namespace: default | Deployment: my-appNamespace: kube-system | Deployment: coredns
<hr>扩展功能


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

[*]仅检查未配置 livenessProbe 的 Deployment:
echo "$DEPLOYMENTS" | jq -r '.items[] |   select(    (.spec.template.spec.containers[]? |       (.livenessProbe? == null)    )) |   "Namespace: \(.metadata.namespace) | Deployment: \(.metadata.name)"'

[*]输出详细信息
如果需要输出 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
[*]导出结果到文件
将结果导出到文件:
./check-probes.sh > no-probes-deployments.txt
<hr>总结

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