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

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

기본적으로 GitLab 차트에는 클러스터 내 PostgreSQL, Redis, 및 MinIO 배포가 포함되어 있습니다. 이러한 것들은 시험 목적으로만 사용되며 운영 환경에서 사용하기에 권장하지 않습니다. 이러한 차트를 지속적인 부하 하에 운영 환경으로 배포하려면 완전한 설치 가이드를 따르어야 합니다.

전제 조건

이 가이드를 완료하기 위해서는 다음이 필요합니다:

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

사용 가능한 도메인

Let’s Encrypt 서버가 주소를 해석하여 인증서를 발급할 수 있어야 하므로 DNS 레코드를 추가할 수 있는 인터넷에 접속 가능한 도메인에 액세스해야 합니다. 이는 poc.domain.com과 같은 서브도메인일 수 있지만, 인증서 발급을 위해 주소를 해석할 수 있어야 합니다.

Kubernetes 클러스터 생성

총 8개의 가상 CPU 및 30GB RAM이 필요한 클러스터를 권장합니다.

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

caution
Kubernetes 노드는 x86-64 아키텍처를 사용해야 합니다. AArch64/ARM64를 포함한 여러 아키텍처의 지원이 현재 활발히 진행 중입니다. 자세한 내용은 이슈 2899를 참조하십시오.

kubectl 설치

kubectl을 설치하려면 Kubernetes 설치 문서를 참조하십시오. 이 문서는 대부분의 운영 체제와 구글 클라우드 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=도메인 \
  --set certmanager-issuer.email=me@example.com

이 단계는 모든 리소스가 할당되고 서비스가 시작되며 액세스가 가능하도록 하기 위해 여러 분이 소요될 수 있습니다.

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

IP 주소 검색

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

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일 것입니다. 이 URL을 가리키는 Route 53 별칭 레코드 *.domain.tld를 생성하십시오.

GitLab에 로그인

gitlab.domain.tld에서 GitLab에 액세스할 수 있습니다. 예를 들어, global.hosts.domain=my.domain.tld로 설정하면 gitlab.my.domain.tld로 방문할 수 있습니다.

로그인하려면 root 사용자의 비밀번호를 수집해야 합니다. 이것은 자동으로 생성되어 설치시에 Kubernetes 시크릿에 저장됩니다. 해당 시크릿에서 이 패스워드를 가져와 디코딩해야 합니다:

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

이제 사용자명이 root이고 검색한 패스워드로 GitLab에 로그인할 수 있습니다. 이 패스워드는 처음 로그인을 보호하기 위해 생성되었으므로, 로그인 후에 사용자 환경 설정에서 비밀번호를 변경할 수 있습니다.

문제 해결

이 가이드 중에 문제가 발생하면 다음 항목들이 작동하는지 확인해야 할 가능성이 높습니다:

  1. gitlab.my.domain.tld가 검색한 인그레스의 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 리소스를 생성할 권한이 없을 때 발생합니다.