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