Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,4 @@ build/

### VS Code ###
.vscode/
helm/log-processing-system/charts/
6 changes: 6 additions & 0 deletions helm/log-processing-system/Chart.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
dependencies:
- name: kafka
repository: https://charts.bitnami.com/bitnami
version: 26.11.4
digest: sha256:87111fdf138f01f0002710f56323e9b1e0d9af86a2e93cdefae413b18a914ac3
generated: "2026-02-21T20:34:21.108607762+01:00"
12 changes: 12 additions & 0 deletions helm/log-processing-system/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
apiVersion: v2
name: log-processing-system
description: Kafka log processing CLI tool
type: application
version: 0.1.0
appVersion: "0.1.0"

dependencies:
- name: kafka
version: "26.x.x"
repository: "https://charts.bitnami.com/bitnami"
condition: kafka.enabled
45 changes: 45 additions & 0 deletions helm/log-processing-system/templates/NOTES.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
log-processing-system {{ .Chart.AppVersion }} deployed successfully
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Kafka bootstrap servers:
{{ include "log-processing-system.kafkaBootstrapServers" . }}

Topics pre-created:
{{- range .Values.topics }}
• {{ .name }} ({{ .partitions }} partitions, replication factor {{ .replicationFactor }})
{{- end }}

── Run commands ────────────────────────────────────────

Exec into the CLI pod:

kubectl exec -it deploy/{{ include "log-processing-system.fullname" . }} -- \
java -jar /app/klog.jar health

Check health:

kubectl exec deploy/{{ include "log-processing-system.fullname" . }} -- \
java -jar /app/klog.jar health \
-b {{ include "log-processing-system.kafkaBootstrapServers" . }} \
-t {{ (index .Values.topics 0).name }} \
--json

Generate test logs:

kubectl exec deploy/{{ include "log-processing-system.fullname" . }} -- \
java -jar /app/klog.jar generate \
-b {{ include "log-processing-system.kafkaBootstrapServers" . }} \
-t {{ (index .Values.topics 0).name }} \
-c 100 -i 500

View metrics:

kubectl exec deploy/{{ include "log-processing-system.fullname" . }} -- \
java -jar /app/klog.jar metrics

── Logs ────────────────────────────────────────────────

kubectl logs deploy/{{ include "log-processing-system.fullname" . }}
kubectl logs deploy/{{ include "log-processing-system.fullname" . }} -c wait-for-kafka
kubectl logs deploy/{{ include "log-processing-system.fullname" . }} -c create-topics
71 changes: 71 additions & 0 deletions helm/log-processing-system/templates/_helpers.tpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "log-processing-system.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}

