Skip to content

Commit 7e9cfa3

Browse files
Initial commit
1 parent 7a743a3 commit 7e9cfa3

13 files changed

+266
-0
lines changed

Dockerfile

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
FROM fluent/fluentd:v1.3.3-debian-1.0
2+
3+
USER root
4+
WORKDIR /home/fluent
5+
ENV PATH /fluentd/vendor/bundle/ruby/2.3.0/bin:$PATH
6+
ENV GEM_PATH /fluentd/vendor/bundle/ruby/2.3.0
7+
ENV GEM_HOME /fluentd/vendor/bundle/ruby/2.3.0
8+
# skip runtime bundler installation
9+
ENV FLUENTD_DISABLE_BUNDLER_INJECTION 1
10+
11+
COPY ./conf/Gemfile /fluentd/
12+
13+
RUN buildDeps="sudo make gcc g++ libc-dev ruby-dev libffi-dev" \
14+
&& apt-get update \
15+
&& apt-get upgrade -y \
16+
&& apt-get install \
17+
-y --no-install-recommends \
18+
$buildDeps net-tools libjemalloc1 \
19+
&& gem install bundler --version 1.16.2 \
20+
&& bundle config silence_root_warning true \
21+
&& bundle install --gemfile=/fluentd/Gemfile --path=/fluentd/vendor/bundle \
22+
&& SUDO_FORCE_REMOVE=yes \
23+
apt-get purge -y --auto-remove \
24+
-o APT::AutoRemove::RecommendsImportant=false \
25+
$buildDeps \
26+
&& rm -rf /var/lib/apt/lists/* \
27+
&& gem sources --clear-all \
28+
&& rm -rf /tmp/* /var/tmp/* /usr/lib/ruby/gems/*/cache/*.gem
29+
30+
# Copy configuration files
31+
COPY ./conf/fluent.conf /fluentd/etc/
32+
RUN touch /fluentd/etc/disable.conf
33+
COPY ./conf/entrypoint.sh /fluentd/entrypoint.sh
34+
35+
# Environment variables
36+
ENV FLUENTD_OPT=""
37+
ENV FLUENTD_CONF="fluent.conf"
38+
39+
# See https://packages.debian.org/stretch/amd64/libjemalloc1/filelist
40+
ENV LD_PRELOAD="/usr/lib/x86_64-linux-gnu/libjemalloc.so.1"
41+
42+
# Overwrite ENTRYPOINT to run fluentd as root for /var/log / /var/lib
43+
ENTRYPOINT ["tini", "--", "/fluentd/entrypoint.sh"]

README.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Kubernetes event logger
2+
3+
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:
4+
5+
- Pod events like failed probes, crashes, scheduling related information like `TriggeredScaleUp` or `FailedScheduling`
6+
- HorizontalPodAutoscaler events like scaling up and down
7+
- Deployment events like scaling in and out of ReplicaSets
8+
- Ingress events like create and update
9+
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.
11+
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.
13+
14+
It's based on work in these 2 repositories:
15+
16+
- https://github.com/splunk/fluent-plugin-kubernetes-objects
17+
- https://github.com/fluent/fluentd-kubernetes-daemonset
18+
19+
### Installation
20+
21+
Use the [Helm](https://helm.sh/) chart:
22+
23+
```
24+
helm install chart/
25+
```

chart/.helmignore

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Patterns to ignore when building packages.
2+
# This supports shell glob matching, relative path matching, and
3+
# negation (prefixed with !). Only one pattern per line.
4+
.DS_Store
5+
# Common VCS dirs
6+
.git/
7+
.gitignore
8+
.bzr/
9+
.bzrignore
10+
.hg/
11+
.hgignore
12+
.svn/
13+
# Common backup files
14+
*.swp
15+
*.bak
16+
*.tmp
17+
*~
18+
# Various IDEs
19+
.project
20+
.idea/
21+
*.tmproj
22+
.vscode/

chart/Chart.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
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

chart/templates/_helpers.tpl

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{{/* vim: set filetype=mustache: */}}
2+
{{/*
3+
Expand the name of the chart.
4+
*/}}
5+
{{- define "event-logger.name" -}}
6+
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
7+
{{- end -}}
8+
9+
{{/*
10+
Create a default fully qualified app name.
11+
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
12+
If release name contains chart name it will be used as a full name.
13+
*/}}
14+
{{- define "event-logger.fullname" -}}
15+
{{- if .Values.fullnameOverride -}}
16+
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
17+
{{- else -}}
18+
{{- $name := default .Chart.Name .Values.nameOverride -}}
19+
{{- if contains $name .Release.Name -}}
20+
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
21+
{{- else -}}
22+
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
23+
{{- end -}}
24+
{{- end -}}
25+
{{- end -}}
26+
27+
{{/*
28+
Create chart name and version as used by the chart label.
29+
*/}}
30+
{{- define "event-logger.chart" -}}
31+
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
32+
{{- end -}}

