Kube Eventer
前言
工作上需要持久化Pod的事件信息,我们知道事件默认是由etcd来进行存储的,但是事件的信息存储具有时效性(默认1h,通过修改kube-apiserver的--event--ttl实现更长时间的存储
),且将etcd这种内存级别的组件作为持久化数据库也是不合理的,所以使用了阿里开源的这款事件告警组件kube-eventer。
使用方法
- 创建表
sql
CREATE TABLE IF NOT EXISTS `kube_event` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'event primary key',
`name` varchar(64) NOT NULL DEFAULT '' COMMENT 'event name',
`namespace` varchar(64) NOT NULL DEFAULT '' COMMENT 'event namespace',
`event_id` varchar(64) NOT NULL DEFAULT '' COMMENT 'event_id',
`type` varchar(64) NOT NULL DEFAULT '' COMMENT 'event type Warning or Normal',
`reason` varchar(64) NOT NULL DEFAULT '' COMMENT 'event reason',
`message` text NOT NULL COMMENT 'event message',
`kind` varchar(64) NOT NULL DEFAULT '' COMMENT 'event kind',
`first_occurrence_time` varchar(64) NOT NULL DEFAULT '' COMMENT 'event first occurrence time',
`last_occurrence_time` varchar(64) NOT NULL DEFAULT '' COMMENT 'event last occurrence time',
`cluster` varchar(64) DEFAULT NULL COMMENT 'cluster',
`source` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'source',
PRIMARY KEY (`id`),
UNIQUE KEY `event_id_index` (`event_id`)
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8 COMMENT='Event info tables';
- 执行yaml
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
name: kube-eventer
name: kube-eventer
namespace: kube-system
spec:
replicas: 1
selector:
matchLabels:
app: kube-eventer
template:
metadata:
labels:
app: kube-eventer
annotations:
scheduler.alpha.kubernetes.io/critical-pod: ''
spec:
dnsPolicy: ClusterFirstWithHostNet
serviceAccount: kube-eventer
containers:
- image: abcsys.cn:5000/kube-eventer:latest
name: kube-eventer
command:
- "/kube-eventer"
- "--source=kubernetes:https://kubernetes.default"
## 填入你的数据库账户、密码、名称和集群名称
- --sink=mysql:?username:password@tcp(ip:port)/dbname?charset=utf8&table=tablename&cluster=clustername
env:
# If TZ is assigned, set the TZ value as the time zone
- name: TZ
value: "Asia/Shanghai"
volumeMounts:
- name: localtime
mountPath: /etc/localtime
readOnly: true
- name: zoneinfo
mountPath: /usr/share/zoneinfo
readOnly: true
resources:
requests:
cpu: 100m
memory: 100Mi
limits:
cpu: 500m
memory: 250Mi
volumes:
- name: localtime
hostPath:
path: /etc/localtime
- name: zoneinfo
hostPath:
path: /usr/share/zoneinfo
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: kube-eventer
rules:
- apiGroups:
- ""
resources:
- configmaps
- events
verbs:
- get
- list
- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: kube-eventer
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: kube-eventer
subjects:
- kind: ServiceAccount
name: kube-eventer
namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: kube-eventer
namespace: kube-system
注意事项
注意事项一
Q:数据库密码携带了@#这种特殊字符,导致数据库密码无法解析报错。
A:创建新的账户名和密码并赋予kube-event表的权限。注意事项二
Q:默认的官方镜像不带clusterName
A: 使用此版本,将deploy目录下的Dockerfile移到根目录自行打包即可。