튜토리얼: Google Kubernetes Engine 사용을 위한 GitLab Runner 구성

이 튜토리얼은 어떻게 Google Kubernetes Engine (GKE)를 사용하여 GitLab Runner를 구성하여 작업을 실행하는지에 대해 설명합니다.

이 튜토리얼에서는 GitLab Runner를 표준 클러스터 모드로 구성합니다.

GKE를 사용하도록 GitLab Runner를 구성하는 방법:

  1. 환경 설정.
  2. 클러스터 생성 및 연결.
  3. Kubernetes 오퍼레이터 설치 및 구성.
  4. 선택 사항. 구성이 성공적으로 되었는지 확인.

시작하기 전에

GKE를 사용하도록 GitLab Runner를 구성하려면 다음을 수행해야 합니다:

환경 설정

GKE에서 GitLab Runner를 구성하고 사용하기 위한 도구를 설치합니다.

  1. Google Cloud CLI 설치 및 구성. Google Cloud CLI를 사용하여 클러스터에 연결합니다.
  2. kubectl 설치 및 구성. kubectl을 사용하여 로컬 환경에서 원격 클러스터와 통신합니다.

클러스터 생성 및 연결

이 단계에서는 클러스터를 생성하고 연결하는 방법에 대해 설명합니다. 클러스터에 연결한 후에는 kubectl을 사용하여 상호 작용합니다.

  1. Google Cloud 플랫폼에서 표준 클러스터를 생성합니다.

  2. kubectl 인증 플러그인을 설치합니다:

    gcloud components install gke-gcloud-auth-plugin
    
  3. 클러스터에 연결합니다:

    gcloud container clusters get-credentials CLUSTER_NAME --zone=CLUSTER_LOCATION
    
  4. 클러스터 구성을 확인합니다:

    kubectl config view
    
  5. 클러스터에 연결되었는지 확인합니다:

    kubectl config current-context
    

Kubernetes 오퍼레이터 설치 및 구성

이제 클러스터가 준비되었으므로 Kubernetes 오퍼레이터를 설치하고 구성할 준비가 되었습니다.

  1. cert-manager를 설치합니다. 이미 인증서 관리자가 설치되어 있는 경우 이 단계를 건너뜁니다:

    kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.7.1/cert-manager.yaml
    
  2. 클러스터에서 실행되는 Kubernetes 오퍼레이터를 관리하는 도구인 Operator Lifecycle Manager (OLM)를 설치합니다:

    curl --silent --location "https://github.com/operator-framework/operator-lifecycle-manager/releases/download/v0.24.0/install.sh" \
     | bash -s v0.24.0
    
  3. Kubernetes 오퍼레이터를 설치합니다:

    kubectl create -f https://operatorhub.io/install/gitlab-runner-operator.yaml
    
  4. Operator Lifecycle Manager v0.25.0 이상 버전의 경우. 고유한 인증서 관리자를 추가하거나 cert-manager를 사용합니다.

    • 고유한 인증서 제공자를 추가하려면:

      1. gitlab-runner-operator.yaml에서 env 설정 내에서 인증서 네임스페이스 및 인증서 이름을 정의합니다:

        cat > gitlab-runner-operator.yaml << EOF
        apiVersion: operators.coreos.com/v1alpha1
        kind: Subscription
        metadata:
        name: gitlab-runner-operator
        namespace: gitlab-ns
        spec:
        channel: stable
        name: gitlab-runner-operator
        source: operatorhubio-catalog
        ca: webhook-server-cert
        sourceNamespace: olm
        config:
        env:
           - name: CERTIFICATE_NAMESPACE
           value: cert_namespace_desired_value
           - name: CERTIFICATE_NAME
           value: cert_name_desired_value
        EOF
        
      2. gitlab-runner-operator.yaml을 Kubernetes 클러스터에 적용합니다:

        kubectl apply -f gitlab-runner-operator.yaml
        
    • cert-manager를 사용하는 경우:

      1. 연산자 설치에 추가로 certificate-issuer-install.yaml을 사용하여 기본 네임스페이스에 CertificateIssuer를 설치합니다:

        cat > certificate-issuer-install.yaml << EOF
        apiVersion: v1
        kind: Namespace
        metadata:
        labels:
           app.kubernetes.io/component: controller-manager
           app.kubernetes.io/managed-by: olm
           app.kubernetes.io/name: gitlab-runner-operator
        name: gitlab-runner-system
        ---
        apiVersion: cert-manager.io/v1
        kind: Certificate
        metadata:
        name: gitlab-runner-serving-cert
        namespace: gitlab-runner-system
        spec:
        dnsNames:
        - gitlab-runner-webhook-service.gitlab-runner-system.svc
        - gitlab-runner-webhook-service.gitlab-runner-system.svc.cluster.local
        issuerRef:
          kind: Issuer
          name: gitlab-runner-selfsigned-issuer
        secretName: webhook-server-cert
        ---
        apiVersion: cert-manager.io/v1
        kind: Issuer
        metadata:
        name: gitlab-runner-selfsigned-issuer
        namespace: gitlab-runner-system
        spec:
        selfSigned: {}
        EOF
        
      2. certificate-issuer-install.yaml을 Kubernetes 클러스터에 적용합니다:

        kubectl create -f certificate-issuer-install.yaml
        
  5. GitLab 프로젝트에서 runner-registration-token을 포함하는 시크릿을 생성합니다:

     cat > gitlab-runner-secret.yml << EOF
     apiVersion: v1
     kind: Secret
     metadata:
       name: gitlab-runner-secret
     type: Opaque
     stringData:
       runner-token: YOUR_RUNNER_AUTHENTICATION_TOKEN
     EOF
    
  6. 시크릿을 적용합니다:

    kubectl apply -f gitlab-runner-secret.yml
    
  7. 사용자 정의 리소스 정의 파일을 생성하고 다음 정보를 포함합니다:

     cat > gitlab-runner.yml << EOF
     apiVersion: apps.gitlab.com/v1beta2
     kind: Runner
     metadata:
       name: gitlab-runner
     spec:
       gitlabUrl: https://gitlab.example.com
       buildImage: alpine
       token: gitlab-runner-secret
     EOF
    
  8. 사용자 정의 리소스 정의 파일을 적용합니다:

    kubectl apply -f gitlab-runner.yml
    

이것으로 GitLab Runner를 GKE에서 사용할 수 있도록 구성했습니다. 다음 단계에서 구성이 작동하는지 확인할 수 있습니다.

구성 확인

GKE 클러스터에서 러너가 실행 중인지 확인하려면 다음 방법 중 하나를 사용할 수 있습니다.

  • 다음 명령을 사용합니다.

    kubectl get pods
    

    다음 출력이 표시되어야 합니다. 이는 러너가 GKE 클러스터에서 실행 중임을 보여줍니다.

    NAME                             READY   STATUS    RESTARTS   AGE
    gitlab-runner-hash-short_hash    1/1     Running   0          5m
    
  • GitLab에서 작업 로그를 확인합니다:

    1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
    2. 빌드 > 작업을 선택하고 작업을 찾습니다.
    3. 작업 로그를 보려면 작업 상태를 선택합니다.