kubernetes事件日志采集工具(eventrouter-kafka)业务功能介绍与使用

简介

eventrouter-kafka是针对kubernetes项目的一个简单的事件路由服务。该服务采用List-Watch机制,获取k8s集群中的实时事件events,并把这些事件推送到不同的通道,例如kafka等等。

实现原理

1、eventrouter源码实现

eventrouter-kafka采用基于Client-go中的一个核心工具包Informer的List-Watch机制实现的。eventrouter-kafka需要通过List/Get Kubernetes中的事件events记录。如下是源码实现,
在这里插入图片描述
Informer主要有两个作用:

通过ListAndWatch 的方法,把 APIServer 中的 API 对象缓存在了本地,并负责更新和维护这个缓存。ListAndWatch通过 APIServer 的 LIST API“获取”所有最新版本的 API 对象;然后,再通过 WATCH API 来“监听”所有这些 API 对象的变化;注册相应的事件,之后如果监听到的事件变化就会调用事件对应的EventHandler,实现回调。

2、Client-go 中的 Informer 工作流程图

In
Informer 中的 Reflector 通过 List/watch 从 apiserver 中获取到集群中所有资源对象的变化事件(event),将其放入 Delta FIFO 队列中(以 Key、Value 的形式保存),触发 onAdd、onUpdate、onDelete 回调将 Key 放入 WorkQueue 中。同时将 Key 更新 Indexer 本地缓存。Control Loop 从 WorkQueue 中取到 Key,从 Indexer 中获取到该 Key 的 Value,进行相应的处理。

使用方法

1、编译/镜像制作

我使用的亿速云的香港的centos7 linux服务器进行编译的
对应的go env环境变量信息如下,

[root@yisu-5fbe7638d8d41 eventrouter]# go version
go version go1.14.10 linux/amd64
[root@yisu-5fbe7638d8d41 ~]# go env
GO111MODULE="off"
GOARCH="amd64"
GOBIN="/root/gobindir"
GOCACHE="/root/.cache/go-build"
GOENV="/root/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/root/eventrouter"
GOPRIVATE=""
GOPROXY="https://goproxy.io"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build578348278=/tmp/go-build -gno-record-gcc-switches"
  • 步骤1: 下载源码
    在这里插入图片描述
#源码的存放目录:${GOPATH}/src/github.com/heptiolabs/eventrouter
git clone https://github.com/cuishuaigit/eventrouter-kafka.git
  • 步骤2: 修改Makefile
    把基础镜像替换为国内的镜像golang:1.14.2-alpine
    在这里插入图片描述
  • 步骤1: 编译
cd /root/eventrouter/src/github.com/heptiolabs/eventrouter
make all

在这里插入图片描述

2、环境部署运行

我这里使用kubernetes集群环境部署eventrouter-kafka,其他的部署方式可以根据实际情况部署。有了镜像部署方式就很灵活了。

kubectl create -f eventrouter.yaml

其中,eventrouter-kafka的配置文件/etc/eventrouter/config.json挂载到configmap中eventrouter-cm1,在这里配置kafka的信息。
在这里插入图片描述
可以尝试创建一个pod,然后看下kafka已收到了events数据,
在这里插入图片描述

【附】
eventrouter.yaml内容如下,

apiVersion: v1
kind: ServiceAccount
metadata:
  name: eventrouter
  namespace: wtops 
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: eventrouter
rules:
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["get", "watch", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: eventrouter
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: eventrouter
subjects:
  - kind: ServiceAccount
    name: eventrouter
    namespace: wtops 
---
apiVersion: v1
data:
  config.json: |-
    {
      "sink": "kafka",
      "kafkaBrokers": "192.168.227.128:9092"      
    }
kind: ConfigMap
metadata:
  name: eventrouter-cm1
  namespace: wtops 
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: eventrouter
  namespace: wtops 
  labels:
    app: eventrouter
spec:
  replicas: 1
  selector:
    matchLabels:
      app: eventrouter
  template:
    metadata:
      labels:
        app: eventrouter
        tier: control-plane-addons
    spec:
      containers:
        - name: kube-eventrouter
          env:
          - name: KAFKA_BROKER_URL
            value: 192.168.227.128:9092
          #image: 172.32.150.15/paas_public/eventrouter:1.0.0
          image: gcr.io/heptio-images/eventrouter:v0.4 
          imagePullPolicy: IfNotPresent
          volumeMounts:
            - name: config-volume
              mountPath: /etc/eventrouter
            - name: config-kube
              mountPath: /root/.kube
      serviceAccount: eventrouter
      volumes:
        - name: config-volume
          configMap:
            name: eventrouter-cm1
        - hostPath:
            path: /root/.kube
          name: config-kube
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值