chart/templates/clusterrole.yaml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
kind: ClusterRole
2+
apiVersion: rbac.authorization.k8s.io/v1beta1
3+
metadata:
4+
name: {{ include "event-logger.fullname" . }}
5+
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 }}
10+
rules:
11+
- apiGroups: [""]
12+
resources: ["events"]
13+
verbs: ["get", "list", "watch"]
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
kind: ClusterRoleBinding
2+
apiVersion: rbac.authorization.k8s.io/v1
3+
metadata:
4+
name: {{ include "event-logger.fullname" . }}
5+
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 }}
10+
roleRef:
11+
apiGroup: rbac.authorization.k8s.io
12+
kind: ClusterRole
13+
name: {{ include "event-logger.fullname" . }}
14+
subjects:
15+
- namespace: {{ .Release.Namespace }}
16+
kind: ServiceAccount
17+
name: {{ include "event-logger.fullname" . }}

chart/templates/deployment.yaml

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: {{ include "event-logger.fullname" . }}
5+
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 }}
10+
spec:
11+
replicas: 1
12+
selector:
13+
matchLabels:
14+
app.kubernetes.io/name: {{ include "event-logger.name" . }}
15+
app.kubernetes.io/instance: {{ .Release.Name }}
16+
template:
17+
metadata:
18+
labels:
19+
app.kubernetes.io/name: {{ include "event-logger.name" . }}
20+
app.kubernetes.io/instance: {{ .Release.Name }}
21+
spec:
22+
serviceAccountName: {{ include "event-logger.fullname" . }}
23+
containers:
24+
- name: app
25+
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
26+
imagePullPolicy: {{ .Values.image.pullPolicy }}
27+
env:
28+
{{- range $key, $value := .Values.env }}
29+
- name: {{ $key }}
30+
value: {{ $value | quote }}
31+
{{- end }}
32+
resources:
33+
{{- toYaml .Values.resources | nindent 12 }}
34+
{{- with .Values.nodeSelector }}
35+
nodeSelector:
36+
{{- toYaml . | nindent 8 }}
37+
{{- end }}
38+
{{- with .Values.affinity }}
39+
affinity:
40+
{{- toYaml . | nindent 8 }}
41+
{{- end }}
42+
{{- with .Values.tolerations }}
43+
tolerations:
44+
{{- toYaml . | nindent 8 }}
45+
{{- end }}

chart/templates/serviceaccount.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
kind: ServiceAccount
2+
apiVersion: v1
3+
metadata:
4+
name: {{ include "event-logger.fullname" . }}
5+
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 }}

chart/values.yaml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
image:
2+
repository: deliveryherotech/k8s-event-logger
3+
tag: "1.0"
4+
pullPolicy: IfNotPresent
5+
6+
resources:
7+
requests:
8+
cpu: 10m
9+
memory: 32Mi
10+
limits:
11+
cpu: 100m
12+
memory: 128Mi
13+
14+
env:
15+
KUBERNETES_API_URL: https://172.20.0.1:443
16+
CA_FILE: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
17+
18+
19+
nameOverride: ""
20+
fullnameOverride: ""
21+
nodeSelector: {}
22+
tolerations: []
23+
affinity: {}

0 commit comments

Comments
 (0)