
v5cn/kube-state-metrics镜像名称:k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.2.3
概述:该镜像包含 Kubernetes 官方工具 kube-state-metrics 的 v2.2.3 版本。kube-state-metrics 是一个无状态服务,通过监听 Kubernetes API 服务器,生成并暴露集群内对象(如 Pod、Deployment、Service 等)的状态指标,支持 Prometheus 等监控系统抓取,用于集群状态分析、性能监控和告警配置。
--metric-labels-allowlist)。kube_deployment_status_replicas_unavailable)配置 Prometheus Alertmanager 告警。kube_pod_container_resource_limits)优化资源分配。注意:
kube-state-metrics通常在 Kubernetes 集群内部署(通过 InClusterConfig 访问 API 服务器)。以下为 Docker 单机运行示例(需手动挂载 kubeconfig)。
bashdocker run -d \ --name kube-state-metrics \ -p 8080:8080 \ # 指标暴露端口 -p 8081:8081 \ # 健康检查/指标自身监控端口 -v /path/to/kubeconfig:/etc/kubeconfig:ro \ # 挂载本地 kubeconfig(集群外运行时) k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.2.3 \ --kubeconfig=/etc/kubeconfig \ # 指定 kubeconfig 路径(集群外运行必填) --port=8080 \ # 指标暴露端口(默认 8080) --telemetry-port=8081 # 自身监控/健康检查端口(默认 8081)
yamlapiVersion: apps/v1 kind: Deployment metadata: name: kube-state-metrics namespace: monitoring # 建议部署在监控专用命名空间 spec: replicas: 1 # 单实例足够,无需多副本 selector: matchLabels: app: kube-state-metrics template: metadata: labels: app: kube-state-metrics spec: serviceAccountName: kube-state-metrics # 需绑定集群权限(见下方 RBAC 配置) containers: - name: kube-state-metrics image: k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.2.3 ports: - containerPort: 8080 # 指标端口 name: metrics - containerPort: 8081 # 自身监控端口 name: telemetry args: - --port=8080 # 指标暴露端口 - --telemetry-port=8081 # 自身监控端口 - --metric-labels-allowlist=pods=[*],deployments=[app,env] # 允许作为指标标签的对象标签(示例) resources: requests: cpu: 100m memory: 128Mi limits: cpu: 500m memory: 256Mi
4.2.2.1 Service(暴露指标端口给 Prometheus)
yamlapiVersion: v1 kind: Service metadata: name: kube-state-metrics namespace: monitoring labels: app: kube-state-metrics spec: ports: - name: metrics port: 8080 targetPort: metrics - name: telemetry port: 8081 targetPort: telemetry selector: app: kube-state-metrics
4.2.2.2 RBAC 权限配置(必需)
kube-state-metrics 需要访问 Kubernetes API 的权限,需配置 ServiceAccount、ClusterRole 和 ClusterRoleBinding:
yamlapiVersion: v1 kind: ServiceAccount metadata: name: kube-state-metrics namespace: monitoring --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: kube-state-metrics rules: - apiGroups: [""] resources: ["pods", "services", "endpoints", "namespaces", "configmaps", "secrets", "nodes"] verbs: ["list", "watch"] - apiGroups: ["apps"] resources: ["deployments", "replicasets", "statefulsets", "daemonsets"] verbs: ["list", "watch"] - apiGroups: ["batch"] resources: ["jobs", "cronjobs"] verbs: ["list", "watch"] - apiGroups: ["autoscaling"] resources: ["horizontalpodautoscalers"] verbs: ["list", "watch"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: kube-state-metrics subjects: - kind: ServiceAccount name: kube-state-metrics namespace: monitoring roleRef: kind: ClusterRole name: kube-state-metrics apiGroup: rbac.authorization.k8s.io
| 环境变量 | 描述 | 默认值 |
|---|---|---|
KUBERNETES_SERVICE_HOST | Kubernetes API 服务器主机地址(集群内部署时由 kubelet 自动注入) | 集群内自动配置 |
KUBERNETES_SERVICE_PORT | Kubernetes API 服务器端口(集群内部署时由 kubelet 自动注入) | 443 |
POD_NAME | 当前 Pod 名称(用于自身监控指标的标签) | 从 downward API 获取 |
POD_NAMESPACE | 当前 Pod 命名空间(用于自身监控指标的标签) | 从 downward API 获取 |
| 参数 | 描述 | 默认值 |
|---|---|---|
--port | 指标暴露端口 | 8080 |
--telemetry-port | 自身监控(如服务健康状态)端口 | 8081 |
--kubeconfig | kubeconfig 文件路径(集群外运行时需指定,集群内无需配置) | 空(使用 InClusterConfig) |
--metric-labels-allowlist | 允许作为指标标签的对象标签,格式为 资源类型=[标签1,标签2,...],如 pods=[app,env] | 空(不允许任何标签) |
--namespaces | 仅监控指定命名空间,多个命名空间用逗号分隔(如 default,monitoring) | 空(监控所有命名空间) |
--resources | 仅监控指定资源类型,多个资源用逗号分隔(如 pods,deployments) | 空(监控所有支持资源) |
--metric-allowlist | 仅暴露指定指标,格式为 指标名(如 kube_pod_status_ready) | 空(暴露所有指标) |
permission denied,需检查 RBAC 权限配置是否完整(参考 4.2.2.2 节)。--resources 或 --metric-allowlist 参数是否过滤了该资源/指标。kube-state-metrics。--namespaces 或 --resources 限制监控范围,减少 API 访问压力。





manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务