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을 구성해야 합니다.](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl#generate_kubeconfig_entry)

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이 작동할 도메인 또는 하위 도메인.
  • 인증서를 발급할 수 있도록 귀하의 이메일 주소.

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

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

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

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

IP 주소 검색

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

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 별칭 레코드를 만들어 *.domain.tld를 이 URL로 지정하십시오.

GitLab으로 로그인하기

gitlab.domain.tld에서 GitLab에 접속할 수 있습니다. 예를 들어, global.hosts.domain=my.domain.tld로 설정한 경우 gitlab.my.domain.tld를 방문할 수 있습니다.

로그인하려면 root 사용자의 비밀번호를 수집해야 합니다. 이 비밀번호는 설치 시 자동으로 생성되며 쿠버네티스 시크릿에 저장됩니다. 이제 해당 비밀번호를 시크릿에서 가져와 디코드해 봅시다:

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 리소스를 생성하기 위한 권한이 없다는 것을 의미합니다.