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의 최신 릴리스(3.9.4 이상)를 사용합니다. Helm을 설치하려면 Helm 설치 문서를 참조하세요.

GitLab Helm 저장소 추가

GitLab Helm 저장소를 helm 구성에 추가하세요.

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

GitLab 설치

이 차트의 가능성이 엿보이는 곳입니다. 한 명령어. 짱! 모든 GitLab이 설치되고 SSL로 구성됩니다.

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

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

차트를 설치하려면 두 개의 --set 인수를 사용하여 설치 명령어를 실행하세요.

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

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

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

IP 주소 검색

방금 설치하고 구성한 GitLab 차트의 NGINX Ingress에 의해 동적으로 할당된 주소를 가져오기 위해 kubectl을 사용할 수 있습니다.

kubectl get ingress -lrelease=gitlab

출력은 다음과 유사해야 합니다:

이름               호스트                 주소         포트     나이
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을 가리키는 *.domain.tld라는 Route 53 별칭 레코드를 생성하세요.

GitLab에 로그인

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

로그인하려면 root 사용자의 비밀번호를 수집해야 합니다. 이 비밀번호는 자동으로 생성되어 설치 시 Kubernetes Secret에 저장됩니다. 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"]}

이는 클러스터에 연결하는데 필요한 RBAC 자원을 만들기 위한 권한이 없는 kubectl 컨텍스트를 사용 중이라는 것을 의미합니다.