[DevOps] Kubernetes Executor 기반 GitLab CI/CD
Gitlab CI/CD를 K8S 클러스터에 통합하는 과정, AKS(Azure Kubernetes Service) 사용.
CI Job 실행 시 Pod 동적 생성 확인.
⚙️ Architecture
[GitLab (Self-hosted on Azure VM)]
↓
[GitLab Runner (AKS 내 설치)]
↓
[Runner는 실행 중, GitLab과 연동]
목차
-
설치과정
-
테스트
-
CI Job 실행할 때마다 Pod 생성 확인
1. 설치과정
Install Gitlab on Azrue VM (Omnibus CE)
Gitlab을 Self-managed로 구성.
az group create --name gitlab-rg --location koreacentral
az vm create \
--resource-group gitlab-rg \
--name gitlab-vm \
--image Ubuntu2204 \
--size Standard_B2ms \
--admin-username azureuser \
--generate-ssh-keys \
--public-ip-sku Standard \
--os-disk-size-gb 64
-
Standard_B2ms (2 vCPU / 8GB RAM)
-
B2ms는 2코어이지만 RAM이 8GB로 GitLab 테스트에 최소한 동작은 가능
az vm open-port --port 80 --resource-group gitlab-rg --name gitlab-vm
az vm open-port --port 443 --resource-group gitlab-rg --name gitlab-vm
az vm open-port --port 22 --resource-group gitlab-rg --name gitlab-vm
- http,https,ssh 허용
ssh 접속
azure -> Networking -> Public IP address 확인
ssh azureuser@<Public_IP>
Gitlab CE 설치 (Omnibus)
sudo apt update
sudo apt install -y curl openssh-server ca-certificates tzdata perl
# GitLab 패키지 저장소 등록
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
# 설치
sudo EXTERNAL_URL="http://<Public_IP>" apt install -y gitlab-ce
Thank you for installing GitLab!
GitLab should be available at http://4.217.217.205
- Gitlab Web Url 확인
# 초기 비밀번호 검색
azureuser@gitlab-vm:~$ sudo cat /etc/gitlab/initial_root_password | grep Password:
Password: ~~~~
project name: gitlab-aks
AKS 구성
az group create --name gitlab-aks-rg --location koreacentral
az aks create \
--resource-group gitlab-aks-rg \
--name gitlab-aks-cluster \
--node-count 2 \
--enable-addons monitoring \
--generate-ssh-keys
az aks get-credentials --resource-group gitlab-aks-rg --name gitlab-aks-cluster
- 노드 2개 구성, kubeconfig 연결
# 로컬에 helm 설치 필수
helm repo add gitlab https://charts.gitlab.io
helm repo update
kubectl create namespace gitlab-runner
helm install gitlab-runner gitlab/gitlab-runner \
--namespace gitlab-runner \
--set gitlabUrl=http://4.217.217.205 \
--set runnerRegistrationToken=<복사한_토큰> \
--set rbac.create=true \
--set runners.tags="aks" \
--set runners.executor=kubernetes \
--set runners.namespace=gitlab-runner
! RegistrationToken = gitlab-aks > CI/CD Settings > Runners
- Gitlab Runner connect
현재 상태 (설치과정 이후)
$ kubectl get po -n gitlab-runner
NAME READY STATUS RESTARTS AGE
gitlab-runner-56776bcccb-gzm2b 1/1 Running 0 2m
2. 테스트
.gitlab-ci.yml 테스트 파일
stages:
- test
job-runner-test:
stage: test
tags:
- aks
script:
- echo "✅ Runner 동작 확인 완료!"
$ kubectl logs gitlab-runner-56776bcccb-gzm2b -n gitlab-runner
job-status=running ... sent-log=0-764 status=202 Accepted
Job succeeded ...
Submitting job to coordinator...ok ... code=200 job-status=success
Removed job from processing list ...
로그 메시지
-
job-status=running: GitLab 서버로부터 CI Job을 받아 처리 중
-
sent-log=0-764: Job의 출력 로그 일부를 GitLab으로 전송함
-
Job succeeded: Job: 내부 스크립트가 정상적으로 성공 처리됨
-
Submitting job to coordinator...ok: 최종 결과를 GitLab 서버에 제출 완료
-
Removed job from processing list: Runner가 해당 Job을 완전히 마무리하고 대기 상태로 전환
3. CI Job 실행할 때마다 Pod 생성 확인
.gitlab-ci.yml 수정
stages:
- verify
test-pod-creation:
stage: verify
tags:
- aks
script:
- echo "Running inside a temporary pod!"
- hostname
- sleep 15 # 잠깐 유지시켜서 kubectl로 볼 수 있도록
Pod 자동 생성
# -w 옵션으로 Watch 모드
kubectl get pods -n gitlab-runner -w
# 초기상태, 커밋하면 kubernetes executor가 job 실행 시 Pod 동적 생성
gitlab-runner-56776bcccb-gzm2b 1/1 Running 0 27m
# Runner가 Job 실행용 임시 Pod을 생성함.
runner-<runner-id>-project-<project-id>-concurrent-<n>-<rand>
Troubleshooting
VM 재생성했을때, IP 같으면 ssh-keygen 제거.
✘ xxng ~ ssh azureuser@4.217.217.205
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:nVnJPnmIpOU1/goBqCezkn6X0E1jqTEfmtpI9mpleLM.
Please contact your system administrator.
Add correct host key in /Users/xxng/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /Users/xxng/.ssh/known_hosts:20
Host key for 4.217.217.205 has changed and you have requested strict checking.
Host key verification failed.
ssh-keygen -R 4.217.217.205