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

  1. 根据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来过滤它们。

4Writing Your Own Checks

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

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

5Prometheus集成细节

当启用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/202 ... lthy/

如何对K8s进行考核?Kuberhealthy来打个样!的更多相关文章

  1. Kubernetes - 腾讯蓝鲸配置平台(CMDB)开源版部署

    蓝鲸CMDB 蓝鲸配置平台(蓝鲸CMDB)是一个基于运维场景设计的企业配置管理服务.主要功能: 1. 拓扑化的主机管理:主机基础属性.主机快照数据.主机归属关系管理 2. 组织架构管理:可扩展的基于业 ...

  2. kubernetes集合

    kubernetes集合 kubernetes(1):kubernetes简介和组件 kubernetes(2):yum安装kubernetes kubernetes(3):kubeadm安装k8s1 ...

  3. 如何在招聘中考核.NET架构师

    .NET架构师招聘不如JAVA那么顺利,可以搜索到的.NET架构师可以说是凤毛菱角.当然好的架构师都是需要长期观察和挖角才能得手,如何去招聘到合适的.NET架构师可能是摆在所有求贤者面前的难题.这里的 ...

  4. 【Kubernetes】K8S网络方案--最近在看的

    K8S网络-最近在看的 Create a Minikube cluster - Kubernetes Kubernetes Documentation - Kubernetes Kubernetes ...

  5. 【Kubernetes】K8S 网络隔离 方案

    参考资料: K8S-网络隔离参考 OpenContrail is an open source network virtualization platform for the cloud. – Kub ...

  6. ASP.NET MVC (Razor)开发<<周报与绩效考核系统>>,并免费提供园友们使用~~~

    过去我们使用过一些周报工具来完成项目组或部门的周报填写与考核工作,但多少有些不理想,要么功能太过简单,要么功能特别繁杂,不接地气,使用不便. 后来我们就考虑自己开发一个简单的,实用的,易用的,接地气的 ...

  7. k8s入门系列之guestbook快速部署

    k8s集群以及一些扩展插件已经安装完毕,本篇文章介绍一下如何在k8s集群上快速部署guestbook应用. •实验环境为集群:master(1)+node(4),详细内容参考<k8s入门系列之集 ...

  8. k8s volume

        只有nfs和rbd的,本人翻译确实很渣         在容器中磁盘文件寿命是短暂的,当在容器中运行一些重要程序时,这会产生一些问题. 首先,当一个容器崩溃后,kubelet将重新启动该容器, ...

  9. k8s pv

    这个文档描述当前在k8s中PersistentVolumes的使用. 我们建议和volume一起进行了解   Introduction     管理存储和管理计算是截然不同的问题. 持久存储子系统对用 ...

随机推荐

  1. MySQL常见错误总结

    一.1205 - Lock wait timeout exceeded; try restarting transaction

  2. 车载以太网第二弹|测试之实锤-1000BASE-T1 IOP测试实践

    背景 车载以太网通信技术在汽车行业的应用速度远超预期,去年本土OEM已经上市了应用100BASE -T1的车型.今年,应用1000BASE -T1的车型预计也将会量产上市.针对测试而言,带来另外一个难 ...

  3. png crc讲解

    我太难了. 我真的是为你们着想,你们学姐说misc太简单了,可就是这么简单我相信你们也不会做...我还得给你们讲解... 加油吧!!! 工具:010editor    这个我想给你放下载链接来着,后来 ...

  4. [BUUCTF]REVERSE——[BJDCTF 2nd]guessgame

    [BJDCTF 2nd]guessgame 附件 步骤: 例行查壳儿,64位程序,没有壳儿 64位ida载入,习惯性的检索程序里的字符串,看到了一串类似flag的字符串,拿去提交,成功 BJD{S1m ...

  5. UVA10079 Pizza Cutting 题解

    Content 求用 \(n\) 条直线最多能将平面分成多少块区域. 多组输入,以一个负数结束. 数据范围:\(0\leqslant n\leqslant 2.1\times 10^8\). Solu ...

  6. CF831B Keyboard Layouts 题解

    Content 给你 \(26\) 个字母的映射(都是小写,大写的映射方式相同),再给你一个字符串 \(s\),求它的映射结果(如果有非字母的字符保持不变). 数据范围:\(1\leqslant |s ...

  7. CF1292B Aroma's Search 题解

    Content 给定一个坐标系,已知第一个点的坐标为 \((x_0,y_0)\),第 \(i(i>0)\) 个点的坐标满足这样的两个递推式:\(x_i=a_xx_{i-1}+b_x,y_i=a_ ...

  8. java 输入输出IO 转换流-字符编码

    编码和其产生的问题: 计算机中储存的信息都是用二进制数表示的,而我们在屏幕上看到的数字.英文.标点符号.汉字等字符是二进制数转换之后的结果. 按照某种规则,将字符存储到计算机中,称为编码 .反之,将存 ...

  9. SpringBoot整合log4j日志框架

    Spring Boot 2.x默认使用Logback日志框架,要使用 Log4j2必须先排除 Logback. 加入修改依赖 <dependency> <groupId>org ...

  10. Spring Boot整合Thymeleaf及Thymeleaf页面基本语法

    引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sp ...