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资料 用户权限详解

    目录 一.MySQL权限详解 设置MySQL用户资源限制 用户资源限制执行操作 二.MySQL权限级别介绍 MySQL权限级别 MySQL创建权限 MySQL删除与插入权限 MySQL修改与触发器权限 ...

  2. Python绘制折线图

    一.Python绘制折线图 1.1.Python绘制折线图对应代码如下图所示 import matplotlib.pyplot as pltimport numpy as np from pylab ...

  3. 拖动条形图设置任务关联(Project)

    <Project2016 企业项目管理实践>张会斌 董方好 编著 仅仅是知悉了四种任务关联,那只是纸上谈兵,要把这四种关联真正用到Project上才行,所以我们就要来设置任务关联了. 这是 ...

  4. 自动化集成:Pipeline流水语法详解

    前言:该系列文章,围绕持续集成:Jenkins+Docker+K8S相关组件,实现自动化管理源码编译.打包.镜像构建.部署等操作:本篇文章主要描述Pipeline流水线用法. 一.Webhook原理 ...

  5. CF977B Two-gram 题解

    Content 给定一个字符串 \(s\),请求出出现次数最多的长度为 \(2\) 的子串. 数据范围:\(2\leqslant |s|\leqslant 100\). Solution 直接求出所有 ...

  6. JAVA中SpringMVC获取bean方法,在工具类(utils)注入service

    有时候我们会出现无法用注解 @Autowired 注入bean的情况,这个时候可以 通过contextLoader获取 WebApplicationContext ctx = ContextLoade ...

  7. 【LeetCode】120. Triangle 解题报告(Python)

    [LeetCode]120. Triangle 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址htt ...

  8. Codeforces629 C. Famil Door and Brackets

    C. Famil Door and Brackets time limit per test 2 seconds memory limit per test 256 megabytes input s ...

  9. Docker&K8S学习笔记(一)—— Docker安装

    最近一年在工作上经常使用Docker与K8S,除了利用其打镜像,部署服务外,还基于Docker与K8S开发了一套CICD流水线平台,为了加深相关知识点的理解,所以从今天开始会定期更新学习笔记,本套学习 ...

  10. WPF自定义界面WindowChrome

    WPF自定义界面WindowChrome 默认WPF的界面其实也还行,就是满足不了日渐增长的需求,界面还是需要有更高的自定义程度,包括标题栏也要能够塞下更多的操作控件. 默认窗口介绍 新建WPF项目, ...