默认情况下, K8S 会将事件保留在 etcd 中一个小时,超过1小时的事件将无法看到,所以 K8S 默认保留事件的时间不足以来更深入的了解集群,所以将事件导出到集群外存储是有必要的,以实现可观测性和告警。
Event事件持久化需要依赖以下三个组件:
- grafana
- elasticsearch
- kubernetes-event-exporter
1 安装 elasticsearch
# 安装 elasticsearch
# -e "ES_JAVA_OPTS=-Xms1g -Xmx1g" 配置内存大小
$ docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms1g -Xmx1g" \
-e "xpack.security.enabled=false" elasticsearch:8.11.3
输出如下则 elasticsearch 安装正常:
2 安装 Grafana
# 安装 grafana,直接通过 Mac 来安装
$ brew install grafana
$ brew services start grafana
3 安装exporter
# 下载 kubernetes-event-exporter
$ git clone https://github.com/resmoio/kubernetes-event-exporter.git
$ cd kubernetes-event-exporter
4 配置export发送到es
# config 配置文件
logLevel: debug
logFormat: json
maxEventAgeSeconds: 10
kubeQPS: 60
kubeBurst: 60
# namespace: my-namespace-only # Omitting it defaults to all namespaces.
route:
routes:
- match:
- receiver: "dump"
receivers:
- name: "dump"
elasticsearch:
hosts:
- "http://127.0.0.1:9200"
index: kube-events
indexFormat: "kube-events"
useEventID: true
# 运行 kube.config 是集群的 kubeconfig 文件
go run main.go -conf=config.yaml -kubeconfig=kube.config
5 配置 Grafana ,添加 es datasource
参考:实践K8S-Event
附录
采集event事件的方式有两种:
方式一:发送给 elasticsearch
# 下载 kubernetes-event-exporter
git clone https://github.com/resmoio/kubernetes-event-exporter.git
cd kubernetes-event-exporter
# 配置 configmap
cat deploy/01-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: event-exporter-cfg
namespace: monitoring
data:
config.yaml: |
logLevel: debug
logFormat: json
route:
routes:
- match:
- receiver: "dump"
receivers:
- name: "dump"
elasticsearch:
hosts:
- "http://out_cluster_eaasticsearch:9200"
# 部署
kubectl apply -f deploy/
方式二:将集群事件打印到容器的 stdout 中,通过日志方式来采集
cat deploy/01-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: event-exporter-cfg
namespace: monitoring
data:
config.yaml: |
logLevel: debug
logFormat: json
route:
routes:
- match:
- receiver: "dump"
receivers:
- name: "dump"
stdout:
deDot: true
参考:Kubernetes 高级篇 k8s Event详述及持久化方案-CSDN博客