Skip to main content

Command Palette

Search for a command to run...

GitLab Runner với Docker Executor trên Kubernetes

Published
•4 min read•View as Markdown

Dưới đây là hướng dẫn chi tiết để triển khai GitLab Runner với Docker Executor trên Kubernetes (K8s), Amazon EKS, và Red Hat OpenShift (OCP). Hướng dẫn này hỗ trợ cả AMD64 và ARM64.


1. Yêu Cầu Chuẩn Bị

1.1. Cài Đặt Công Cụ Cần Thiết

  • Helm: Trình quản lý package cho Kubernetes.

      # Cài đặt Helm (nếu chưa có)
      curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
    
  • kubectl: CLI để tương tác với Kubernetes cluster.

      # Cài đặt kubectl (nếu chưa có)
      curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
      chmod +x kubectl && sudo mv kubectl /usr/local/bin/
    
  • AWS CLI: Nếu triển khai trên Amazon EKS.

      # Cài đặt AWS CLI (nếu chưa có)
      curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
      unzip awscliv2.zip && sudo ./aws/install
    
  • oc: CLI cho OpenShift (nếu triển khai trên OCP).

      # Cài đặt OpenShift CLI (oc)
      wget https://mirror.openshift.com/pub/openshift-v4/clients/oc/latest/linux/oc.tar.gz
      tar -xzf oc.tar.gz && sudo mv oc /usr/local/bin/
    

1.2. Kết Nối tới Cluster

  • Kubernetes Cluster:

      kubectl config use-context <your-k8s-context>
    
  • Amazon EKS:

      aws eks --region <region> update-kubeconfig --name <eks-cluster-name>
    
  • OpenShift Cluster:

      oc login https://<openshift-cluster-url> -u <username> -p <password>
    

2. Tạo Namespace cho GitLab Runner

Tạo namespace để triển khai GitLab Runner:

kubectl create namespace gitlab-runner

3. Thêm Helm Repository của GitLab

helm repo add gitlab https://charts.gitlab.io/
helm repo update

4. Tạo File values.yaml

Tạo file values.yaml để cấu hình GitLab Runner cho Docker Executor trên cả AMD64 và ARM64.

Cấu Hình values.yaml

image:
  name: gitlab/gitlab-runner
  tag: latest
  pullPolicy: IfNotPresent

gitlabUrl: "https://gitlab.example.com/"  # Thay bằng URL GitLab của bạn

runnerRegistrationToken: "YOUR_REGISTRATION_TOKEN"  # Thay bằng token đăng ký của bạn

concurrent: 10
checkInterval: 30

runners:
  image: docker:latest
  privileged: true
  config: |
    [[runners]]
      name = "docker-runner"
      url = "https://gitlab.example.com/"
      token = "YOUR_REGISTRATION_TOKEN"
      executor = "docker"
      state_file = "/etc/gitlab-runner/.runner_system_id"
      [runners.docker]
        image = "ubuntu:16.04"
        privileged = true
        volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock"]

securityContext:
  runAsUser: 0
  runAsNonRoot: false

rbac:
  create: true

serviceAccount:
  create: true
  name: gitlab-runner-docker

# Volume để lưu trữ state_file
volumes:
  - name: gitlab-runner-state
    emptyDir: {}

volumeMounts:
  - name: gitlab-runner-state
    mountPath: /etc/gitlab-runner

Lưu ý:

  • gitlabUrl: URL của GitLab instance của bạn.

  • runnerRegistrationToken: Token đăng ký GitLab Runner lấy từ GitLab > Settings > CI/CD > Runners.

  • securityContext: Cấu hình để chạy với quyền root (cần thiết cho Docker Executor).


5. Triển Khai GitLab Runner

5.1. Dành cho Kubernetes và EKS

helm install gitlab-runner gitlab/gitlab-runner -f values.yaml --namespace gitlab-runner

5.2. Dành cho OpenShift (OCP)

Trên OpenShift, cần cấp quyền bổ sung để cho phép chạy container ở chế độ privileged:

oc adm policy add-scc-to-user privileged -z gitlab-runner-docker -n gitlab-runner
helm install gitlab-runner gitlab/gitlab-runner -f values.yaml --namespace gitlab-runner

6. Kiểm Tra Triển Khai

6.1. Kiểm Tra Pod

kubectl get pods -n gitlab-runner

Kết quả mong đợi:

NAME                                                  READY   STATUS    RESTARTS   AGE
gitlab-runner-docker-7d77685fb5-w97gp                1/1     Running   0          1m

6.2. Kiểm Tra Logs

kubectl logs -f <gitlab-runner-pod-name> -n gitlab-runner

7. Xác Minh Trên GitLab

  1. Vào GitLab:
    Truy cập Settings > CI/CD > Runners.

  2. Kiểm Tra Runner:
    Bạn sẽ thấy Runner mới đã đăng ký và sẵn sàng nhận job.


8. Gỡ Bỏ GitLab Runner

Nếu bạn cần gỡ bỏ GitLab Runner:

helm uninstall gitlab-runner --namespace gitlab-runner
kubectl delete namespace gitlab-runner

9. Lưu Ý và Tối Ưu Hóa

  • Hỗ Trợ AMD64 và ARM64:

    • Đảm bảo node trong cluster của bạn hỗ trợ kiến trúc AMD64 hoặc ARM64 phù hợp.

    • Sử dụng image Docker phù hợp với kiến trúc của node.

  • Persistent Storage:

    • Nếu cần lưu trữ lâu dài, thay emptyDir bằng PersistentVolumeClaim.
  • Bảo Mật:

    • Luôn bảo mật runnerRegistrationToken bằng cách sử dụng Kubernetes Secrets thay vì lưu trực tiếp trong file values.yaml.
    kubectl create secret generic gitlab-runner-secret --from-literal=runnerRegistrationToken=YOUR_REGISTRATION_TOKEN --namespace gitlab-runner

Cập nhật values.yaml để sử dụng Secret:

    runnerRegistrationToken:
      existingSecret: gitlab-runner-secret
      key: runnerRegistrationToken

Tham Khảo Thêm

More from this blog

Devops

39 posts