{{/*
Create a default fully qualified app name.
*/}}
{{- define "log-processing-system.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}

{{/*
Chart label — name + version.
*/}}
{{- define "log-processing-system.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}

{{/*
Common labels applied to every resource.
*/}}
{{- define "log-processing-system.labels" -}}
helm.sh/chart: {{ include "log-processing-system.chart" . }}
{{ include "log-processing-system.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}

{{/*
Selector labels (used in matchLabels and pod template labels).
*/}}
{{- define "log-processing-system.selectorLabels" -}}
app.kubernetes.io/name: {{ include "log-processing-system.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}

{{/*
Service account name
*/}}
{{- define "log-processing-system.serviceAccountName" -}}
{{- if .Values.serviceAccount.create }}
{{- default (include "log-processing-system.fullname" .) .Values.serviceAccount.name }}
{{- else }}
{{- default "default" .Values.serviceAccount.name }}
{{- end }}
{{- end }}

{{/*
Kafka bootstrap servers
*/}}
{{- define "log-processing-system.kafkaBootstrapServers" -}}
{{- if .Values.kafka.enabled }}
{{- printf "%s-kafka:9092" .Release.Name }}
{{- else }}
{{- .Values.externalKafka.bootstrapServers }}
{{- end }}
{{- end }}
10 changes: 10 additions & 0 deletions helm/log-processing-system/templates/configmap.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "log-processing-system.fullname" . }}-config
labels:
{{- include "log-processing-system.labels" . | nindent 4 }}
data:
KAFKA_BOOTSTRAP_SERVERS: {{ include "log-processing-system.kafkaBootstrapServers" . | quote }}
KAFKA_HEALTH_TIMEOUT_SECONDS: {{ .Values.healthCheck.timeoutSeconds | quote }}
KAFKA_TOPICS: {{ range $i, $t := .Values.topics }}{{ if $i }},{{ end }}{{ $t.name }}{{ end }}
145 changes: 145 additions & 0 deletions helm/log-processing-system/templates/deployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "log-processing-system.fullname" . }}
labels:
{{- include "log-processing-system.labels" . | nindent 4 }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
{{- include "log-processing-system.selectorLabels" . | nindent 6 }}
template:
metadata:
labels:
{{- include "log-processing-system.selectorLabels" . | nindent 8 }}
{{- with .Values.podAnnotations }}
annotations:
{{- toYaml . | nindent 8 }}
{{- end }}
spec:
serviceAccountName: {{ include "log-processing-system.serviceAccountName" . }}

{{- with .Values.podSecurityContext }}
securityContext:
{{- toYaml . | nindent 8 }}
{{- end }}

initContainers:
# 1. Wait for Kafka to be healthy before doing anything else
- name: wait-for-kafka
image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
imagePullPolicy: {{ .Values.image.pullPolicy }}
command:
- sh
- -c
- |
echo "Waiting for Kafka to be healthy..."
until java -jar /app/log-processing-system.jar health \
-b "$KAFKA_BOOTSTRAP_SERVERS" \
-t "$KAFKA_TOPICS" \
--timeout "$KAFKA_HEALTH_TIMEOUT_SECONDS" > /dev/null 2>&1; do
echo " Kafka not ready — retrying in 5s..."
sleep 5
done
echo "Kafka is ready."
envFrom:
- configMapRef:
name: {{ include "log-processing-system.fullname" . }}-config
{{- with .Values.securityContext }}
securityContext:
{{- toYaml . | nindent 12 }}
{{- end }}

# 2. Create required topics
- name: create-topics
image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
imagePullPolicy: {{ .Values.image.pullPolicy }}
command:
- sh
- -c
- |
{{- range .Values.topics }}
echo "Creating topic '{{ .name }}'..."
java -jar /app/log-processing-system.jar topic create \
-b "$KAFKA_BOOTSTRAP_SERVERS" \
-n "{{ .name }}" \
-p {{ .partitions }} || echo "Topic '{{ .name }}' may already exist — continuing."
{{- end }}
echo "Topic initialisation complete."
envFrom:
- configMapRef:
name: {{ include "log-processing-system.fullname" . }}-config
{{- with .Values.securityContext }}
securityContext:
{{- toYaml . | nindent 12 }}
{{- end }}
containers:
- name: klog
image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
imagePullPolicy: {{ .Values.image.pullPolicy }}
command: {{ toJson .Values.command }}
envFrom:
- configMapRef:
name: {{ include "log-processing-system.fullname" . }}-config

{{- with .Values.securityContext }}
securityContext:
{{- toYaml . | nindent 12 }}
{{- end }}

{{- with .Values.resources }}
resources:
{{- toYaml . | nindent 12 }}
{{- end }}

livenessProbe:
exec:
command:
- java
- -jar
- /app/log-processing-system.jar
- health
- -b
- $(KAFKA_BOOTSTRAP_SERVERS)
- -t
- $(KAFKA_TOPICS)
- --timeout
- $(KAFKA_HEALTH_TIMEOUT_SECONDS)
initialDelaySeconds: 15
periodSeconds: 30
failureThreshold: 3
timeoutSeconds: 10

readinessProbe:
exec:
command:
- java
- -jar
- /app/log-processing-system.jar
- health
- -b
- $(KAFKA_BOOTSTRAP_SERVERS)
- -t
- $(KAFKA_TOPICS)
- --timeout
- $(KAFKA_HEALTH_TIMEOUT_SECONDS)
initialDelaySeconds: 10
periodSeconds: 15
failureThreshold: 2
timeoutSeconds: 10

{{- with .Values.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}

{{- with .Values.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}

{{- with .Values.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}
12 changes: 12 additions & 0 deletions helm/log-processing-system/templates/serviceaccount.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{{- if .Values.serviceAccount.create -}}
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ include "log-processing-system.serviceAccountName" . }}
labels:
{{- include "log-processing-system.labels" . | nindent 4 }}
{{- with .Values.serviceAccount.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- end }}
Loading