简介
kubewatch 还是一个不错的小工具,用来监控集群中的事件是很不错的
安装
安装就直接使用helm去安装了,首先添加repo
helm repo add bitnami https://charts.bitnami.com/bitnami
之后获取可以配置的values
helm show values bitnami/kubewatch >values.yaml
这里我就修改比较基本的东西,首先是镜像,因为是使用的本地仓库,所以修改了镜像的名字,这样就不需要每次都去dockerhub上去拉取了
image:
registry: reg.bboysoul.cn
repository: kubewatch
tag: 0.1.0-debian-10-r107
之后是需要收到告警的平台,默认支持
- hipchat
- slack
- mattermost
- flock
- msteams
- webhook
- smtp
因为我这里使用的是企业机器人,所以直接webhook,配置如下
webhook:
enabled: true
url: "http://wechat-webhook:8080"
接着就是配置要监控的namespace,默认不写的话就是监控所有的namespace,这里我只监控我固定的namespace
namespaceToWatch: "app"
之后是配置需要监控的资源,因为kubewatch只要集群中有事件就会自动推送,所以信息会很多,这里我只选择了关键的deployment
resourcesToWatch:
deployment: true
replicationcontroller: false
replicaset: false
daemonset: false
services: false
pod: false
job: false
persistentvolume: false
rbac 权限改为true
rbac:
create: true
其他的个人觉得没有什么可以配置的
启动
helm upgrade --install --create-namespace -n kube-watch -f values.yaml kubewatch bitnami/kubewatch
接着就是写一个webhook去接收信息,然后发送到企业微信,脚本如下
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
默认接收过来的数据格式如下
{
'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
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
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