k8s github
Jump toUpdate content

Using the GitLab Kubernetes extension

Reviewed on 17 November 2022Published on 09 June 2020
  • compute
  • object-storage
  • reverse
  • proxy
  • application
  • GitLab
  • Kubernetes

GitLab Kubernetes integration - Overview

GitLab provides a built-in Kubernetes Integration that allows you to build, test, deploy, and run your app at scale.

In this tutorial you will learn how to use the gitlab Kubernetes integration using a Scaleway Instance. The instance will be deployed using the Scaleway gitlab InstantApp.

Security & Identity (IAM):

You may need certain IAM permissions to carry out some actions described on this page. This means:

  • you are the Owner of the Scaleway Organization in which the actions will be carried out, or
  • you are an IAM user of the Organization, with a policy granting you the necessary permission sets

Configuring GitLab runner using Helm charts

Installing helm

In this tutorial we use helm to deploy a gitlab runner on a Kapsule cluster. If you do not know how to install helm, please follow the tutorial on the official helm website. On the example below we have successfully installed helm version 3.2.0

helm version
version.BuildInfo{Version:"v3.2.0", GitCommit:"e11b7ce3b12db2941e90399e874513fbd24bcb71", GitTreeState:"clean", GoVersion:"go1.13.10"}

The helm charts are provided through repositories. By default helm 3 does not have any repository configured. We will add the gitlab repository, as it provides the necessary chart to install the runner.

helm repo add gitlab https://charts.gitlab.io
"gitlab" has been added to your repositories
helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "gitlab" chart repository
Update Complete. ⎈ Happy Helming!⎈

Installing GitLab runners using Helm

A helm chart is always shipped with a value.yaml file. It can be edited to customize the deployement of the application. In this part of the tutorial we customize the value.yaml to fit our needs and deploy the runner on kapsule.

  1. Get the value.yaml :

    wget https://gitlab.com/gitlab-org/charts/gitlab-runner/-/raw/main/values.yaml

    Each gitlab runner needs a registration token to register on the gitlab server. Retrieve the registration token from the GitLab web interface (“Admin Area” > “Runners”):

  2. Fill the value.yaml with :

    • the gitlabUrl (in our case
    • the registration token
    • enable rbac

    By default, the gitlabUrl and the registration token lines are written out as a comment in the values.yamlfile. Make sure you have deleted the # before saving.

    runnerRegistrationToken: "t7u_qjh3EFJX2-yPypkz"
    create: true
    serviceAccountName: default

    We will use a dedicated namespace.

  3. To install the gitlab runner, create it on your Kapsule cluster:

    kubectl create ns gitlab-runner
    namespace/gitlab-runner created

    The default service account should use a new kubernetes role, and rolebinding.

  4. Use the following example to create a role and role binding and associate it to the default service account in the gitlab-runner namespace :

    cat <<EOF | kubectl create -f -
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    name: gitlab-runner
    namespace: gitlab-runner
    - apiGroups: [""]
    resources: ["pods"]
    verbs: ["list", "get", "watch", "create", "delete"]
    - apiGroups: [""]
    resources: ["pods/exec"]
    verbs: ["create"]
    - apiGroups: [""]
    resources: ["pods/log"]
    verbs: ["get"]
    kubectl create rolebinding --namespace=gitlab-runner gitlab-runner-binding --role=gitlab-runner --serviceaccount=gitlab-runner:default
  5. Use the helm command to install the runner (note that you specify in this command line the values.yaml file) :

    helm install --namespace gitlab-runner gitlab-runner -f ./values.yaml gitlab/gitlab-runner
    NAME: gitlab-runner
    LAST DEPLOYED: Wed May 6 15:48:20 2020
    NAMESPACE: gitlab-runner
    STATUS: deployed
    TEST SUITE: None
    Your GitLab Runner should now be registered against the GitLab instance reachable at: ""

    You can check the runner is working in the gitlab console (“admin area” > runners):

Running a pipepline in the runner using a test app

To demonstrate that the runner is working, we create a repository with a “hello world” piece of code written in python.

  1. Create the files using a text editor of your choice (e.g. nano or vim). In this tutorial, we use nano.
    nano helloworld.py
  2. Create the content of the file as follows, save and exit:
    print("Hello, World!")
  3. Create an associated gitlab-ci file to check it is running in the runner we just deployed:
    nano .gitlab-ci.yaml
  4. Create the content of the file as follows, save and exit:
    image: ubuntu
    - apt-get update && apt-get install python3
    - python3 helloworld.py
  5. Push the repository and an ubuntu container is launched. At first apt is updated and python3 is installed, and then the “hello, world” script is launched in the terminal.

If you want to learn more about running a gitlab runner on Kubernetes you can also check the gitlab-ci official documentation