Skip to content

deltacodepl/django-helm-chart

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

Django Helm Chart

A generic Django (plus Celery) Helm chart.

Contributions are welcome as merge requests. Please only open issues that you'd like to implement yourself or fund. Do not open support or feature requests. This chart is not intended to cover every use case with Django and Helm. It's a personal project that you are welcome to view and fork. Breaking changes to your workflow may happen at any time and without warning.

Preparing your Django app

This chart supports a web plus optional celery and beat deployments. Be prepared to extend it as necessary.

Django settings will be managed by environment variables. django-environ works well for this and can parse the DATABASE_URL connection string. This chart expects SECRET_KEY and DATABASE_URL variables.

Kubernetes works best when it is able to determine application health. Your Django app should have a /healthz/ view such as

def health(request):
    return HttpResponse("ok", content_type="text/plain")

urlpatterns = [
    path("healthz/", health),
...

Set the value web.livenessProbe.path and web.readinessProbe.path to change the URL.

Run commands

This helm chart will set a "role" environment variable to web, worker, or beat. Your Docker image could read this variable and run the correct command.

Alternatively, set the service.args. For example:

web:
  args:
    - run_it

Remember that Kubernetes "args" are Docker's CMD (or command). Pretty confusing!

Usage

  1. Add our Helm chart repo helm repo add django https://gitlab.com/api/v4/projects/26807467/packages/helm/stable
  2. Review our values.yaml. At a minimum you'll need to set env.secret.SECRET_KEY and env.secret.DATABASE_URL.
  3. Install the chart helm install your-app django/django -f your-values.yml

Tips

  • Use helm diff. One typo will wipe your app without warning otherwise.
  • Stateful services like PostgreSQL in kubernetes are only partially supported. There is no clean way to run major upgrades. I don't recommend using them.
  • Fork instead of using this directly.

Managing environment variables and secrets

I suggest either

  • Keep them in a values.yml file in a private repo
  • Make use of --reuse-values and --set
  • Keep them in a non helm chart managed service

Deploying in CI

I use alpine/helm with Gitlab CI. Example.

Support development

Maintaining this chart takes time. Considering supporting it by

Commercial support is available - email [email protected]