云原生教程【免费下载链接】kubernetes-handbookKubernetes Handbook Kubernetes指南 https://kubernetes.feisky.xyz项目地址https://gitcode.com/gh_mirrors/kub/kubernetes-handbook点击查看免费下载Kubernetes 社区围绕 Prometheus 构建了一整套集群监控与告警体系cAdvisor 内置于 Kubelet 负责单节点容器与节点资源统计kube-state-metrics 提供资源对象度量而 Prometheus 则承担时序数据存储与告警职能。本文以 Kubernetes Handbook 仓库中 manifests/prometheus/README.md 为主线讲解如何使用 Helm 快速部署 Prometheus Operator 与 kube-prometheus 监控栈并深入排解 exporter-kubelets 的401 Unauthorized认证问题、K8SControllerManagerDown/K8SSchedulerDown告警误报以及通过 Ingress 为 Prometheus 与 Grafana 提供带 Basic Auth 的 HTTPS 入口。读完本文你将掌握一套可复制、可排错的 Prometheus 监控栈落地流程。一、监控栈组件与部署方式概述在 Kubernetes 中一套完整的监控体系通常由多层组件构成可参见仓库中 监控体系说明 与 英文版监控文档cAdvisorGoogle 开源的容器监控工具内置在 Kubelet 中自动收集本机容器 CPU、内存、网络和文件系统占用情况从 v1.7 起 Kubelet 提供了独立的 Metrics API如http://127.0.0.1:8001/api/v1/proxy/nodes/node-name/metrics/cadvisorcadvisor 监听的独立端口在后续版本中已移除建议所有外部工具改用 Kubelet Metrics API。kube-state-metrics将 DaemonSet、Deployment 等 Kubernetes 资源对象的状态转换为 Prometheus 格式度量。Prometheus监控与时序数据库提供强大的查询语言PromQL、HTTP 接口和告警能力。Prometheus Operator由 CoreOS 开源以 Kubernetes 原生方式CRD管理 Prometheus 实例、告警规则与抓取目标ServiceMonitor是生产环境推荐的管理方式。仓库推荐的部署路径正是基于 Prometheus Operator 的 Helm Chart先安装prometheus-operator再安装封装了完整监控组件的kube-prometheus其中包含 Prometheus、Alertmanager、Grafana、Node Exporter、kube-state-metrics 以及针对 kubelet、kube-controller-manager、kube-scheduler 等组件的 exporter。二、使用 Helm 部署 prometheus-operator 与 kube-prometheus按照 manifests/prometheus/README.md 中的步骤首先添加 CoreOS 的 Helm Chart 仓库然后依次安装两个 Charthelm repo add coreos https://s3-eu-west-1.amazonaws.com/coreos-charts/stable/ helm install coreos/prometheus-operator --name prometheus-operator --namespace monitoring helm install coreos/kube-prometheus --name kube-prometheus --namespace monitoring几点操作说明执行前请确认集群中已创建monitoring命名空间如kubectl create namespace monitoring。上述命令使用 Helm v2 语法--name指定 Release 名在 Helm v3 中对应写法为helm install prometheus-operator coreos/prometheus-operator -n monitoring。以当前仓库内容为准实际使用时请结合本地 Helm 版本调整参数。kube-prometheus 部署完成后会创建一批 Service其中 Prometheus 对应的 Service 名为kube-prometheus端口 9090Grafana 对应的 Service 名为kube-prometheus-grafana端口 80后文的 Ingress 与端口转发都依赖这两个服务名。仓库中 addons/prometheus.txt 还附带了一份不依赖 Operator 的手动部署参考Deployment ConfigMap NodePort Service 组合镜像为quay.io/prometheus/prometheus:v1.0.1其中 ConfigMap 里的prometheus.yml展示了如何在裸 Prometheus 中通过kubernetes_sd_configs自动发现 apiserver、node、service 与 pod 等抓取目标。这份配置在理解后续抓取原理时非常有价值详见第五节。三、排错exporter-kubelets 报401 Unauthorized部署完成后如果发现exporter-kubelets抓取功能不正常例如日志或 Targets 页面报出server returned HTTP status 401 Unauthorized这说明 Prometheus 通过 Kubelet 的 HTTPS 端口抓取指标时Kubelet 拒绝了匿名请求。原因在于Kubelet 默认的鉴权模式下来自 Prometheus exporter 的请求没有携带可被信任的身份凭证因此被判定为未授权。仓库给出的解决方案是为 Kubelet 显式开启webhook 认证与授权让 Kubelet 把请求委托给 kube-apiserver 校验kubelet --authentication-token-webhooktrue --authorization-modeWebhook各参数含义如下参数作用--authentication-token-webhooktrue开启 TokenWebhook 认证Kubelet 将收到的 Bearer Token 发送给 apiserver 的TokenReviewAPI 进行校验--authorization-modeWebhook开启 Webhook 授权Kubelet 将请求交给 apiserver 的SubjectAccessReviewAPI 决定是否放行这样 Prometheus 抓取 kubelet 指标时携带的 ServiceAccount Token 就能通过认证。对于以 systemd 方式管理 Kubelet 的集群可参考仓库中的 kubelet.service 单元文件其ExecStart通过EnvironmentFile-/etc/kubernetes/kubelet加载变量与 Kubelet 环境变量配置把上述参数追加到KUBELET_ARGS中然后systemctl daemon-reload systemctl restart kubelet生效。四、排错K8SControllerManagerDown 与 K8SSchedulerDown 告警部署 kube-prometheus 后Alertmanager 中可能出现K8SControllerManagerDown和K8SSchedulerDown两条持续告警。仓库 manifests/prometheus/README.md 明确指出这通常并不意味着 controller-manager 与 scheduler 真的宕机了而是因为kube-controller-manager 与 kube-scheduler 是以Pod 形式运行在集群中的而非宿主机二进制进程kube-prometheus 创建的监控 Service 通过标签选择器关联这些组件的 Pod而实际 Pod 上的标签例如componentkube-controller-manager、componentkube-scheduler与监控 Service 的 selector 不一致导致监控目标抓取不到、触发 Down 告警。解决方法是修改对应监控 Service 的标签选择器使其与真实 Pod 标签对齐kubectl -n kube-system set selector service kube-prometheus-exporter-kube-controller-manager componentkube-controller-manager kubectl -n kube-system set selector service kube-prometheus-exporter-kube-scheduler componentkube-schedulerkubectl set selector会就地更新 Service 的spec.selector从而让 Service 重新关联到带有对应component标签的 Pod。执行后稍等片刻等 Prometheus 完成新一轮抓取两条告警应自动恢复。若你的集群将这两个组件运行在宿主进程非 Pod则告警原因不同需要检查监控对象端口与探针配置。五、深入Prometheus 是如何发现并抓取 Kubernetes 监控目标的要真正理解上述排错思路有必要看一下抓取配置。仓库 addons/prometheus.txt 中的prometheus.yml是一份非常完整的 Kubernetes 服务发现配置其中scrape_configs定义了五个 jobjob_namekubernetes_sd_configs role抓取对象prometheus静态localhost:9090Prometheus 自身kubernetes-clusterapiserverkube-apiserver 集群状态kubernetes-nodesnode各 NodeKubelet/metricskubernetes-service-endpointsendpoint带prometheus.io/scrape: true注解的 Service 端点kubernetes-servicesservice带prometheus.io/probe: true注解的 Service黑盒探测kubernetes-podspod带prometheus.io/scrape: true注解的 Pod该配置中的几个关键细节值得注意认证与 TLS访问 apiserver 与 node 端点时通过tls_config.ca_file加载 ServiceAccount 的 CA 证书并通过bearer_token_file注入 ServiceAccount Token这正是上一节 Kubelet webhook 认证生效的前提。relabel_configs 实现注解约定例如kubernetes-pods中先用source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]action: keepregex: true过滤出打了prometheus.io/scrape: true注解的 Pod再用__meta_kubernetes_pod_annotation_prometheus_io_path与__meta_kubernetes_pod_annotation_prometheus_io_port重写__metrics_path__与__address__最后通过labelmap把 Pod 标签转成时序标签并补充kubernetes_namespace、kubernetes_pod_name标签。坑点提醒kube-prometheusPrometheus Operator不识别prometheus.io/scrape这类裸注解抓取目标必须显式定义为ServiceMonitor对象见 setup/addon-list/monitor.md 中的说明。若你从裸 Prometheus 迁移到 Operator 架构需要为每个待监控服务创建 ServiceMonitor否则不会自动抓取。六、通过 Ingress 暴露 Prometheus 与 Grafana监控栈部署完成并排错通过后还需要一个可供浏览器访问的入口。仓库在manifests/prometheus目录下提供了两个配套资源文件在 该目录 下执行kubectl apply -f .即可一次性创建basic-authSecret 与prometheusIngress。6.1 Basic Auth 凭据basic-auth.yaml 定义了一个名为basic-auth的 Opaque SecretapiVersion: v1 data: auth: YWRtaW46JGFwcjEkYVpNUWFVbXkkd0RVTnRFcWhOVVIvZGwwNWRUcDR6MAo kind: Secret metadata: name: basic-auth namespace: monitoring type: Opaque其中data.auth存放的是 htpasswd 格式的用户名与密码哈希admin:$apr1$...即 Apache MD5 加密格式。如需自定义账号密码可用htpasswd -c auth username生成后以 base64 编码写入该字段。6.2 Ingress 规则详解prometheus-ingress.yaml 通过 nginx-ingress 同时暴露两个域名prometheus.example.com→ Servicekube-prometheus:9090grafana.example.com→ Servicekube-prometheus-grafana:80其核心 annotations 说明如下注解值作用kubernetes.io/ingress.classnginx指定由 nginx-ingress 控制器处理该 Ingresskubernetes.io/tls-acmetrue通过 cert-manager 自动签发 TLS 证书nginx.ingress.kubernetes.io/rewrite-target/重写转发路径为根路径nginx.ingress.kubernetes.io/auth-typebasic启用 HTTP Basic Auth 认证nginx.ingress.kubernetes.io/auth-secretbasic-auth引用上文的认证凭据 Secretnginx.ingress.kubernetes.io/auth-realmAuthentication Required浏览器弹窗中的认证提示文案TLS 部分为两个域名分别声明了secretNameprometheus-ingress-tls与grafana-ingress-tls由 cert-managerkubernetes.io/tls-acme: true自动签发并写入对应 Secret。仓库中 dashboard 的 Ingress 示例 采用了同样的注解组合并额外使用nginx.ingress.kubernetes.io/secure-backends: true访问 HTTPS 后端可作为对照参考。应用后将域名解析到 Ingress 控制器所在节点即可通过 HTTPS 访问https://prometheus.example.comPrometheus 查询界面数据源端口 9090https://grafana.example.comGrafana 可视化界面两个入口都会要求输入basic-authSecret 中配置的用户名与密码。七、访问与验证监控数据Ingress 未就绪或本地联调时也可以使用端口转发直接访问这是 监控文档 推荐的本地联调方式# 转发 Prometheus UI kubectl port-forward -n monitoring service/kube-prometheus :9090 # 转发 Grafana UI kubectl port-forward -n monitoring service/kube-prometheus-grafana :80访问 Grafana 后需要添加 Prometheus 类型的数据源Data Source 地址填写集群内 Prometheus 服务地址例如http://prometheus-prometheus-server.monitoring。若 kube-prometheus 部署后不确定 Grafana 管理密码可参考 监控文档 中的方法从 Grafana Secret 中解码获取kubectl get secret --namespace monitoring kube-prometheus-grafana -o jsonpath{.data.user} | base64 --decode ; echo kubectl get secret --namespace monitoring kube-prometheus-grafana -o jsonpath{.data.password} | base64 --decode ; echo最后在 Prometheus 的 Targets 页面确认kubelet、kube-controller-manager、kube-scheduler等目标均处于 UP 状态K8SControllerManagerDown/K8SSchedulerDown告警消失即代表这套基于 Prometheus Operator 的监控栈已正常运行。参考资源部署与排错主文档manifests/prometheus/README.mdBasic Auth 凭据manifests/prometheus/basic-auth.yamlIngress 暴露配置manifests/prometheus/prometheus-ingress.yaml裸 Prometheus 抓取配置示例addons/prometheus.txtKubernetes 监控体系总览setup/addon-list/monitor.md、en/addons/monitor.mdKubelet systemd 启动配置manifests/systemd/kubelet.service、etc/kubernetes/kubelet赞分享云原生教程【免费下载链接】kubernetes-handbookKubernetes Handbook Kubernetes指南 https://kubernetes.feisky.xyz项目地址https://gitcode.com/gh_mirrors/kub/kubernetes-handbook点击查看免费下载相关推荐K8M监控栈Prometheus Operator部署K8M监控栈Prometheus Operator部署 引言为什么需要专业的Kubernetes监控方案 在Kubernetes集群的日常运维中你是否遇云原生集群管理后端前端AI 应用大模型MCP 服务运维Prometheus Operator 完全指南在 Kubernetes 上原生部署与管理 Prometheus 监控栈Prometheus Operator 完全指南在 Kubernetes 上原生部署与管理 Prometheus 监控栈 导读 Prometheus Oper云原生可观测性Alluxio Kubernetes 集群监控部署指南基于 Prometheus Grafana 的 Monitor Helm Chart 实践Alluxio Kubernetes 集群监控部署指南基于 Prometheus Grafana 的 Monitor Helm Chart 实践 导读 本存储分布式文件系统缓存大数据上一篇3个终极黑科技让百度网盘下载速度提升300%的效率革命下一篇AMD Radeon Software实战优化全攻略创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考