You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

监控K8s集群中指定Pod是否处于运行状态的最简单方法是什么?

K8s指定Pod状态异常告警极简实现方案

方案优势

无需部署Prometheus整套监控栈,无需配置集群级ClusterRole/ClusterRoleBinding,权限最小化收敛,整体配置不足100行。

实现步骤

1. 配置最小权限访问凭证

仅为监控任务分配目标命名空间下Pod的只读权限,使用Namespace级别的Role即可,完全不需要集群级权限:
创建权限配置文件pod-monitor-rbac.yaml:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: <替换为podName-0所在的命名空间>
  name: pod-status-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get"]
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: pod-monitor-sa
  namespace: <替换为podName-0所在的命名空间>
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: pod-status-reader-binding
  namespace: <替换为podName-0所在的命名空间>
subjects:
- kind: ServiceAccount
  name: pod-monitor-sa
  namespace: <替换为podName-0所在的命名空间>
roleRef:
  kind: Role
  name: pod-status-reader
  apiGroup: rbac.authorization.k8s.io

执行命令生效:
kubectl apply -f pod-monitor-rbac.yaml

2. 编写状态检查与告警逻辑

直接用内置kubectl的轻量镜像,脚本逻辑如下,你也可以把脚本打包进自定义镜像减少运行时依赖:

#!/bin/sh
# 自定义配置项,替换为实际值
TARGET_POD="podName-0"
TARGET_NS="<替换为目标命名空间>"
RECEIVE_MAIL="<告警接收人邮箱>"
SMTP_SERVER="<你的发件邮箱SMTP地址:端口,例如smtp.qq.com:587>"
SMTP_USER="<发件人邮箱账号>"
SMTP_PWD="<发件人邮箱SMTP授权码>"

# 检查Pod状态,查询失败/状态非Running都判定为异常
POD_PHASE=$(kubectl get pod ${TARGET_POD} -n ${TARGET_NS} -o jsonpath='{.status.phase}' 2>/dev/null)
if [ "${POD_PHASE}" != "Running" ]; then
    echo "Subject: 【告警】K8s Pod ${TARGET_POD} 运行异常
Pod ${TARGET_POD} 当前状态为 ${POD_PHASE:-不存在/查询失败},未处于正常Running状态,请尽快排查处理。" | sendmail -S ${SMTP_SERVER} -au ${SMTP_USER} -ap ${SMTP_PWD} ${RECEIVE_MAIL}
fi

3. 部署定时任务周期性检查

用K8s原生CronJob运行监控脚本,示例配置每分钟执行一次,频率可自行调整:
创建pod-monitor-cronjob.yaml:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: pod-status-monitor
  namespace: <替换为目标命名空间>
spec:
  schedule: "*/1 * * * *"
  concurrencyPolicy: Forbid
  jobTemplate:
    spec:
      backoffLimit: 1
      template:
        spec:
          serviceAccountName: pod-monitor-sa
          restartPolicy: OnFailure
          containers:
          - name: monitor
            image: alpine/k8s:1.27.3
            command: ["/bin/sh", "-c"]
            args:
            - |
              apk add --no-cache sendmail
              # 把上面的监控脚本内容粘贴到此处

执行命令生效:
kubectl apply -f pod-monitor-cronjob.yaml

更轻量替代方案(无需修改集群配置)

如果你的本地机器/跳板机已经配置了可访问目标集群的kubeconfig,且具备目标Pod的只读权限,可以直接把上述脚本放在本地,配置Linux crontab定时执行即可,完全不需要在集群内创建任何资源。

内容的提问来源于stack exchange,提问作者Neo Gónzález

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:57:01