Skip to content

Runner on Kubernetes registers multiple times

Summary

I'm using Gitlab and Gitlab-Runner on a Kubernetes-Cluster. I've added an entrypoint to the runner to register the Runner on Pod-Startup. Everything works fine. But if I restart the Pod or the Server the runner reregisters itself and neither recognize that it has been registerd before or deletes the previous registration. So I'm stuck with one working runner and one not working runner.

Steps to reproduce

Start a Runner withe the following configuration and scale the Deployment down and up again.

apiVersion: v1
kind: ConfigMap
metadata:
  name: gitlab-kubernetes-runner
  namespace: gitlab-ci
data:
  config.toml: |
    concurrent = 4
    check_interval = 30

  entrypoint: |
    #!/bin/bash

    set -xe
    cp /scripts/config.toml /etc/gitlab-runner/
    

    # Register the runner
    /entrypoint register --non-interactive \
      --url $GITLAB_URL \
      --executor kubernetes \
      --config "/etc/gitlab-runner/config.toml" \
      --locked=false \
      --description "Kubernetes-Runner" \
      --kubernetes-privileged
      

    # Start the runner
    /entrypoint run --user=gitlab-runner \
      --working-directory=/home/gitlab-runner \
      --config "/etc/gitlab-runner/config.toml"
      
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: gitlab-kubernetes-runner
  namespace: gitlab-ci
spec:
  replicas: 1
  selector:
    matchLabels:
      name: gitlab-kubernetes-runner
  template:
    metadata:
      labels:
        name: gitlab-kubernetes-runner
    spec:
      containers:
        - name: gitlab-kubernetes-runner
          image: gitlab/gitlab-runner:v11.4.0
          command: ["/bin/bash", "/scripts/entrypoint"]
          env:
            - name: GITLAB_URL
              value: "https://gitlab.example.org/"
            - name: REGISTRATION_TOKEN
              valueFrom:
                secretKeyRef:
                  name: gitlab-runner
                  key: runner-registration-token
            - name: KUBERNETES_NAMESPACE
              value:gitlab-ci
            - name: KUBERNETES_SERVICE_ACCOUNT
              value: gitlab-ci
            - name: KUBERNETES_BEARER_TOKEN
              valueFrom:
                secretKeyRef:
                  name: gitlab-ci-token***
                  key: token 
          imagePullPolicy: Always
          volumeMounts:
            - name: config
              mountPath: /scripts
      restartPolicy: Always
      volumes:
        - name: config
          configMap:
            name: gitlab-kubernetes-runner
      nodeSelector:
        location: internal

Actual behavior

Runner is registered twice

Expected behavior

Runner should be registred once / old Runners should be deleted

Relevant logs and/or screenshots

runners

+ '[' '!' -f /etc/gitlab-runner/config.toml ']'
+ /entrypoint register --non-interactive --url https://gitlab.example.org/ --executor kubernetes --config /etc/gitlab-runner/config.toml --locked=false --description Kubernetes-Runner --kubernetes-privileged
Runtime platform                                    arch=amd64 os=linux pid=13 revision=8af42251 version=11.4.0
Running in system-mode.                            
                                                   
Registering runner... succeeded                     runner=t4zpxzpu
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! 
+ /entrypoint run --user=gitlab-runner --working-directory=/home/gitlab-runner --config /etc/gitlab-runner/config.toml
Runtime platform                                    arch=amd64 os=linux pid=22 revision=8af42251 version=11.4.0
Starting multi-runner from /etc/gitlab-runner/config.toml ...  builds=0
Running in system-mode.                            
                                                   
Configuration loaded                                builds=0
Listen address not defined, metrics server disabled  builds=0
Listen address not defined, session server disabled  builds=0

Environment description

Kubernetes 1.12.1 on Ubuntu 18.04 Server amd64

Used GitLab Runner version

Docker image: gitlab/gitlab-runner:v11.4.0

Gitlab-Image: gitlab/gitlab-ce:11.4.0-ce.0