首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >在边缘设备上部署Prometheus,实现远程监控K3s集群!

在边缘设备上部署Prometheus,实现远程监控K3s集群!

作者头像
CNCF
发布2021-02-23 15:32:44
发布2021-02-23 15:32:44
2K0
举报
文章被收录于专栏:CNCFCNCF

作者简介

Janakiram MSV是Janakiram & Associates的首席分析师,也是国际信息技术学院的兼职教师。他也是Google Qualified Developer、亚马逊认证解决方案架构师、亚马逊认证开发者、亚马逊认证SysOps管理员和微软认证Azure专业人员。

Janakiram是云原生计算基金会(CNCF)的大使,也是首批Kubernetes认证管理员和Kubernetes认证应用开发者之一。他曾在微软、AWS、Gigaom Research等知名公司工作。

Seed Studio的Wio Terminal是一款功能强大的设备,它拥有一个兼容Arduino的微型控制器和一个2.4英寸的LCD。它还拥有一个内置的WiFi和BLE无线电,可以实现无线连接。

Wio Terminal这些特性启发了我,为什么不构建一个迷你的Prometheus仪表盘呢?可以显示运行在边缘的Kubernetes集群的重要统计数据。经过一番努力,我将这个想法变成了一个简单原型。

虽然本教程适用于任何Kubernetes集群,但是它是在Seed Studio的Odyssey Blue J4105 Mini PC上运行的三节点K3s集群上测试的。

架构设计

Prometheus暴露了一个REST API端点,可以通过查询来提取任何可用的指标。该API对任何有效的Prometheus查询都会以JSON负载进行响应。我们将利用该API来提取一些关键指标的值。

尽管Wio Terminal可以使用HTTP和JSON库来查询和解析响应,但是sketch的大小可能会导致设备不堪重负。因此,最好将繁重的工作转移到外部计算环境,该环境仅发送包含基本指标的、简化的、轻量的JSON。作为Wio Terminal和Prometheus之间的桥梁/adapter的wrapper将被部署为Kubernetes Pod,并通过NodePort/LoadBalancer进行服务暴露。Wio Terminal会定期调用这个服务来获取所需的值。

综上,我们这个项目只需要3个组件——Wio Terminal、wrapper服务以及运行在Kubernetes上的Prometheus deployment。

完整的源代码和配置可以查看下方Github链接:

https://github.com/janakiramm/wio-prometheus

安装和配置Prometheus

在你的Kubernetes集群中,可以通过Helm chart来安装Prometheus。这是在集群中部署Prometheus和Grafana的最高效的机制。

首先更新Helm 仓库,然后在Prometheus命名空间中安装chart。

代码语言:javascript
复制
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo add stable https://charts.helm.sh/stable
helm repo update
代码语言:javascript
复制
kubectl create ns prometheus
helm install prometheus prometheus-community/kube-prometheus-stack --namespace prometheus

验证pod和服务是否安装正确。

代码语言:javascript
复制
kubectl --namespace prometheus get pods -l "release=prometheus"
kubectl --namespace prometheus get svc -l "release=prometheus"

我通过使用下面的命令将Prometheus服务转换为LoadBalancer。

代码语言:javascript
复制
kubectl -n prometheus patch svc prometheus-kube-prometheus-prometheus -p '{"spec": {"type": "LoadBalancer"}}'

如果你还没有配置LoadBalancer,将其类型更改为NodePort。

编写Prometheus Wrapper

Prometheus wrapper服务是一个简单的Flask web应用程序,它可以抽象查询并且会在JSON中返回一个集合的响应。

以下代码段展示了服务如何封装查询以获得集群的节点数:

代码语言:javascript
复制
import flask
from flask import json
import requests  
import json
 
 
app = flask.Flask(__name__)
data={}
PROMETHEUS = 'http://10.0.0.242:9090/api/v1/query'
 
@app.route('/metrics')
def metrics():
    getMetrics()
    response = app.response_class(
        response=json.dumps(data),
        status=200,
        mimetype='application/json'
    )
    return response
 
def getMetrics():
    global data
 
    response = requests.get(PROMETHEUS,
    params={'query': 'count(kube_node_info)'})  
    results = response.json()
    print("nodes:"+results['data']['result'][0]['value'][1])
    data["nodes"]=results['data']['result'][0]['value'][1]
 
if __name__ == "__main__":
    print("Loading server")       
    app.run(host='0.0.0.0')

我们可以添加多个查询到这个服务中以暴露额外的指标。关于wrapper服务的完整代码,请参考GitHub上的这个文件:

https://github.com/janakiramm/wio-prometheus/blob/main/Kubernetes/build/app.py

我将服务变成了一个Docker镜像,并把它作为一个无状态部署暴露在K3s集群中。这些工件的YAML规范可以在deploy目录下找到。

如下图所示:

调用wrapper服务端点会返回以下JSON负载:

代码语言:javascript
复制
curl -s 10.0.0.243/metrics | jq

既然服务已经部署完毕,让我们为Wio Terminal构建仪表盘。

Wio Terminal的Ardunio Sketch

要构建仪表盘,我们需要使用Ardunio WiFi library、Arduino HTTP client、JSON库以及TFT LCD library。

在上传sketch到Wio Terminal之前,需要在arduino_secrets.h.中更新WiFi SSID和密码。将serverAddress[ ]和port设置为合理的值。

检查Arduino的Serial Monitor,确保Sketch能够连接到WiFi和Wrapper服务端点。

现在,你可以通过这个始终在线的迷你仪表盘远程跟踪K3s集群的健康状况啦!

推荐阅读

保姆级教程!使用k3d实现K3s高可用!

一文搞定全场景K3s离线安装

除了边缘场景,你还能在哪里使用K3s?

About k3s

k3s 是首个进入 CNCF 沙箱项目的 K8S 发行版,同时也是当前全球用户量最大的 CNCF 认证轻量级 K8S 发行版。自2019年3月发布以来,备受全球开发者们关注,至今GitHub Star数已超过 15,700,成为了开源社区最受欢迎的边缘计算 K8S 解决方案。截至目前,K3s全球下载量超过100万次,每周平均被安装超过2万次,其中30%的下载量来自中国。

k3s 专为在资源有限的环境中运行 Kubernetes 的研发和运维人员设计,将满足日益增长的在边缘计算环境中运行在 x86、ARM64 和 ARMv7 处理器上的小型、易于管理的 Kubernetes 集群需求。k3s 的发布,为开发者们提供了以“Rancher 2.X + k3s”为核心的从数据中心到云到边到端的 K8S 即服务(Kubernetes-as-a-Service),推动 Kubernetes Everywhere。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档