Skip to main content

Kubetools is a tool and processes for developing and deploying microservices to Kubernetes.

Project description

Build Status Pypi Version Python Versions

Kubetools

Kubetools is a tool and processes for developing and deploying microservices to Kubernetes. Say that:

  • You have a bunch of repositories, each containing one or more microservices
  • You want to deploy each of these microservices into one or more Kubernetes clusters
  • You want a single configuration file per project (repository)

And you would like:

  • Development setup should be near-instant - and not require specific K8s knowledge
  • Deployment to production can be automated - and integrated with existing CI tooling

Kubetools provides the tooling required to achieve this, by way of two CLI tools:

  • ktd: generates 100% local development environments using Docker/docker-compose
  • kubetools: deploys projects to Kubernetes, handling any changes/jobs as required

Both of these use a single configuration file, kubetools.yml, for example a basic django app:

name: my-app

containerContexts:
  django_app:
    build:
      registry: my-registry.net
      dockerfile: Dockerfile
    dev:
      volumes:
        - ./:/opt/django_app

upgrades:
  - name: Upgrade database
    containerContext: django_app
    command: [./manage.py, migrate, --noinput]

tests:
  - name: Nosetests
    containerContext: django_app
    command: [./manage.py, test]

deployments:
  my-app-webserver:
    serviceAccountName: webserver
    secrets:
      secret-volume:
        mountPath: /mnt/secrets-store
        secretProviderClass: webserver-secrets
    containers:
      uwsgi:
        command: [uwsgi, --ini, /etc/uwsgi.conf]
        containerContext: django_app
        ports:
          - 80
        dev:
          command: [./manage.py, runserver, '0.0.0.0:80']

dependencies:
  mariadb:
    containers:
      mariadb:
        image: mariadb:v10.4.1

cronjobs:
  my-cronjob:
    batch-api-version: 'batch/v1beta1'  # Must add if k8s version < 1.21+
    schedule: "*/1 * * * *"
    concurrency_policy: "Replace"
    containers:
      hello:
        image: busybox
        command: [/bin/sh, -c, date; echo Hello from the Kubernetes cluster]

With this in your current directory, you can now:

# Bring up a local development environment using docker-compose
ktd up

# Deploy the project to a Kubernetes namespace
kubetools deploy my-namespace

Installing

pip install kubetools

Configuration

Users can configure some aspects of kubetools. The configuration folder location depends on the operating system of the user. See the Click documentation to find the appropriate one for you. Note that we use the "POSIX" version (for example ~/.kubetools/ on Unix systems).

  • kubetools.conf contains key-value settings, see settings.py for the possible settings and their meaning.
  • scripts/ can contain scripts to be made available to ktd script command

Developing

Install the package in editable mode, with the dev extras:

pip install -e .[dev]

Releasing (admins/maintainers only)

  • Update CHANGELOG to add new version and document it
  • In GitHub, create a new release
    • Title the release v<version> (for example v1.2.3)
    • Select to create a new tag v<version> against master branch
    • Copy changes in the release from CHANGELOG.md into the release description
    • GitHub Actions will package the release and publish it to Pypi

Mounting K8s Secrets

We assume that ServiceAccount and SecretProviderClass are already created (if needed), before deploying the project with kubetools.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kubetools-13.11.0.tar.gz (49.9 kB view hashes)

Uploaded Source

Built Distribution

kubetools-13.11.0-py3-none-any.whl (60.4 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page