Kubernetes를 위한 minikube 개발
이 가이드는 로컬 Kubernetes 개발 환경을 설정하기 위한 크로스 플랫폼 리소스로 사용됩니다. 이 가이드에서는 인정된 표준인 minikube를 사용할 것입니다.
minikube 시작하기
우리는 공식 문서에서 정보를 추출하고 설명할 것입니다 Kubernetes 프로젝트, minikube로 로컬 Kubernetes 실행에 대한 정보를 포함합니다.
kubectl 설치하기
공식 문서에서는 여러 가지 옵션을 제공하지만, 결과적으로 당신은 세 가지 방법 중 하나를 선택할 수 있습니다:
-
Google Cloud Platform의 Cloud SDK 페이지에서 Google Cloud SDK의 일부로 다운로드합니다.
gcloud
를 설치한 후,kubectl
을 설치할 수 있습니다:sudo gcloud components install kubectl
이미 이 방법으로
kubectl
을 설치한 경우, 업데이트가 필요합니다:sudo gcloud components update
-
cURL 또는 각 OS에 적합한 패키지 관리 시스템으로 설치합니다:
minikube 설치하기
Kubernetes 문서를 참조하세요. 이 문서에서는 GitHub의 릴리스에서 직접 설치하는 방법을 제안합니다.
VM 드라이버 선택하기
이 가이드의 크로스 플랫폼 호환성을 위해, 우리는 VirtualBox를 사용하겠습니다. 그러나 VMware Fusion, HyperV, KVM 및 Xhyve에 대한 드라이버도 있습니다.
minikube 시작/중지하기
minikube 리소스 요청은 GitLab 차트를 개발하는 데 필요한 기본값보다 높게 설정해야 합니다. 주요 구성 항목은
minikube start --help
에서 찾을 수 있습니다. 아래는 필요에 따라 변경할 수 있는 항목을 제공합니다:
-
--cpus int
: minikube VM에 할당된 CPU 수 (기본값2
). 필요한 최소 CPU는3
입니다. 전체 차트를 배포하기 위해서는4
가 필요합니다. -
--memory int
: minikube VM에 할당된 RAM의 양 (기본값2048
). 필요한 최소 메모리는6144
(6GB)입니다. 권장 사항은10240
(10GB)입니다. -
--disk-size string
: minikube VM에 할당된 디스크 크기 (형식:<number>[<unit>]
, 여기서 단위 =b
,k
,m
또는g
) (기본값20g
). GitLab의 스토리지 및 데이터베이스 요구 사항을 참조하세요.이는~/.minikube/machines/minikube/
의 홈 디렉터리에 생성됩니다. -
--kubernetes-version string
: minikube VM이 사용할 Kubernetes 버전 (예:v1.2.3
). -
--registry-mirror stringSlice
: Docker 데몬에 전달할 레지스트리 미러입니다.
start
명령에서 이러한 값을 변경하려면 먼저
minikube delete
로 기존 인스턴스를 삭제하거나, VirtualBox Manager를 사용하여 속성을 수동으로 변경해야 합니다.모든 도구를 설치하고 구성한 후, minikube를 시작하고 중지하는 것은 다음과 같이 가능합니다:
minikube start --cpus 4 --memory 10240
이 명령은 다음과 유사한 출력을 생성해야 합니다:
로컬 Kubernetes v1.7.0 클러스터 시작 중...
VM 시작 중...
Minikube ISO 다운로드 중
97.80 MB / 97.80 MB [==============================================] 100.00% 0s
VM IP 주소 가져오는 중...
파일을 클러스터로 이동 중...
인증서 설정 중...
클러스터 구성 요소 시작 중...
클러스터에 연결 중...
kubeconfig 설정 중...
Kubectl이 이제 클러스터 사용을 위해 구성되었습니다.
[helm.gitlab.io]$ minikube ip
192.168.99.100
[helm.gitlab.io]$ minikube stop
로컬 Kubernetes 클러스터 정지 중...
기계가 중지되었습니다.
minikube ip
명령을 실행한 결과를 주의 깊게 확인하세요. 출력 값이 192.168.99.100
이 아니라면, 나중에 출력 IP가 필요합니다.
Minikube 사용하기
minikube는 Kubernetes 설치로 직접 사용할 수 있으며 단일 노드 클러스터로 취급됩니다.
minikube와 완전한 Kubernetes 클러스터(예: Google Container Engine (GKE)) 사이에는 몇 가지 행동 차이가 있습니다.
다른 점:
- 영구 볼륨:
hostPath
만 가능.
사용할 수 없음:
- 로드 밸런서(클라우드 공급자가 필요).
- 고급 스케줄링 정책(여러 노드가 필요).
주의사항: 영구 볼륨
minikube는 VM 내부의 디렉터리에 매핑된 hostPath
유형의 PersistentVolumes를 지원합니다.
minikube가 tmpfs
로 부팅되기 때문에 대부분의 디렉토리는 minikube stop
을 통해 재부팅 시 지속되지 않습니다.
지속되는 디렉터리의 추가 세부정보 및 목록은 minikube 시작 가이드에서 확인할 수 있습니다.
추가 기능 활성화
minikube는 기본 구성 외에 몇 가지 기능을 처리합니다.
이 프로젝트의 개발을 위해서 Ingress
에 대한 접근이 필요합니다:
minikube addons enable ingress
대시보드에 연결하기
다음 명령어를 호출하여 대시보드의 URL을 찾을 수 있습니다:
minikube dashboard --url
차트 배포하기
이 차트를 minikube에 배포할 때, 일부 차트 리소스를 줄이거나 비활성화해야 합니다.
nginx-ingress
차트를 사용하여 포트 22
, 80
, 443
를 제공하는 것은 불가능합니다.
이것을 비활성화하고 nginx-ingress.enabled=false,global.ingress.class="nginx"
를 설정하는 것이 가장 좋습니다.
certmanager
차트는 minikube와 함께 사용할 수 없습니다.
다음 설정을 통해 이 기능을 비활성화해야 합니다: certmanager.install=false,global.ingress.configureCertmanager=false
.
그 결과, SSL 인증서를 제공하지 않으면, 자체 서명된 인증서가 생성됩니다.
gitlab-runner
차트는 gitlab-runner.certsSecretName
를 통해 자체 서명된 인증서를 수용합니다.
릴리즈 이름이 gitlab
인 경우, 인증서 이름은 gitlab-wildcard-tls-chain
이 됩니다.
gitlab-shell
차트는 minikube와 함께 사용할 수 있지만 이미 minikube가 사용 중인 22번 포트가 아닌 다른 포트로 매핑해야 합니다.
gitlab.gitlab-shell.service.type=NodePort
와 gitlab.gitlab-shell.service.nodePort=<high-numbered port>
를 구성할 수 있으며, 이는 지정된 포트를 통해 레포지토리를 클론할 수 있게 합니다.
UI의 클론 링크에 이 포트가 반영되도록 global.shell.port=<high-numbered port>
를 설정하세요.
다음 섹션에서는 로컬 Git 클론에서 이러한 차트를 설치하는 방법을 보여줍니다.
원하는 브랜치 또는 태그를 체크아웃했으며 해당 체크아웃의 기본 폴더에 위치하고 있는지 확인하십시오.
GitLab 차트 저장소 클론하기
git clone https://gitlab.com/gitlab-org/charts/gitlab.git
cd gitlab
권장 설정으로 GitLab 배포하기
권장하는 4 CPU와 10 GB RAM을 사용할 때는
values-minikube.yaml
를 기본으로 사용합니다.
helm dependency update
helm upgrade --install gitlab . \
--timeout 600s \
-f https://gitlab.com/gitlab-org/charts/gitlab/raw/master/examples/values-minikube.yaml
최소 설정으로 GitLab 배포하기
절대 최소 리소스인 3 CPU와 6GB RAM을 사용하는 경우, 모든 복제본을 줄이고 필요 없는 서비스는 비활성화해야 합니다. 합리적인 기준으로 values-minikube-minimum.yaml
을 참조하세요.
helm dependency update
helm upgrade --install gitlab . \
--timeout 600s \
-f https://gitlab.com/gitlab-org/charts/gitlab/raw/master/examples/values-minikube-minimum.yaml
minikube ip
의 출력이 192.168.99.100
이 아닌 경우, 예제 구성 파일에서 IP 엔드포인트를 재정의하기 위해 다음 인수를 추가하세요:
--set global.hosts.domain=$(minikube ip).nip.io \
--set global.hosts.externalIP=$(minikube ip)
DNS 처리
제공된 예제 구성에서는 도메인을 192.168.99.100.nip.io
로 구성하여 호스트 파일의 변경이나 기타 도메인 이름 해상도 서비스 처리에 대한 오버헤드를 줄이려 했습니다. 그러나 이는 nip.io의 네트워크 도달 가능성에 의존합니다.
이것이 사용 불가능한 경우, /etc/hosts
파일을 수정하거나 다른 DNS 해상도 수단을 제공해야 할 수 있습니다.
예제 /etc/hosts
파일 추가:
192.168.99.100 gitlab.some.domain registry.some.domain minio.some.domain
자체 서명된 CA 통합하기
차트가 배포된 후, 자체 서명된 인증서를 사용하는 경우, 사용자는 생성된 CA 인증서를 가져오는 방법에 대한 알림을 받습니다. 이 인증서는 시스템 저장소에 추가할 수 있어 모든 브라우저, Docker 데몬 및 git
명령이 배포된 인증서를 신뢰하는 것으로 인식하게 됩니다. 방법은 운영 체제에 따라 다릅니다.
BounCA는 대부분의 운영 체제를 다루는 좋은 튜토리얼을 제공합니다.
로그인하기
지정된 도메인을 방문하여 GitLab 인스턴스에 접근할 수 있습니다. 이 예시에서는 https://gitlab.192.168.99.100.nip.io
가 사용됩니다. 초기 루트 비밀번호를 위해 수동으로 비밀을 생성했다면, 이를 사용하여 루트 사용자로 로그인할 수 있습니다. 그렇지 않다면 GitLab이 루트 사용자용 랜덤 비밀번호를 자동으로 생성했습니다. 이 비밀번호는 다음 명령어를 통해 추출할 수 있습니다(리리스를 위해 <name>
을 명령어에서 gitlab
으로 바꾸세요).
kubectl get secret <name>-gitlab-initial-root-password -ojsonpath='{.data.password}' | base64 --decode ; echo