minikube를 활용한 Kubernetes 개발
본 안내서는 로컬 Kubernetes 개발 환경을 설정하기 위한 플랫폼 간 자원으로 제공됩니다. 이 안내서에서는 minikube를 사용할 것입니다. 이것이 표준으로 인정되고 있기 때문입니다.
minikube 시작하기
공식 문서인 Running Kubernetes Locally with minikube에서 공식 문서를 추출 및 설명할 것입니다.
kubectl 설치
공식 문서에서는 여러 옵션을 제공하지만, 결과적으로 세 가지 작업 중 하나를 수행할 수 있습니다:
-
Google Cloud SDK의 일부로 Google Cloud Platform의 Cloud SDK 페이지에서 다운로드합니다.
gcloud
를 설치한 후kubectl
을 설치할 수 있습니다:sudo gcloud components install kubectl
이미 이 방법으로
kubectl
을 설치했다면 업데이트를 확인하세요:sudo gcloud components update
-
cURL 또는 해당 운영 체제의 적절한 패키지 관리 시스템을 사용하여 설치합니다:
minikube 설치
minikube 설치 문서를 참조하세요. 여기에서는 GitHub 릴리스에서 직접 설치를 권장합니다.
VM 드라이버 선택
본 안내서의 플랫폼 간 호환성을 위해 VirtualBox를 사용할 것이지만 VMware Fusion, HyperV, KVM 및 Xhyve용 드라이버도 있습니다.
minikube 시작/중지
GitLab 차트를 개발하기 위해 minikube 자원 요청이 기본값보다 높게 설정되어야 합니다. 중요한 구성 항목은 minikube start --help
로 찾을 수 있습니다. 테스트하는 데 필요한 것과 목록에 나온 요구 사항에 따라 변경해야 할 것들이 제공됩니다.
-
--cpus int
: minikube VM에 할당된 CPU 수(기본값2
). 절대 필요한 최소 CPU는3
입니다. 완전한 차트를 배포하려면4
가 필요합니다. -
--memory int
: minikube VM에 할당된 RAM 양(기본값2048
). 절대 필요한 최소 RAM은6144
(6GB)입니다. 권장되는 값은10240
(10GB)입니다. -
--disk-size string
: minikube VM에 할당된 디스크 크기(형식:<숫자>[<단위>]
, 단위 =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 설치로 직접 사용할 수 있으며 단일 노드 클러스터처럼 취급할 수 있습니다. Google Container Engine (GKE)와 같은 완전한 Kubernetes 클러스터와는 약간 다른 동작이 있습니다.
다른 점:
- 지속적인 볼륨:
hostPath
만 사용 가능합니다.
사용 불가능한 것:
- 로드 밸런서 (클라우드 제공자 필요).
- 고급 스케줄링 정책 (여러 노드 필요).
주의할 점: 지속적인 볼륨
minikube는 hostPath
유형의 PersistentVolumes를 지원하며, 이는 VM 내부의 디렉터리로 매핑됩니다. minikube는 tmpfs
로 부팅되기 때문에 대부분의 디렉터리는 minikube stop
을 통해 다시 부팅 시 지속되지 않습니다.
더 자세한 내용 및 지속되는 디렉터리 목록은 minikube 시작 가이드에서 찾을 수 있습니다.
애드온 활성화
minikube는 기본 구성 외에도 몇 가지 기능을 처리합니다. 이 프로젝트를 개발하기 위해 Ingress
에 액세스해야 합니다:
minikube addons enable ingress
대시보드에 연결하기
다음을 호출하여 대시보드의 URL을 찾을 수 있습니다:
minikube dashboard --url
차트 배포
이 차트를 minikube에 배포할 때 일부 차트 자원을 줄이거나 비활성화해야 합니다. nginx-ingress
차트를 사용하여 포트 22
, 80
, 443
을 제공하는 것은 불가능합니다. 이를 비활성화하고 Ingress 클래스를 설정하는 것이 좋습니다. nginx-ingress.enabled=false,global.ingress.class="nginx"
로 설정하세요.
certmanager
차트는 minikube와 함께 사용할 수 없습니다. 이를 비활성화해야 합니다. certmanager.install=false,global.ingress.configureCertmanager=false
로 설정하세요. 결과적으로 자체 서명된 인증서를 제공하지 않는 한 자체 서명된 인증서가 생성됩니다. 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=<높은 번호의 포트>
를 구성할 수 있습니다. 이를 통해 UI에서의 복제 링크에 이 포트가 반영되도록 만들 수 있습니다. global.shell.port=<높은 번호의 포트>
를 구성하세요.
다음 섹션에서는 로컬 Git 클론에서 이러한 차트들을 설치하는 방법을 보여줄 것입니다. 원하는 브랜치나 태그를 확인하고 해당 체크아웃의 기본 폴더에 있는지 확인하세요.
GitLab 차트 저장소 복제
git clone https://gitlab.com/gitlab-org/charts/gitlab.git
cd gitlab
권장 설정으로 GitLab 배포하기
추천하는 4 CPU 및 10GB 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의 네트워크 접근성에 의존합니다.
만약 이를 사용할 수 없는 경우, 호스트 파일을 수정하거나 다른 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>
을 사용한 경우 사용자 이름으로 대체).
kubectl get secret <name>-gitlab-initial-root-password -ojsonpath='{.data.password}' | base64 --decode ; echo