Skip to content

Commit f95958a

Browse files
misc updates
1 parent f5e38b1 commit f95958a

File tree

12 files changed

+152
-30
lines changed

12 files changed

+152
-30
lines changed

README.md

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,32 @@
11
# Kubernetes event logger
22

3+
<img src="https://raw.githubusercontent.com/max-rocket-internet/k8s-event-logger/master/img/k8s-logo.png" width="100">
4+
5+
This tool simply watches Kubernetes Events and logs them to stdout in JSON to be collected and stored by your logging solution, e.g. [fluentd](https://github.com/fluent/fluentd-kubernetes-daemonset) or [fluent-bit](https://fluentbit.io/). Other tools exist for persisting Kubernetes Events, such as Sysdig, Datadog or Google's [event-exporter](https://github.com/GoogleCloudPlatform/k8s-stackdriver/tree/master/event-exporter) but this tool is open and will work with any logging solution.
6+
37
Events in Kubernetes log very important information. If are trying to understand what happened in the past then these events show clearly what your Kubernetes cluster was thinking and doing. Some examples:
48

59
- Pod events like failed probes, crashes, scheduling related information like `TriggeredScaleUp` or `FailedScheduling`
610
- HorizontalPodAutoscaler events like scaling up and down
711
- Deployment events like scaling in and out of ReplicaSets
812
- Ingress events like create and update
913

10-
The problem is that these events are simply API objects in Kubernetes and are only stored for about 1 hour. This can make debugging a problem in the past very tricky.
14+
The problem is that these events are simply API objects in Kubernetes and are only stored for about 1 hour. Without some way of storing these events, debugging a problem in the past very tricky.
15+
16+
Example of events:
1117

12-
This simple container and [Helm](https://helm.sh/) chart will run in your cluster, watch for events and print them to stdout in JSON. The assumption is that you already have a daemonset for collecting all pod logs and sending them to a central system, e.g. ELK, Splunk, Graylog etc.
18+
```
19+
39m Normal UpdatedLoadBalancer Service Updated load balancer with new hosts
20+
40m Normal SuccessfulDelete DaemonSet Deleted pod: ingress02-nginx-ingress-controller-vqqjp
21+
41m Normal ScaleDown Node node removed by cluster autoscaler
22+
54m Normal Started Pod Started container
23+
55m Normal Starting Node Starting kubelet.
24+
55m Normal Starting Node Starting kube-proxy.
25+
55m Normal NodeAllocatableEnforced Node Updated Node Allocatable limit across pods
26+
55m Normal NodeReady Node Node ip-10-0-23-14.compute.internal status is now: NodeReady
27+
58m Normal SuccessfulCreate DaemonSet Created pod: ingress02-nginx-ingress-controller-bz7xj
28+
58m Normal CREATE ConfigMap ConfigMap default/ingress02-nginx-ingress-controller
29+
```
1330

1431
### Installation
1532

@@ -18,3 +35,5 @@ Use the [Helm](https://helm.sh/) chart:
1835
```
1936
helm install chart/
2037
```
38+
39+
Or user the docker image: `tools4k8s/k8s-event-logger`

chart/Chart.yaml

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,19 @@
11
apiVersion: v1
2-
appVersion: "1.0"
3-
version: 0.1.0
4-
description: Creates deployment that runs a single container to log k8s events to stdout
5-
name: event-logger
2+
appVersion: "1.2"
3+
version: "1.0"
4+
description: A tool to log k8s events to stdout in JSON
5+
home: https://github.com/max-rocket-internet/k8s-event-logger
6+
name: k8s-event-logger
7+
maintainers:
8+
- name: max-rocket-internet
9+
10+
- name: mmingorance-dh
11+
12+
engine: gotpl
13+
icon: https://github.com/kubernetes/kubernetes/raw/master/logo/logo.png
14+
keywords:
15+
- events
16+
- logging
17+
- Auditing
18+
sources:
19+
- https://github.com/max-rocket-internet/k8s-event-logger

chart/OWNERS

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
approvers:
2+
- max-rocket-internet
3+
- mmingorance-dh
4+
reviewers:
5+
- max-rocket-internet
6+
- mmingorance-dh

chart/README.md

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# k8s-event-logger
2+
3+
This chart runs a pod that simply watches Kubernetes Events and logs them to stdout in JSON to be collected and stored by your logging solution, e.g. [fluentd](https://github.com/helm/charts/tree/master/stable/fluentd) or [fluent-bit](https://github.com/helm/charts/tree/master/stable/fluent-bit).
4+
5+
https://github.com/max-rocket-internet/k8s-event-logger
6+
7+
Events in Kubernetes log very important information. If are trying to understand what happened in the past then these events show clearly what your Kubernetes cluster was thinking and doing. Some examples:
8+
9+
- Pod events like failed probes, crashes, scheduling related information like `TriggeredScaleUp` or `FailedScheduling`
10+
- HorizontalPodAutoscaler events like scaling up and down
11+
- Deployment events like scaling in and out of ReplicaSets
12+
- Ingress events like create and update
13+
14+
The problem is that these events are simply API objects in Kubernetes and are only stored for about 1 hour. Without some way of storing these events, debugging a problem in the past very tricky.
15+
16+
## Prerequisites
17+
18+
- Kubernetes 1.8+
19+
20+
## Installing the Chart
21+
22+
To install the chart with the release name `my-release` and default configuration:
23+
24+
```shell
25+
$ helm install --name my-release stable/k8s-event-logger
26+
```
27+
28+
## Uninstalling the Chart
29+
30+
To delete the chart:
31+
32+
```shell
33+
$ helm delete my-release
34+
```
35+
36+
## Configuration
37+
38+
The following table lists the configurable parameters for this chart and their default values.
39+
40+
| Parameter | Description | Default |
41+
| -------------------------|--------------------------------------|--------------------------------------------------------|
42+
| `resources` | Resources for the overprovision pods | `{}` |
43+
| `image.repository` | Image repository | `tools4k8s/k8s-event-logger` |
44+
| `image.tag` | Image tag | `1.2` |
45+
| `image.pullPolicy` | Container pull policy | `IfNotPresent` |
46+
| `affinity` | Map of node/pod affinities | `{}` |
47+
| `nodeSelector` | Node labels for pod assignment | `{}` |
48+
| `annotations` | Optional deployment annotations | `{}` |
49+
| `fullnameOverride` | Override the fullname of the chart | `nil` |
50+
| `nameOverride` | Override the name of the chart | `nil` |
51+
| `tolerations` | Optional deployment tolerations | `[]` |
52+
| `podLabels` | Additional labels to use for pods | `{}` |
53+
| `env.KUBERNETES_API_URL` | URL of the k8s API in your cluster | `https://172.20.0.1:443` |
54+
| `env.CA_FILE` | Path to the service account CA file | `/var/run/secrets/kubernetes.io/serviceaccount/ca.crt` |
55+
| `podLabels` | Additional labels to use for pods | `{}` |
56+
57+
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install` or provide a YAML file containing the values for the above parameters:
58+
59+
```shell
60+
$ helm install --name my-release stable/k8s-event-logger --values values.yaml
61+
```

chart/templates/NOTES.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
To verify that the k8s-event-logger pod has started, run:
2+
3+
kubectl --namespace={{ .Release.Namespace }} get pods -l "app.kubernetes.io/name={{ template "k8s-event-logger.name" . }},app.kubernetes.io/instance={{ .Release.Name }}"

chart/templates/_helpers.tpl

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
{{/*
33
Expand the name of the chart.
44
*/}}
5-
{{- define "event-logger.name" -}}
5+
{{- define "k8s-event-logger.name" -}}
66
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
77
{{- end -}}
88

@@ -11,7 +11,7 @@ Create a default fully qualified app name.
1111
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
1212
If release name contains chart name it will be used as a full name.
1313
*/}}
14-
{{- define "event-logger.fullname" -}}
14+
{{- define "k8s-event-logger.fullname" -}}
1515
{{- if .Values.fullnameOverride -}}
1616
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
1717
{{- else -}}
@@ -27,6 +27,20 @@ If release name contains chart name it will be used as a full name.
2727
{{/*
2828
Create chart name and version as used by the chart label.
2929
*/}}
30-
{{- define "event-logger.chart" -}}
30+
{{- define "k8s-event-logger.chart" -}}
3131
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
3232
{{- end -}}
33+
34+
35+
{{/*
36+
Common labels
37+
*/}}
38+
{{- define "k8s-event-logger.labels" -}}
39+
app.kubernetes.io/name: {{ include "k8s-event-logger.name" . }}
40+
helm.sh/chart: {{ include "k8s-event-logger.chart" . }}
41+
app.kubernetes.io/instance: {{ .Release.Name }}
42+
{{- if .Chart.AppVersion }}
43+
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
44+
{{- end }}
45+
app.kubernetes.io/managed-by: {{ .Release.Service }}
46+
{{- end -}}

chart/templates/clusterrole.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
kind: ClusterRole
22
apiVersion: rbac.authorization.k8s.io/v1beta1
33
metadata:
4-
name: {{ include "event-logger.fullname" . }}
4+
name: {{ include "k8s-event-logger.fullname" . }}
55
labels:
6-
app.kubernetes.io/name: {{ include "event-logger.name" . }}
7-
helm.sh/chart: {{ include "event-logger.chart" . }}
6+
app.kubernetes.io/name: {{ include "k8s-event-logger.name" . }}
7+
helm.sh/chart: {{ include "k8s-event-logger.chart" . }}
88
app.kubernetes.io/instance: {{ .Release.Name }}
99
app.kubernetes.io/managed-by: {{ .Release.Service }}
1010
rules:
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
kind: ClusterRoleBinding
22
apiVersion: rbac.authorization.k8s.io/v1
33
metadata:
4-
name: {{ include "event-logger.fullname" . }}
4+
name: {{ include "k8s-event-logger.fullname" . }}
55
labels:
6-
app.kubernetes.io/name: {{ include "event-logger.name" . }}
7-
helm.sh/chart: {{ include "event-logger.chart" . }}
6+
app.kubernetes.io/name: {{ include "k8s-event-logger.name" . }}
7+
helm.sh/chart: {{ include "k8s-event-logger.chart" . }}
88
app.kubernetes.io/instance: {{ .Release.Name }}
99
app.kubernetes.io/managed-by: {{ .Release.Service }}
1010
roleRef:
1111
apiGroup: rbac.authorization.k8s.io
1212
kind: ClusterRole
13-
name: {{ include "event-logger.fullname" . }}
13+
name: {{ include "k8s-event-logger.fullname" . }}
1414
subjects:
1515
- namespace: {{ .Release.Namespace }}
1616
kind: ServiceAccount
17-
name: {{ include "event-logger.fullname" . }}
17+
name: {{ include "k8s-event-logger.fullname" . }}

chart/templates/deployment.yaml

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,29 @@
11
apiVersion: apps/v1
22
kind: Deployment
33
metadata:
4-
name: {{ include "event-logger.fullname" . }}
4+
name: {{ include "k8s-event-logger.fullname" . }}
55
labels:
6-
app.kubernetes.io/name: {{ include "event-logger.name" . }}
7-
helm.sh/chart: {{ include "event-logger.chart" . }}
8-
app.kubernetes.io/instance: {{ .Release.Name }}
9-
app.kubernetes.io/managed-by: {{ .Release.Service }}
6+
{{ include "k8s-event-logger.labels" . | indent 4 }}
107
spec:
118
replicas: 1
129
selector:
1310
matchLabels:
14-
app.kubernetes.io/name: {{ include "event-logger.name" . }}
11+
app.kubernetes.io/name: {{ include "k8s-event-logger.name" . }}
1512
app.kubernetes.io/instance: {{ .Release.Name }}
1613
template:
1714
metadata:
1815
labels:
19-
app.kubernetes.io/name: {{ include "event-logger.name" . }}
16+
app.kubernetes.io/name: {{ include "k8s-event-logger.name" . }}
2017
app.kubernetes.io/instance: {{ .Release.Name }}
18+
{{- if .Values.podLabels }}
19+
{{ toYaml .Values.podLabels | indent 8 }}
20+
{{- end }}
2121
spec:
22-
serviceAccountName: {{ include "event-logger.fullname" . }}
22+
{{- with .Values.imagePullSecrets }}
23+
imagePullSecrets:
24+
{{- toYaml . | nindent 8 }}
25+
{{- end }}
26+
serviceAccountName: {{ include "k8s-event-logger.fullname" . }}
2327
containers:
2428
- name: app
2529
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"

chart/templates/serviceaccount.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
kind: ServiceAccount
22
apiVersion: v1
33
metadata:
4-
name: {{ include "event-logger.fullname" . }}
4+
name: {{ include "k8s-event-logger.fullname" . }}
55
labels:
6-
app.kubernetes.io/name: {{ include "event-logger.name" . }}
7-
helm.sh/chart: {{ include "event-logger.chart" . }}
6+
app.kubernetes.io/name: {{ include "k8s-event-logger.name" . }}
7+
helm.sh/chart: {{ include "k8s-event-logger.chart" . }}
88
app.kubernetes.io/instance: {{ .Release.Name }}
99
app.kubernetes.io/managed-by: {{ .Release.Service }}

0 commit comments

Comments
 (0)