使用kubewatch来监控你的k8s集群

简介

kubewatch 还是一个不错的小工具,用来监控集群中的事件是很不错的

安装

安装就直接使用helm去安装了,首先添加repo

helm repo add bitnami https://charts.bitnami.com/bitnami

之后获取可以配置的values

helm show values bitnami/kubewatch >values.yaml

这里我就修改比较基本的东西,首先是镜像,因为是使用的本地仓库,所以修改了镜像的名字,这样就不需要每次都去dockerhub上去拉取了

1
2
3
4
image:
registry: reg.bboysoul.cn
repository: kubewatch
tag: 0.1.0-debian-10-r107

之后是需要收到告警的平台,默认支持

  • hipchat
  • slack
  • mattermost
  • flock
  • msteams
  • webhook
  • smtp

因为我这里使用的是企业机器人,所以直接webhook,配置如下

1
2
3
webhook:
enabled: true
url: "http://wechat-webhook:8080"

接着就是配置要监控的namespace,默认不写的话就是监控所有的namespace,这里我只监控我固定的namespace

namespaceToWatch: "app"

之后是配置需要监控的资源,因为kubewatch只要集群中有事件就会自动推送,所以信息会很多,这里我只选择了关键的deployment

1
2
3
4
5
6
7
8
9
resourcesToWatch:
deployment: true
replicationcontroller: false
replicaset: false
daemonset: false
services: false
pod: false
job: false
persistentvolume: false

rbac 权限改为true

1
2
rbac:
create: true

其他的个人觉得没有什么可以配置的

启动

helm upgrade --install --create-namespace -n kube-watch -f values.yaml kubewatch bitnami/kubewatch

接着就是写一个webhook去接收信息,然后发送到企业微信,脚本如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from flask import Flask, request
import requests
import json


app = Flask(__name__)


wechat_boot_url=""

def send_wechat(text,time):
headers = {'Content-Type': 'application/json;charset=utf-8'}
body = {
"msgtype": "markdown",
"markdown": {
"content": "事件内容: " + text + "\n 事件时间: " + time
}
}
requests.post(wechat_boot_url, json.dumps(body), headers=headers)


@app.route('/', methods=['POST'])
def index():
message = request.data
message = json.loads(message)
text = message['text']
time = message['time']
send_wechat(text,time)
return ('This is a website.', 200, None)

if __name__ == '__main__':
app.run(port=8080,host="0.0.0.0")


依赖于下面两个模块

  • flask
  • requests

默认接收过来的数据格式如下

1
2
3
4
5
6
7
8
9
10
{
'eventmeta': {
'kind': 'deployment',
'name': 'app/app',
'namespace': '',
'reason': 'updated'
},
'text': 'A `deployment` in namespace `` has been `updated`:\n`app/app`',
'time': '2020-12-08T06: 41: 26.430943479Z'
}

可以修改一下脚本获取其他相关信息

下面是dockerfile

1
2
3
4
FROM python:3-alpine
COPY . /
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
CMD python3 main.py

然后是deployment.yaml,为了方便,我创建了一个service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
apiVersion: v1
kind: Service
metadata:
name: wechat-webhook
namespace: kube-watch
labels:
app: wechat-webhook
spec:
ports:
- name: wechat-webhook
port: 8080
targetPort: 8080
selector:
app: wechat-webhook
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wechat-webhook
namespace: kube-watch
labels:
app: wechat-webhook
spec:
replicas: 1
selector:
matchLabels:
app: wechat-webhook
template:
metadata:
labels:
app: wechat-webhook
spec:
containers:
- name: wechat-webhook
image:
imagePullPolicy: Always
ports:
- name: wechat-webhook
containerPort: 8080

如果对kubewatch有兴趣的,可以看我下面这个repo,所有的资源都在里面

https://github.com/bboysoulcn/kubewatch

欢迎关注我的博客www.bboy.app

Have Fun

欢迎关注我的其它发布渠道