作者: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”:
kubectl create namespace kuberhealthy
2. 将当前命名空间设置为“kuberhealthy”:
kubectl config set-context --current --namespace=kuberhealthy
3.将kuberhealthy repo添加到Helm:
helm repo add kuberhealthy https://comcast.github.io/kuberhealthy/helm-repos
4. 根据你的Prometheus实现,使用适当的命令为你的集群安装kuberhealthy:
helm install kuberhealthy kuberhealthy/kuberhealthy --set prometheus.enabled=true,prometheus.enableAlerting=true,prometheus.enableScraping=true,prometheus.serviceMonitor=true
helm install kuberhealthy kuberhealthy/kuberhealthy --set prometheus.enabled=true,prometheus.enableAlerting=true,prometheus.enableScraping=true
有关配置适当的刮注释的更多细节,请参见下面的Prometheus集成细节一节。
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检查默认安装:
要查看其他可用的外部检查,请查看外部检查注册表,在其中可以找到其他可以应用到集群的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状态页面,如下所示:
{
"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服务得到以下添加的注释:
prometheus.io/path: /metrics
prometheus.io/port: "80"
prometheus.io/scrape: "true"
在你的prometheus配置中,添加以下示例scrape_config,根据所添加的prometheus注释来刮Kuberhealthy服务:
- 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
你也可以指定目标端点来刮,使用这个作业例子:
- job_name: kuberhealthy
scrape_interval: 1m
honor_labels: true
metrics_path: /metrics
static_configs:
- targets:
- kuberhealthy.kuberhealthy.svc.cluster.local:80
当应用了适当的Prometheus配置,你应该能够看到以下Kuberhealthy指标:
创建关键性能指标
使用这些Kuberhealthy指标,我们的团队能够收集基于以下定义、计算和PromQL查询的KPI。
可用性(Availability)
我们将可用性定义为K8s集群控制平面按预期启动并运行。这是通过我们在一段时间内创建部署、执行滚动更新和删除部署的能力来衡量的。
我们通过度量Kuberhealthy的部署检查成功和失败来计算这个。
https://github.com/Comcast/kuberhealthy/tree/master/cmd/deployment-check
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部署检查运行的平均运行持续时间来计算。
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(云原生计算基金会)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。请长按以下二维码进行关注