
简介
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
