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에서 제공하는 스크립트를 사용하여 클러스터 생성을 자동화할 수 있습니다.
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에 로그인할 수 있습니다. 이 패스워드는 처음 로그인을 보호하기 위해 생성되었으므로, 로그인 후에 사용자 환경 설정에서 비밀번호를 변경할 수 있습니다.
문제 해결
이 가이드 중에 문제가 발생하면 다음 항목들이 작동하는지 확인해야 할 가능성이 높습니다:
-
gitlab.my.domain.tld
가 검색한 인그레스의 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 리소스를 생성할 권한이 없을 때 발생합니다.