GKE 또는 EKS에서 GitLab 차트 테스트하기

이 가이드는 Google Kubernetes Engine(GKE) 또는 Amazon Elastic Kubernetes Service(EKS)에서 기본값으로 GitLab 차트를 설치하는 방법에 대한 간결하지만 완전한 문서를 제공합니다.

기본적으로 GitLab 차트에는 클러스터 내 PostgreSQL, Redis 및 MinIO 배포가 포함되어 있습니다. 이는 시험 목적만을 위한 것이며 생산 환경에서 사용하기를 권장하지 않습니다.

이러한 차트를 지속적인 부하 하에 생산 환경에 배포하려면 전체 설치 가이드를 따라야 합니다.

필수 조건

이 가이드를 완료하려면 다음이 필요합니다:

  • DNS 레코드를 추가할 수 있는 도메인.
  • Kubernetes 클러스터.
  • 작동하는 kubectl 설치.
  • Helm v3가 작동하는 설치.

사용 가능한 도메인

DNS 레코드를 추가할 수 있는 인터넷 접근 가능한 도메인에 대한 액세스 권한이 있어야 합니다. 이는 poc.domain.com과 같은 하위 도메인이 될 수 있지만, Let’s Encrypt 서버가 인증서를 발급하기 위해 주소를 확인할 수 있어야 합니다.

Kubernetes 클러스터 생성

총 8개 이상의 가상 CPU와 30GB의 RAM을 가진 클러스터를 권장합니다.

클라우드 제공업체의 Kubernetes 클러스터 생성 방법 지침을 참조하거나 GitLab이 제공하는 스크립트를 사용하여 클러스터 생성을 자동화할 수 있습니다.

경고:
Kubernetes 노드는 x86-64 아키텍처를 사용해야 합니다. AArch64/ARM64를 포함한 여러 아키텍처에 대한 지원은 현재 적극 개발 중입니다. 자세한 내용은 문제 2899를 참조하십시오.

kubectl 설치

kubectl을 설치하려면 Kubernetes 설치 문서를 참조하세요. 이 문서에서는 대부분의 운영 체제와, 이전 단계에서 설치했을 수 있는 Google Cloud SDK에 대해 설명합니다.

클러스터를 만든 후에는 명령줄에서 클러스터와 상호 작용하기 전에 kubectl 구성을 해야 합니다.

Helm 설치

이 가이드에서는 Helm v3의 최신 릴리스(v3.9.4 이상)를 사용합니다. Helm을 설치하려면 Helm 설치 문서를 참조하세요.

GitLab Helm 리포지토리 추가

GitLab Helm 리포지토리를 helm의 구성에 추가합니다:

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

GitLab 설치

이 차트가 가능하게 하는 멋진 점은 한 명령어로 모든 GitLab이 설치되고 SSL로 구성된다는 것입니다.

차트를 구성하려면 다음이 필요합니다:

  • GitLab이 작동할 도메인 또는 하위 도메인.
  • Let’s Encrypt가 인증서를 발급할 수 있도록 하는 이메일 주소.

차트를 설치하려면 두 개의 --set 인수를 사용하여 설치 명령을 실행합니다:

helm install gitlab gitlab/gitlab \
  --set global.hosts.domain=DOMAIN \
  --set certmanager-issuer.email=me@example.com

이 단계에서는 모든 리소스를 할당하고 서비스를 시작하며 접근 가능한 상태가 되기까지 몇 분이 걸릴 수 있습니다.

완료되면 설치된 NGINX Ingress에 대해 동적으로 할당된 IP 주소를 수집할 수 있습니다.

IP 주소 가져오기

kubectl을 사용하여 GitLab 차트의 일부로 방금 설치하고 구성한 NGINX Ingress에 대해 GKE에서 동적으로 할당된 주소를 가져올 수 있습니다:

kubectl get ingress -lrelease=gitlab

출력은 다음과 유사하게 나타날 것입니다:

NAME               HOSTS                 ADDRESS         PORTS     AGE
gitlab-minio       minio.domain.tld      35.239.27.235   80, 443   118m
gitlab-registry    registry.domain.tld   35.239.27.235   80, 443   118m
gitlab-webservice  gitlab.domain.tld     35.239.27.235   80, 443   118m

세 개의 항목이 모두 동일한 IP 주소를 가지고 있음을 알 수 있습니다. 이 IP 주소를 기록하고 사용하기로 결정한 도메인의 DNS에 추가합니다. 여러 개의 A 유형 레코드를 추가할 수 있지만, 단순함을 위해 “와일드카드” 레코드 하나를 추천합니다:

  • Google Cloud DNS에서 * 이름으로 A 레코드를 생성합니다. TTL을 5분 대신 1분으로 설정하는 것을 제안합니다.
  • AWS EKS에서는 주소가 IP 주소가 아니라 URL이 될 것입니다. Route 53 Alias 레코드 생성 *.domain.tld를 이 URL로 포인팅합니다.

GitLab에 로그인하기

gitlab.domain.tld에서 GitLab에 접속할 수 있습니다. 예를 들어, global.hosts.domain=my.domain.tld를 설정했다면, gitlab.my.domain.tld를 방문하면 됩니다.

로그인하려면 root 사용자에 대한 비밀번호를 수집해야 합니다. 이는 설치 시 자동으로 생성되며 Kubernetes Secret에 저장됩니다. 그 비밀번호를 시크릿에서 가져와서 디코딩해 보겠습니다:

kubectl get secret gitlab-gitlab-initial-root-password -ojsonpath='{.data.password}' | base64 --decode ; echo

이제 root 사용자 이름과 가져온 비밀번호로 GitLab에 로그인할 수 있습니다. 로그인 후 사용자 기본 설정을 통해 이 비밀번호를 변경할 수 있으며, 우리는 여러분의 첫 번째 로그인을 안전하게 보장하기 위해 이 비밀번호만 생성합니다.

문제 해결

이 안내서 중에 문제가 발생하면 다음과 같은 몇 가지 항목이 제대로 작동하는지 확인하세요:

  1. gitlab.my.domain.tld가 가져온 Ingress의 IP 주소로 해석됩니다.
  2. 인증서 경고가 표시되면 Let’s Encrypt에 문제가 발생한 것이며, 일반적으로 DNS와 관련이 있거나 재시도 요구와 관련이 있습니다.

추가 문제 해결 팁은 문제 해결 가이드를 참조하세요.

Helm 설치가 roles.rbac.authorization.k8s.io "gitlab-shared-secrets" is forbidden을 반환함

다음과 같이 실행한 후:

helm install gitlab gitlab/gitlab  \
  --set global.hosts.domain=DOMAIN \
  --set certmanager-issuer.email=user@example.com

다음과 유사한 오류가 표시될 수 있습니다:

Error: failed pre-install: warning: Hook pre-install templates/shared-secrets-rbac-config.yaml failed: roles.rbac.authorization.k8s.io "gitlab-shared-secrets" is forbidden: user "some-user@some-domain.com" (groups=["system:authenticated"]) is attempting to grant RBAC permissions not currently held:
{APIGroups:[""], Resources:["secrets"], Verbs:["get" "list" "create" "patch"]}

이는 클러스터에 연결하는 데 사용하는 kubectl 컨텍스트가 RBAC 리소스를 생성하는 데 필요한 권한이 없음을 의미합니다.