在 Kubernetes 中,探针(Probes)用于检测容器的健康状态,主要包括以下三种:
- Liveness Probe(存活探针):检测容器是否正在运行。
- Readiness Probe(就绪探针):检测容器是否准备好接收流量。
- Startup Probe(启动探针):检测容器是否已完成启动。
如果 Deployment 未配置这些探针,可能会导致容器在异常状态下继续运行或接收流量。因此,列出所有未配置探针的 Deployment 是一个常见的运维需求。
列出所有未配置探针的 Deployment
以下是一个 Shell 脚本,用于列出 Kubernetes 集群中所有未配置探针的 Deployment:
bash
#!/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)"
'
脚本说明
-
参数说明
NAMESPACE
:可选参数,指定要检查的命名空间。如果不指定,则检查所有命名空间。
-
获取 Deployment
- 使用
kubectl get deployments
获取所有 Deployment 的 JSON 格式数据。
- 使用
-
过滤未配置探针的 Deployment
- 使用
jq
解析 JSON 数据,筛选出未配置livenessProbe
、readinessProbe
和startupProbe
的 Deployment。
- 使用
-
输出结果
- 输出未配置探针的 Deployment 的命名空间和名称。
使用方法
-
安装依赖
-
确保已安装
kubectl
和jq
。 -
安装
jq
:bash# Ubuntu/Debian sudo apt-get install jq # CentOS/RHEL sudo yum install jq # macOS brew install jq
-
-
运行脚本
-
检查所有命名空间:
bash./check-probes.sh
-
检查指定命名空间(如
default
):bash./check-probes.sh default
-
-
示例输出
Namespace: default | Deployment: my-app Namespace: kube-system | Deployment: coredns
扩展功能
-
列出未配置特定探针的 Deployment
如果需要单独检查未配置
livenessProbe
、readinessProbe
或startupProbe
的 Deployment,可以修改jq
过滤条件。例如:-
仅检查未配置
livenessProbe
的 Deployment:bashecho "$DEPLOYMENTS" | jq -r ' .items[] | select( (.spec.template.spec.containers[]? | (.livenessProbe? == null) ) ) | "Namespace: \(.metadata.namespace) | Deployment: \(.metadata.name)" '
-
-
输出详细信息
如果需要输出 Deployment 的详细信息(如容器名称),可以修改
jq
输出格式:bashecho "$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
-
导出结果到文件
将结果导出到文件:
bash./check-probes.sh > no-probes-deployments.txt
总结
通过该脚本,可以快速列出 Kubernetes 集群中所有未配置探针的 Deployment,帮助运维人员及时发现潜在问题并优化容器健康检查配置。