Kubernetes deployment with spark-k8s-deployer

In order to simplify the deployment of applications into Kubernetes clusters (which we use extensively!), we use a custom-built container image that provides:

  • Gitlab CI templates and fragments
  • common tools
  • utility scripts

The deployment scripts also provide a handy setup for helm, which is already connected to the SparkFabrik helm charts registry.

Tools

  • Cloud vendor CLIs
    • Google Cloud SDK
    • AWS CLI
  • Deployment and containers management tools
    • docker / docker-compose / buildx
    • kubectl
    • helm
    • flux

How to use it

(Note: describing the syntax of Gitlab CI pipelines is out of scope, here)

When you create Gitlab CI pipelines for one of our projects, you can take advantage of the templates available from spark-k8s-deployer. Some of them can be seen as general-purpose templates: you just need to include them, and create your deployment jobs invoking the scripts, maybe passing several environment variables. This is the most common use of the image, but you can also look at more elaborate templates, that are available and self-documented (look at comments in the templates) in the spark-k8s-deployer repository.

Granting access to the development and review enviroment to members of the team

The deployment scripts provided by the image (specifically the helm3-init script) allow to set several environment variables, useful to set RBAC permissions to team members, or to the team itself. Please read the documentation about those variables inside the general-purpose template

Examples

Let's start with the most general-purpose template…

# Use the template
include:
  - remote: "https://raw.githubusercontent.com/sparkfabrik/spark-k8s-deployer/master/templates/.gitlab-ci-template.yml"

stages:
  - deploy

develop-deploy:
  stage: deploy
  variables:
    KUBE_NAMESPACE: test-spark-k8s-deployer
    SPARK_PRJ_VENDOR: test-spark-k8s-deployer
    CI_DOMAIN: ci.sparkfabrik.cloud
    CI_ENVIRONMENT_BASE_URL: ${CI_COMMIT_REF_SLUG}.site.${SPARK_PRJ_VENDOR}.${CI_DOMAIN}
  environment:
    name: ${CI_COMMIT_REF_SLUG}/test-spark-k8s-deployer
    url: https://${CI_ENVIRONMENT_BASE_URL}
  script:
    # Init
    - command /scripts/helm3-init
    # Install application using an helm chart from our repository
    - helm upgrade --install nginx sparkfabrik/nginx
      --version 5.0.0
      --set image=some.container.registry.io/some-nginx-image
      --namespace ${KUBE_NAMESPACE}
      --wait
  only:
    - develop

This example should work out-of-the-box if you use an NGINX image suitable for use with our Helm chart.

Last updated on 28 Nov 2023