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에 로그인할 수 있습니다.
로그인 후 사용자 기본 설정을 통해 이 비밀번호를 변경할 수 있으며,
우리는 여러분의 첫 번째 로그인을 안전하게 보장하기 위해 이 비밀번호만 생성합니다.
문제 해결
이 안내서 중에 문제가 발생하면 다음과 같은 몇 가지 항목이 제대로 작동하는지 확인하세요:
-
gitlab.my.domain.tld
가 가져온 Ingress의 IP 주소로 해석됩니다. - 인증서 경고가 표시되면 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 리소스를 생성하는 데 필요한 권한이 없음을 의미합니다.