에이전트를 사용하여 GitLab Runner 설치하기

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-Managed

GitLab 에이전트 for Kubernetes를 설치하고 구성한 후에 에이전트를 사용하여 클러스터에 GitLab Runner를 설치할 수 있습니다.

GitOps workflow를 사용하면, 저장소에 GitLab Runner 구성 파일이 포함되고 클러스터가 자동으로 업데이트됩니다.

경고: 암호화되지 않은 GitLab Runner 비밀을 runner-manifest.yaml에 추가하면 저장소 파일에서 비밀을 노출시킬 수 있습니다. 공용 프로젝트에서 GitOps 워크플로를 사용하는 경우, GitOps workflow에서 Kubernetes Secrets 관리하기를 참조하세요.

  1. GitLab Runner의 Helm 차트 값 검토.
  2. runner-chart-values.yaml 파일을 생성합니다. 예:

    # GitLab 서버 URL(프로토콜 포함)은 등록하려는 러너에서 GitLab 서버의 URL입니다.
    # 참조: https://docs.gitlab.com/runner/commands/index.html#gitlab-runner-register
    #
    gitlabUrl: https://gitlab.my.domain.example.com/
    
    # 새 러너를 GitLab 서버에 추가하는 등록 토큰
    # GitLab 인스턴스에서 이 값을 검색합니다.
    # 자세한 내용은 다음 위치에서 확인: https://docs.gitlab.com/ee/ci/runners/index.html
    #
    runnerRegistrationToken: "yrnZW46BrtBFqM7xDzE7dddd"
    
    # RBAC 지원:
    rbac:
        create: true
    
    # 권한이 있는 플래그가 활성화된 모든 컨테이너 실행
    # 이 플래그는 docker:dind 이미지가 필요한 경우 실행하는 것을 허용합니다.
    # 이것을 활성화하기 전에 문서를 읽으세요:
    # https://docs.gitlab.com/runner/executors/kubernetes/index.html#using-dockerdind
    runners:
        privileged: true
    
  3. 클러스터 에이전트와 함께 GitLab Runner 차트를 설치하는 단일 매니페스트 파일을 생성합니다:

    helm template --namespace GITLAB-NAMESPACE gitlab-runner -f runner-chart-values.yaml gitlab/gitlab-runner > runner-manifest.yaml
    

    GITLAB-NAMESPACE를 클러스터 namespace로 교체합니다. 예시 보기.

  4. runner-manifest.yaml 파일을 편집하여 ServiceAccountnamespace를 포함합니다. helm template의 출력에는 생성된 리소스에 ServiceAccount의 네임스페이스가 포함되어 있지 않습니다.

    ---
    # 출처: gitlab-runner/templates/service-account.yaml
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      annotations:
      name: gitlab-runner-gitlab-runner
      namespace: gitlab
      labels:
    ...
    
  5. runner-manifest.yaml을 Kubernetes 매니페스트를 보관하는 저장소에 푸시합니다.
  6. 러너 매니페스트를 동기화하는 데 사용할 에이전트를 구성합니다. GitOps를 참조하세요. 예:

    gitops:
      manifest_projects:
      - id: path/to/manifest/project
        paths:
        - glob: 'path/to/runner-manifest.yaml'
    

    자세한 내용은 GitOps 구성 참조를 참조하세요.

이제 에이전트가 매니페스트 업데이트를 위해 저장소를 확인할 때마다 클러스터는 GitLab Runner를 포함하여 업데이트됩니다.

러너 매니페스트 예시

이 예시는 샘플 러너 매니페스트 파일을 보여줍니다. 프로젝트의 요구 사항에 맞는 자체 manifest.yaml 파일을 생성하세요.

---
# 출처: gitlab-runner/templates/service-account.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  annotations:
  name: gitlab-runner-gitlab-runner
  labels:
    app: gitlab-runner-gitlab-runner
    chart: gitlab-runner-0.58.2
    release: "gitlab-runner"
    heritage: "Helm"
---
# 출처: gitlab-runner/templates/secrets.yaml
apiVersion: v1
kind: Secret
metadata:
  name: "gitlab-runner-gitlab-runner"
  labels:
    app: gitlab-runner-gitlab-runner
    chart: gitlab-runner-0.58.2
    release: "gitlab-runner"
    heritage: "Helm"
type: Opaque
data:
  runner-registration-token: "FAKE-TOKEN"
  runner-token: ""
---
# 출처: gitlab-runner/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: gitlab-runner-gitlab-runner
  labels:
    app: gitlab-runner-gitlab-runner
    chart: gitlab-runner-0.58.2
    release: "gitlab-runner"
    heritage: "Helm"
data:
  ...

(생략)

문제 해결

“키가 있는 연관 목록에 프로토콜 필드가 빠진 요소가 있습니다”

Kubernetes v1.19의 버그로 인해 GitLab Runner 또는 다른 어플리케이션을 Kubernetes용 GitLab 에이전트와 함께 설치할 때 이 오류가 발생할 수 있습니다. 이를 해결하기 위해 다음 중 하나를 수행합니다:

  • Kubernetes 클러스터를 v1.20 이상으로 업그레이드합니다.
  • containers.ports 하위 섹션에 protocol: TCP를 추가합니다:

    ...
    ports:
      - name: metrics
        containerPort: 9252
        protocol: TCP
    ...