多云集群监控是用户常见的诉求,本文介绍如何使用托管 Prometheus 监控自定义 Kubernetes 集群。
使用多云集群(多厂商集群、公有云和自建集群混合等)可以为企业带来风险分散、成本优化、资源丰富、选择灵活等优势。但同时,跨厂商、跨地域的集群架构也会带来很多问题,尤其在多云监控方向,尤为明显。包括:
为解决多云集群带来的监控一致性问题,托管 Prometheus 提供了多云集群监控方案和采集组件。方便用户在实现火山引擎云服务监控的同时,也能够实现其他厂商集群、自建集群的接入和统一监控。
说明
本文采用最简单的方式,介绍了如何快速地完成多云集群监控配置。相关组件均采用了默认规格,也未涉及挂载持久存储等操作。目的是方便用户能够快速了解自定义集群接入托管 Prometheus 的方法。
托管 Prometheus 为您提供了 2 种开箱即用的指标采集方案,支持直接在标准 Kubernetes 集群中安装采集组件,并对接托管 Prometheus 工作区,完成多云集群的相关指标的采集和汇入,实现多云集群统一监控。详情请参见 自建 Kubernetes 集群接入。
注意
请勿在自定义集群中安装开源 Prometheus 或其他监控系统的采集组件,这些组件可能与托管 Prometheus 提供的采集器组件冲突,导致组件异常。
托管 Prometheus 工作区目前仅提供内网 Remote Write 地址,当用户使用云企业网将自定义集群所在私网和火山引擎网络打通后,不能直接访问 VMP 的域名。因此需要配置代理实现访问。
ExternalName
类型的服务访问托管 Prometheus 工作区。apiVersion: v1 kind: Service metadata: name: vmp-service spec: externalName: write.prometheus-cn-beijing.ivolces.com # 托管 Prometheus 工作区地址中的域名,不同地域工作区的域名不同 ports: - name: vmp port: 80 protocol: TCP targetPort: 80 sessionAffinity: None type: ExternalName
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: vmp-ingress spec: ingressClassName: nginx # 集群中 Ingress Controller Class 名称,使用该配置来选择 ingress 实例 rules: - host: vmp-test.com # 访问托管 Prometheus 工作区的自定义域名 http: paths: - backend: service: name: vmp-service # 服务名称,需要与服务的配置相同 port: number: 80 path: / pathType: Prefix
为保证部署在自定义集群中的采集器能够正确识别自定义域名,您需要在自定义集群中配置 CoreDNS,指定自定义域名和 Ingress 内网 IP 地址之间的解析关系。
kubectl edit configmap -n kube-system coredns
在配置文件中增加自定义的 Hosts,例如192.168.48.3 vmp-test.com
。
Corefile: | .:53 { errors health { lameduck 15s } ready hosts { 192.168.48.3 vmp-test.com fallthrough } prometheus :9153 forward . /etc/resolv.conf { prefer_udp } cache 30 loop reload loadbalance }
注意
火山引擎为您提供了 2 个开箱即用的采集方案,分别为 VMP Agent 和 VM Agent ,详情请参见 采集器方案概述。本文以部署 VM Agent 为例。
./install.sh \ --agent vmagent \ # 采集器类型 --region cn-beijing \ # VMP 工作区所在地域 --namespace volcano-metrics \ # 部署采集器等组件的命名空间 --remote-write-url http://vmp-test.com/workspaces/b762e1a3-37***/api/v1/write \ # VMP 工作区的 Remote Write 地址。其中,域名需要修改为自定义的域名 --basic-auth-username username-demo \ # VMP 工作区 Basic Auth 认证模式下的认证用户名 --basic-auth-password password-demo # VMP 工作区 Basic Auth 认证模式下的认证密码
组件安装完成后,您可以登录自定义集群界面,查看采集器组件的工作状态,每个组件的名称、类型和作用说明如下表所示。
组件名称 | 负载类型 | 命名空间 | 说明 |
---|---|---|---|
vmagent | StatefulSet | volcano-metrics | 采集集群内 kubelet、kubelet-cadvisor 、kube-state-metrics 、node-exporter 暴露的指标。 |
vm-operator | Deployment | volcano-metrics | VM Agent 控制组件。 |
kube-state-metrics | StatefulSet | volcano-metrics | 提供 Kubernetes 资源信息指标数据。 |
node-exporter | DaemonSet | volcano-metrics | 提供节点资源信息指标数据。 |
查看 vm-operator 组件工作状态,以阿里云 ACK 为例。
查看采集器工作状态,以阿里云 ACK 为例。
使用代理的方式向托管 Prometheus 工作区写入监控数据,写入性能与 VKE 集群中的 ingress 实例性能密切相关。建议您通过 VKE 集群的可观测性功能,对 ingress 实例进行监控和运维。可参考如下文档:
您可以使用托管 Prometheus 的 Explore 功能来快速查询和展示指标数据。详情请参见 指标查询。
您可以自建 Grafana,并通过 Grafana 查看指标和创建大盘。包括:
您可以在托管 Prometheus 的告警中心配置相关告警。详情请参见 创建告警规则。
托管 Prometheus 为您提供的采集器,默认保存在火山引擎镜像仓库中。如果您的自定义集群无公网环境,无法访问 Internet。则可以遵循以下步骤:
./install.sh \ --agent vmagent \ # 采集器类型 --region cn-beijing \ # VMP 工作区所在地域 --namespace volcano-metrics \ # 部署采集器等组件的命名空间 --remote-write-url http://vmp-test.com/workspaces/b762e1a3-37***/api/v1/write \ # VMP 工作区的 Remote Write 地址。其中,域名需要修改为自定义的域名 --basic-auth-username username-demo \ # VMP 工作区 Basic Auth 认证模式下的认证用户名 --basic-auth-password password-demo \ # VMP 工作区 Basic Auth 认证模式下的认证密码 --private-registry xxx \ # 私有仓库地址(带命名空间) --private-registry-username xxx \ # 私有仓库的登录用户名 --private-registry-password yyy # 私有仓库的登录密码