在 Kubernetes 中,探针(Probes)用于检测容器的健康状态,主要包括以下三种:
- Liveness Probe(存活探针):检测容器是否正在运行。
- Readiness Probe(就绪探针):检测容器是否预备好接收流量。
- 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)"
- '
复制代码 脚本阐明
- 参数阐明
- NAMESPACE:可选参数,指定要检查的命名空间。假如不指定,则检查所有命名空间。
- 获取 Deployment
- 使用 kubectl get deployments 获取所有 Deployment 的 JSON 格式数据。
- 过滤未配置探针的 Deployment
- 使用 jq 解析 JSON 数据,筛选出未配置 livenessProbe、readinessProbe 和 startupProbe 的 Deployment。
- 输出结果
- 输出未配置探针的 Deployment 的命名空间和名称。
使用方法
- 安装依赖
- 确保已安装 kubectl 和 jq。
- 安装 jq:
- # Ubuntu/Debian
- sudo apt-get install jq
- # CentOS/RHEL
- sudo yum install jq
- # macOS
- brew install jq
复制代码
- 运行脚本
- 检查所有命名空间:
- 检查指定命名空间(如 default):
- ./check-probes.sh default
复制代码
- 示例输出
- Namespace: default | Deployment: my-app
- Namespace: kube-system | Deployment: coredns
复制代码 扩展功能
- 列出未配置特定探针的 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
复制代码 总结
通过该脚本,可以快速列出 Kubernetes 集群中所有未配置探针的 Deployment,资助运维人员及时发现潜在问题并优化容器健康检查配置。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |