前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通过Kuberhealthy了解K8s的KPI

通过Kuberhealthy了解K8s的KPI

作者头像
CNCF
发布2020-06-04 16:20:31
1.3K0
发布2020-06-04 16:20:31
举报
文章被收录于专栏:CNCF

作者:Joshulyne Park(Comcast),Eric Greer(Comcast)

从Kuberhealthy v2.0.0开始构建

去年11月在KubeCon San Diego 2019,我们宣布了Kuberhealthy 2.0.0的发布——将Kuberhealthy转变为作合成监测的Kubernetes操作器(operator)。这种新功能使开发人员能够创建自己的kuberhealthy检查容器,以合成监测他们的应用程序和集群。社区很快就采用了这个新特性,我们非常感谢在他们的集群中实现和测试Kuberhealthy 2.0.0的每个人。感谢所有在kuberhealthy Slack频道上报道问题并参与讨论的人。我们很快开始工作,用最新版本的Kuberhealthy解决你的所有反馈。此外,我们创建了一个关于如何轻松安装和使用Kuberhealthy的指南,以捕获一些有用的合成KPI。

https://github.com/Comcast/kuberhealthy

部署Kuberhealthy

要安装kuberhealthy,请确保安装了Helm 3。如果没有,可以使用这个deploy文件夹中生成的规范文件。如果你不使用Prometheus操作器,你应该使用kuberhealthy-prometheus.yaml;如果你使用Prometheus操作器,你应该使用 kuberhealthy-prometheus-operator.yaml。如果你根本不使用Prometheus,那么你仍然可以使用Kuberhealthy和JSON状态页面,以及/或InfluxDB数据库集成,使用此规范。

https://github.com/Comcast/kuberhealthy/tree/master/deploy

https://github.com/Comcast/kuberhealthy/blob/master/deploy/kuberhealthy.yaml

使用Helm 3进行安装:

1. 在Kubernetes集群/上下文中创建命名空间“kuberhealthy”:

代码语言:javascript
复制
kubectl create namespace kuberhealthy

2. 将当前命名空间设置为“kuberhealthy”:

代码语言:javascript
复制
kubectl config set-context --current --namespace=kuberhealthy

3.将kuberhealthy repo添加到Helm:

代码语言:javascript
复制
helm repo add kuberhealthy https://comcast.github.io/kuberhealthy/helm-repos

4. 根据你的Prometheus实现,使用适当的命令为你的集群安装kuberhealthy:

  • 如果你用Prometheus操作器:
代码语言:javascript
复制
helm install kuberhealthy kuberhealthy/kuberhealthy --set prometheus.enabled=true,prometheus.enableAlerting=true,prometheus.enableScraping=true,prometheus.serviceMonitor=true
  • 如果你用Prometheus,而没使用Prometheus操作器:
代码语言:javascript
复制
helm install kuberhealthy kuberhealthy/kuberhealthy --set prometheus.enabled=true,prometheus.enableAlerting=true,prometheus.enableScraping=true

有关配置适当的刮注释的更多细节,请参见下面的Prometheus集成细节一节。

  • 最后,如果你不使用Prometheus:
代码语言:javascript
复制
helm install kuberhealthy kuberhealthy/kuberhealthy

运行Helm命令应该会自动安装Kuberhealthy的最新版本(v2.2.0)和一些基本检查。如果运行kubectl get pods,应该会看到两个Kuberhealthy pod。这些是创建、协调和跟踪测试pod的pod。这两个Kuberhealthy pod还提供一个JSON状态页面和一个/metrics端点。你看到创建的每个其他pod都是一个检查器pod,设计用于执行并在完成时关闭。

配置额外的检查

接下来,你可以运行kubectl get khchecks。你应该会看到三个Kuberhealthy检查默认安装:

  • daemonset:部署并拆除一个daemonset,以确保集群中的所有节点都能正常工作。
  • deployment:创建部署,然后触发滚动更新。测试部署是否可以通过服务访问,然后删除所有内容。此过程中的任何问题都将导致此检查报告失败。
  • dn-status-internal:验证内部集群DNS是否按预期运行。

要查看其他可用的外部检查,请查看外部检查注册表,在其中可以找到其他可以应用到集群的yaml文件,以启用各种检查。

https://github.com/Comcast/kuberhealthy/blob/master/docs/EXTERNAL_CHECKS_REGISTRY.md

Kuberhealthy检查pod应该在kuberhealthy开始运行后不久开始运行(1-2分钟)。此外,check-reaper cronjob每隔几分钟运行一次,以确保出现不超过5个完成的检查pod。

要获得这些检查的状态页面视图,你需要通过编辑kuberhealthy服务和设置Type: LoadBalancer来暴露kuberhealthy服务,或者使用kubectl port-forward service/kuberhealthy 8080:80。查看时,服务端点将显示一个JSON状态页面,如下所示:

代码语言:javascript
复制
{
    "OK": true,
    "Errors": [],
    "CheckDetails": {
        "kuberhealthy/daemonset": {
            "OK": true,
            "Errors": [],
            "RunDuration": "22.512278967s",
            "Namespace": "kuberhealthy",
            "LastRun": "2020-04-06T23:20:31.7176964Z",
            "AuthoritativePod": "kuberhealthy-67bf8c4686-mbl2j",
            "uuid": "9abd3ec0-b82f-44f0-b8a7-fa6709f759cd"
        },
        "kuberhealthy/deployment": {
            "OK": true,
            "Errors": [],
            "RunDuration": "29.142295647s",
            "Namespace": "kuberhealthy",
            "LastRun": "2020-04-06T23:20:31.7176964Z",
            "AuthoritativePod": "kuberhealthy-67bf8c4686-mbl2j",
            "uuid": "5f0d2765-60c9-47e8-b2c9-8bc6e61727b2"
        },
        "kuberhealthy/dns-status-internal": {
            "OK": true,
            "Errors": [],
            "RunDuration": "2.43940936s",
            "Namespace": "kuberhealthy",
            "LastRun": "2020-04-06T23:20:44.6294547Z",
            "AuthoritativePod": "kuberhealthy-67bf8c4686-mbl2j",
            "uuid": "c85f95cb-87e2-4ff5-b513-e02b3d25973a"
        }
    },
    "CurrentMaster": "kuberhealthy-7cf79bdc86-m78qr"
}

这个JSON页面显示在你的集群中运行的所有kuberhealthy检查。如果你在不同的名称空间中运行Kuberhealthy检查,你可以通过在状态页面URL中添加GET变量namespace参数:?namespace=kuberhealthy,kube-system来过滤它们。

自己开发检查

Kuberhealthy被设计为扩展自定义检查容器,任何人都可以编写它来检查任何东西。这些检查可以用任何语言编写,只要它们被打包在一个容器中。这使得kuberhealthy成为一个创建你自己的合成检查的优秀平台!

创建你自己的检查,是验证你的客户端库、模拟真实的用户工作流以及在你的服务或系统正常运行时创建高度信任的好方法。

要了解有关编写自己的检查的更多信息,以及简单的示例,请查看自定义检查创建文档。

https://github.com/Comcast/kuberhealthy/blob/master/docs/EXTERNAL_CHECK_CREATION.md

Prometheus集成细节

当启用Prometheus(而不是操作器)时,Kuberhealthy服务得到以下添加的注释:

代码语言:javascript
复制
prometheus.io/path: /metrics
prometheus.io/port: "80"
prometheus.io/scrape: "true"

在你的prometheus配置中,添加以下示例scrape_config,根据所添加的prometheus注释来刮Kuberhealthy服务:

代码语言:javascript
复制
- job_name: 'kuberhealthy'
  scrape_interval: 1m
  honor_labels: true
  metrics_path: /metrics
  kubernetes_sd_configs:
  - role: service
    namespaces:
      names:
        - kuberhealthy
  relabel_configs:
    - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
      action: keep
      regex: true

你也可以指定目标端点来刮,使用这个作业例子:

代码语言:javascript
复制
- job_name: kuberhealthy
  scrape_interval: 1m
  honor_labels: true
  metrics_path: /metrics
  static_configs:
    - targets:
      - kuberhealthy.kuberhealthy.svc.cluster.local:80

当应用了适当的Prometheus配置,你应该能够看到以下Kuberhealthy指标:

  • kuberhealthy_check
  • kuberhealthy_check_duration_seconds
  • kuberhealthy_cluster_states
  • kuberhealthy_running

创建关键性能指标

使用这些Kuberhealthy指标,我们的团队能够收集基于以下定义、计算和PromQL查询的KPI。

可用性(Availability)

我们将可用性定义为K8s集群控制平面按预期启动并运行。这是通过我们在一段时间内创建部署、执行滚动更新和删除部署的能力来衡量的。

我们通过度量Kuberhealthy的部署检查成功和失败来计算这个。

https://github.com/Comcast/kuberhealthy/tree/master/cmd/deployment-check

  • Availability = Uptime / (Uptime * Downtime)
  • Uptime = Number of Deployment Check Passes * Check Run Interval
  • Downtime = Number of Deployment Check Fails * Check Run Interval
  • Check Run Interval = how often the check runs (runInterval set in your KuberhealthyCheck Spec)
  • PromQL Query (Availability % over the past 30 days):
代码语言:javascript
复制
1 - (sum(count_over_time(kuberhealthy_check{check="kuberhealthy/deployment", status="0"}[30d])) OR vector(0))/(sum(count_over_time(kuberhealthy_check{check="kuberhealthy/deployment", status="1"}[30d])) * 100)

利用率(Utilization)

我们将利用率定义为产品(k8s)及其资源(pod、服务等)的用户利用率。这是通过客户使用多少节点、deployment、statefulset、持久卷、服务、pod和作业来度量的。我们通过计算节点、deployment、statefulset、持久卷、服务、pod和作业的总数来计算。

持续时间(延迟)

我们将持续时间(duration)定义为控制平面的容量和吞吐量的利用率。我们通过捕获kuberhealthy部署检查运行的平均运行持续时间来计算。

  • PromQL查询(部署检查平均运行时间):
代码语言:javascript
复制
avg(kuberhealthy_check_duration_seconds{check="kuberhealthy/deployment"})

错误/警告

我们将错误定义为所有k8s集群和kuberhealthy相关警报。每当我们的Kuberhealthy检查失败时,我们就会收到这个失败的警告。

谢谢你!

再次感谢社区里的每一个人,感谢你们所有的贡献和帮助!我们很高兴看到你所构建的东西。与往常一样,如果你发现问题,有一个功能请求,或者需要打开一个pull请求,请在Github项目上打开一个问题。

https://github.com/Comcast/kuberhealthy/issues

点击【阅读原文】阅读英文原文。



CNCF (Cloud Native Computing Foundation)成立于2015年12月,隶属于Linux Foundation,是非营利性组织。

CNCF(云原生计算基金会)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。请长按以下二维码进行关注

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CNCF 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档