You need to enable JavaScript to run this app.
导航

监控自定义 Kubernetes 集群

最近更新时间2024.04.18 10:58:04

首次发布时间2024.04.18 10:22:58

多云集群监控是用户常见的诉求,本文介绍如何使用托管 Prometheus 监控自定义 Kubernetes 集群。

背景信息

多云集群监控面临的挑战

使用多云集群(多厂商集群、公有云和自建集群混合等)可以为企业带来风险分散、成本优化、资源丰富、选择灵活等优势。但同时,跨厂商、跨地域的集群架构也会带来很多问题,尤其在多云监控方向,尤为明显。包括:

  • 数据聚合和可视化挑战:监控数据分散在不同的地理位置,无法有效地聚合和统一展示。导致无法构建一个全局视角的监控大盘,管理员也无法一目了然地了解所有集群的状态和性能。
  • 资源和成本管理:多云集群意味着需要搭建多个监控系统,这会导致更高的资源消耗和监控成本。
  • 配置和管理复杂性:多云集群可能需要重复的配置和管理策略,增加了管理的复杂性。同时,由于监控系统割裂,无法确保监控的一致性,因此也就无法及时发现可能出现的故障和问题。
  • 故障诊断和响应:在多云环境中,定位和诊断问题可能更加困难,因为可能涉及到跨云的资源和服务。需要建立一致的监控、故障响应和升级流程,才能确保及时解决问题,减少业务影响。

为解决多云集群带来的监控一致性问题,托管 Prometheus 提供了多云集群监控方案和采集组件。方便用户在实现火山引擎云服务监控的同时,也能够实现其他厂商集群、自建集群的接入和统一监控。

说明

本文采用最简单的方式,介绍了如何快速地完成多云集群监控配置。相关组件均采用了默认规格,也未涉及挂载持久存储等操作。目的是方便用户能够快速了解自定义集群接入托管 Prometheus 的方法。

监控方案

托管 Prometheus 为您提供了 2 种开箱即用的指标采集方案,支持直接在标准 Kubernetes 集群中安装采集组件,并对接托管 Prometheus 工作区,完成多云集群的相关指标的采集和汇入,实现多云集群统一监控。详情请参见 自建 Kubernetes 集群接入

alt

前提条件

  • 注册并开通火山引擎容器服务(VKE)。
    • 已创建集群,详情请参见 创建集群
    • 已在集群中安装 ingress-nginx 组件,并配置内网负载均衡,详情请参见 安装组件
  • 已创建托管 Prometheus 工作区,详情请参见 创建工作区
  • 已开通云企业网,并打通火山引擎内网和自定义集群所在网络。详情请参见 云企业网文档
  • 已自建或创建自定义集群。
    • 自定集群的 Kubernetes 版本为 v1.20~v1.24,其他版本的集群可能存在兼容性问题。
    • 保证自定义集群能够访问公网。如不能,请参见 无公网环境如何下载并部署采集器
    • 已创建命名空间,本文中以 volcano-metrics 为例。

    注意

    请勿在自定义集群中安装开源 Prometheus 或其他监控系统的采集组件,这些组件可能与托管 Prometheus 提供的采集器组件冲突,导致组件异常。

  • 在本地环境(Linux/Mac)中能够使用 kubectl 正确连接集群。包括 VKE 集群和自定义 Kubernetes 集群。

配置步骤

步骤一:在 VKE 集群中配置工作区代理

托管 Prometheus 工作区目前仅提供内网 Remote Write 地址,当用户使用云企业网将自定义集群所在私网和火山引擎网络打通后,不能直接访问 VMP 的域名。因此需要配置代理实现访问。

  1. 登录 容器服务控制台
  2. 在左侧导航栏中,选择 服务与路由 > 服务。单击 使用 Yaml 创建,创建服务。通过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
  1. 在左侧导航栏中,选择 工作负载 > 对象浏览器。 单击 使用 Yaml 创建,创建路由规则。指定自定义域名和服务的映射关系。
    • 在 类型 下拉菜单中选择 自定义
    • 在 Yaml 配置框内输入 Yaml 配置。
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
  1. 配置完成后,您可以在 服务与路由 > 路由规则 界面中,查看 Ingress 对应的私网 IP 地址。

alt

步骤二:在自定义集群中配置 DNS

为保证部署在自定义集群中的采集器能够正确识别自定义域名,您需要在自定义集群中配置 CoreDNS,指定自定义域名和 Ingress 内网 IP 地址之间的解析关系。

  1. 使用 kubectl 连接自定义集群。
  2. 执行以下命令,修改 CoreDNS 的配置文件。
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 为例。

  1. 在本地环境中下载采集器部署脚本,详情请参见 获取脚本
  2. 使用 kubectl 连接自定义集群。
  3. 执行以下命令,部署 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 认证模式下的认证密码

检查结果

查看组件状态

组件安装完成后,您可以登录自定义集群界面,查看采集器组件的工作状态,每个组件的名称、类型和作用说明如下表所示。

组件名称负载类型命名空间说明
vmagentStatefulSetvolcano-metrics采集集群内 kubelet、kubelet-cadvisor 、kube-state-metrics 、node-exporter 暴露的指标。
vm-operatorDeploymentvolcano-metricsVM Agent 控制组件。
kube-state-metricsStatefulSetvolcano-metrics提供 Kubernetes 资源信息指标数据。
node-exporterDaemonSetvolcano-metrics提供节点资源信息指标数据。

查看 vm-operator 组件工作状态,以阿里云 ACK 为例。
alt

查看采集器工作状态,以阿里云 ACK 为例。
alt

查看 ingress 监控

使用代理的方式向托管 Prometheus 工作区写入监控数据,写入性能与 VKE 集群中的 ingress 实例性能密切相关。建议您通过 VKE 集群的可观测性功能,对 ingress 实例进行监控和运维。可参考如下文档:

alt

监控和告警

指标

您可以使用托管 Prometheus 的 Explore 功能来快速查询和展示指标数据。详情请参见 指标查询

alt

大盘

您可以自建 Grafana,并通过 Grafana 查看指标和创建大盘。包括:

告警

您可以在托管 Prometheus 的告警中心配置相关告警。详情请参见 创建告警规则

常见问题

无公网环境如何下载并部署采集器

托管 Prometheus 为您提供的采集器,默认保存在火山引擎镜像仓库中。如果您的自定义集群无公网环境,无法访问 Internet。则可以遵循以下步骤:

  1. 使用能够访问公网的环境,下载相关采集器镜像。
  2. 上传至私有云仓库中。
  3. 部署采集器时,增加私有仓库的字段,允许从私有仓库拉取采集器镜像。
./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 # 私有仓库的登录密码