Helm – Eigene Anwendung
Deployment einer eigenen Python-Anwendung (rolldice) als Helm Chart inklusive CI/CD-Pipeline mit GitHub Actions.
Die Anwendung
app.py – minimale Flask-App, die einen Würfelwurf simuliert:
from random import randint
from flask import Flask, request
import logging
app = Flask(__name__)
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
@app.route("/rolldice")
def roll_dice():
player = request.args.get('player', default=None, type=str)
result = str(roll())
if player:
logger.warning("%s is rolling the dice: %s", player, result)
else:
logger.warning("Anonymous player is rolling the dice: %s", result)
return result
@app.route("/")
def healthz():
return "ok"
def roll():
return randint(1, 6)
Dockerfile:
FROM python:3.13.13-slim-trixie
ADD requirements.txt /tmp/requirements.txt
RUN pip install -r /tmp/requirements.txt
RUN mkdir -p /app
ADD app.py /app
WORKDIR /app
CMD ["flask", "run", "--host=0.0.0.0", "--port=80"]
Helm Chart deployen
cd ~/kubernetes-tutorial/src/apps/rolldice/helm
helm template rolldice/ # Manifeste prüfen
helm install rolldice/ --generate-name
helm ls
kubectl get all -l app.kubernetes.io/name=rolldice
kubectl logs -l app.kubernetes.io/name=rolldice
Upgrade
# appVersion in Chart.yaml erhöhen (z.B. auf 1.0.1)
helm upgrade rolldice-[id] rolldice/
kubectl get all -l app.kubernetes.io/name=rolldice
# Image-Tag direkt setzen
helm upgrade rolldice-[id] rolldice/ --set image.tag=1.0.4
kubectl get pod/rolldice-[id] -o yaml | yq .spec.containers[].image
Chart als OCI-Package veröffentlichen
docker login # mit Schreibrechten (PAT)
helm package rolldice/
helm push rolldice-0.1.0.tgz oci://registry-1.docker.io/trutzio
GitHub Actions Pipeline
.github/workflows/docker.yaml:
name: Docker Image CI
on:
push:
tags:
- 'v*.*.*'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Docker Image and Tags
id: meta
uses: docker/metadata-action@v6
with:
images: trutzio/rolldice
tags: |
type=semver,pattern=
type=semver,pattern=.
type=semver,pattern=
- uses: docker/setup-buildx-action@v4
- uses: docker/login-action@v4
with:
username: $
password: $
- uses: docker/build-push-action@v7
with:
tags: $
labels: $
context: "src/apps/rolldice/"
push: true
git tag v1.0.0
git push origin --tags
# Pipeline in GitHub Actions beobachten
Images unter: https://hub.docker.com/r/trutzio/rolldice/tags