GitLab Runner với Docker Executor trên Kubernetes
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 | bashkubectl: 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/installoc: 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
Vào GitLab:
Truy cập Settings > CI/CD > Runners.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
emptyDirbằngPersistentVolumeClaim.
- Nếu cần lưu trữ lâu dài, thay
Bảo Mật:
- Luôn bảo mật
runnerRegistrationTokenbằng cách sử dụng Kubernetes Secrets thay vì lưu trực tiếp trong filevalues.yaml.
- Luôn bảo mật
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