内容简介:作者:Joshulyne Park,Eric Greer2019年11月,在圣地亚哥KubeCon,我们发布了kuberhealth 2.0.0——将kuberhealthy作为合成监测的
作者:Joshulyne Park,Eric Greer
2019年11月,在圣地亚哥KubeCon,我们发布了kuberhealth 2.0.0——将kuberhealthy作为合成监测的 Kubernetes operator 。这个新功能为开发人员提供了创建自己的kuberhealth检查容器的方法,以合成监控其应用程序和集群。社区很快采用了这个新特性,感谢在自己的集群中实现和测试kuberhealth 2.0.0的每个人。
1
部署Kuberhealthy
要安装Kuberhealthy,请确保安装了Helm 3。如果没有,可以使用此部署文件夹中生成的flat spec文件。如果不使用Prometheus Operator,可以用kuberhealthy- Prometheus.yaml。如果您根本没有使用Prometheus,那么您仍然可以使用kuberhealthy和JSON状态页以及/或InfluxDB集成, 使用此规范。
2
使用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:
如果使用 Prometheus Operator:
helm install kuberhealthy kuberhealthy/kuberhealthy --set prometheus.enabled=true,prometheus.enableAlerting=true,prometheus.enableScraping=true,prometheus.serviceMonitor=true
如果使用Prometheus, 但不是Prometheus Operator:
helm install kuberhealthy kuberhealthy/kuberhealthy --set prometheus.enabled=true,prometheus.enableAlerting=true,prometheus.enableScraping=true
有关配置scrape注释的更多细节,请参阅下面Prometheus Integration details一节。
最后,如果你不使用Prometheus:
helm install kuberhealthy kuberhealthy/kuberhealthy
运行Helm命令将自动安装Kuberhealthy(v2.2.0)的最新版本,并进行一些基本检查。如果运行kubectl get pods,应该会看到两个kuberhealth pods。这些是创建、协调和跟踪测试pod的pod。这两个Kuberhealthy pods还提供JSON状态页和a/metrics端点。您看到创建的其他每个pod都是一个checker pod,设计用于执行和关闭。
3
配置其他检查
接下来,可以运行kubectl get khchecks。可以看到默认安装了三个Kuberhealthy检查:
-
daemonset: 部署并关闭一个daemonset,以确保群集中的所有节点都能正常工作。
-
deployment:创建部署,然后触发滚动更新。测试部署是否可以通过服务访问,然后删除所有内容。过程中的任何问题都会导致失败。
-
dn -status-internal:验证内部集群DNS是否正常运行。
要查看其他可用的外部检查,请查看外部检查注册表,找到可以应用于集群启用各种检查的其他yaml文件。
kuberhealthy 检查pod应该在kuberhealthy运行后不久(1-2分钟)开始运行。另外,check-reaper cronjob每隔几分钟运行一次,以确保一次不超过5个checker pods被丢弃。
要获取这些检查的状态页视图,需要通过编辑kuberhealthy服务并设置Type:LoadBalancer来对外公开kuberhealthy服务,或者使用kubectl port-forward 服务/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页面显示集群中运行的所有kuberhealth检查。要在不同命名空间运行Kuberhealthy检查,可以通过在状态页URL中添加GET变量名称空间参数:?namespace=kuberhealth,kube-system来过滤它们。
这个JSON页面显示在你的集群中运行的所有kuberhealthy检查。如果你在不同的名称空间中运行Kuberhealthy检查,你可以通过在状态页面URL中添加GET变量namespace参数:?namespace=kuberhealthy,kube-system来过滤它们。
4
Writing Your Own Checks
Kuberhealthy被设计为扩展自定义检查容器,任何人都可以编写容器来检查任何内容。这些检查可以用任何语言编写,只要它们打包在容器中。这使得Kuberhealthy成为创建自己的合成监测的优秀平台!
创建自己的检查是验证client library、模拟真实的用户工作流程,以及在服务或系统正常运行时创建高度信任的好方法。
5
Prometheus集成细节
当启用Prometheus时,Kuberhealthy服务将添加以下注释:
prometheus.io/path: /metrics
prometheus.io/port: "80"
prometheus.io/scrape: "true"
在prometheus配置中,添加以下示例scrape_config,该配置通过添加的prometheus注释来获取kuberhealthy服务:
- job_name:'kuberhealthy's
crape_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_check
-
kuberhealthy_check_duration_seconds
-
kuberhealthy_cluster_states
-
kuberhealthy_running
6
创建关键绩效指标
使用这些Kuberhealthy度量,团队能够收集基于以下定义、计算和PromQL查询的kpi。
可用性
我们将可用性定义为K8s集群控制平面按预期启动和运行。这是通过在一段时间内创建部署、执行滚动更新和删除部署的能力来衡量的。通过测量Kuberhealthy的部署检查成败来计算这一点。
-
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):
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)
利用率
我们将利用率定义为用户对产品(k8s)及其资源(pod、服务等)的接受程度。通过客户使用了多少节点、部署、有状态集、持久卷、服务、pods和jobs来衡量。通过计算节点、部署、有状态集、持久卷、服务、pods和jobs的总数来计算。
持续时间(延迟)
持续时间定义为控制平面的容量和吞吐量的利用率。通过捕获kuberhealthy部署检查运行的平均运行持续时间来计算。
PromQL查询(部署检查平均运行持续时间):
avg(kuberhealthy_check_duration_seconds{check="kuberhealthy/deployment"})
错误/警报
我们将错误定义为所有k8s集群和Kuberhealthy相关警报。每次Kuberhealthy检查失败,都会收到失败的警报。
原文地址:
https://kubernetes.io/blog/2020/05/29/k8s-kpis-with-kuberhealthy/
相关阅读:
Linkerd 2.8发布!更简单、安全的多集群Kubernetes服务网格
当我们谈论云原生网络时,Kube-OVN 究竟能带来什么?(下)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- JB的测试之旅-测试岗如何进行业绩考核?
- 2019年初考核题
- SDL思考之评价考核体系
- Bug 数能否做为技术人员考核的 KPI?
- 公司推行绩效考核,最差的员工月入10W,我就是那个员工
- 今天的考核题目: 你知道React和Vue的区别吗? skr,skr
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。