KinD를 사용한 Kubernetes 개발
이 안내서는 로컬 Kubernetes 개발 환경을 설정하기 위한 크로스 플랫폼 리소스로 제공됩니다. 이 안내서에서는 KinD를 사용합니다. Docker를 사용하여 Kubernetes 클러스터를 생성하며, 다양한 버전 및 여러 노드를 배포하는 데 쉬운 메커니즘을 제공합니다.
또한, nip.io를 사용할 것인데, 이를 사용하면 192.168.1.250.nip.io
와 같은 형식의 호스트 이름에 모든 IP 주소를 매핑할 수 있으며, 이는 192.168.1.250
에 매핑됩니다. 설치가 필요하지 않습니다.
참고: 아래의 SSL 활성화된 설치 옵션을 사용하는 경우, 리포지토리를 복제하고 변경 사항을 푸시하려면 SSH 대신 HTTPS로 진행해야 합니다. GitLab Shell의 서비스 노드포트를 통한 서비스 노출을 업데이트하여 이 문제를 해결할 계획입니다.
Apple silicon (M1/M2)
kind
는 colima
와 함께 사용하여 macOS에서 로컬 Kubernetes 개발 환경을 제공하는 데 사용할 수 있습니다. 이는 M1
및 M2
변형을 포함합니다.
의존성 설치
VM 생성
colima
VM을 생성하세요:
colima start --cpu 6 --memory 16 --disk 40 --profile docker --arch aarch64 --vm-type=vz --vz-rosetta
준비가 되면, 준비를 참고하여 GitLab을 kind
와 함께 설치할 수 있습니다.
VM 관리
colima
VM을 중지하려면:
colima stop --profile docker
VM을 다시 시작하려면:
colima start --profile docker
로컬 시스템을 제거하고 정리하려면:
colima delete --profile docker
준비
필수 정보
다음 설치 옵션은 호스트 IP를 알아야 합니다. 이 정보를 찾는 몇 가지 옵션이 있습니다:
- Linux:
hostname -i
- MacOS:
ipconfig getifaddr en0
참고:
대부분의 MacOS 시스템은 en0
를 기본 인터페이스로 사용합니다. 다른 기본 인터페이스가 있는 시스템을 사용하는 경우, en0
대신 해당 인터페이스 이름을 대체하세요.
네임스페이스 사용
default
이외의 네임스페이스에 애플리케이션을 설치하는 것이 가장 좋은 방법으로 간주됩니다. kubectl과 함께 helm install
을 실행하기 전에 네임스페이스를 만드세요:
kubectl create namespace YOUR_NAMESPACE
모든 이후의 kubectl 명령어에 --namespace YOUR_NAMESPACE
를 추가하여 네임스페이스를 사용하세요. 또는 kubectx 프로젝트의 kubens
를 사용하여 네임스페이스로 문맥적으로 전환하고 추가로 타이핑을 건너뛸 수 있습니다.
의존성 설치
asdf
를 사용하여 다음 도구를 설치하세요(더 많은 정보):
kubectl
helm
kind
참고: kind
는 로컬 Kubernetes 클러스터를 실행하기 위해 Docker를 사용하므로 Docker를 설치했는지 확인하세요.
구성 예제 얻기
GitLab 차트 저장소에는 다음 단계에서 참조하는 모든 예제가 포함되어 있습니다. 최신 버전을 받으려면 저장소를 복제하거나 기존 체크아웃을 업데이트하세요:
git clone https://gitlab.com/gitlab-org/charts/gitlab.git
KinD 클러스터 가동
원하는 구성에 따라 예제 구성이 있는 doc/examples/kind
에서 몇 가지 예제 구성이 있습니다.
이러한 구성을 검토하고 필요에 따라 조정하세요.
이제 클러스터를 가동할 수 있습니다. 예시:
kind create cluster --config examples/kind/kind-ssl.yaml
GitLab Helm 차트 추가
시스템을 GitLab Helm 차트에 액세스할 수 있도록 설정하기 위해 다음 명령을 따르세요:
helm repo add gitlab https://charts.gitlab.io/
helm repo update
배포 옵션
고객님의 요구에 따라 다음 배포 옵션 중 하나를 선택하세요.
참고: 첫 번째 전체 배포 프로세스는 다운로드하는 클라우드 네이티브 GitLab 이미지, 네트워크 및 시스템 리소스에 따라 약 10분이 걸릴 수 있습니다. 다음 명령을 통해 GitLab이 실행 중인지 확인하세요:
kubectl --namespace YOUR_NAMESPACE get pods
webservice
팟이 READY
상태이고 2/2
컨테이너를 가진 상태로 나타날 때, GitLab이 완전히 배포된 것입니다.
NGINX Ingress NodePort with SSL
이 방법에서는 kind
를 사용하여 SSL이 활성화된 NGINX 컨트롤러 서비스의 NodePort를 로컬 머신의 포트로 노출합니다.
kind create cluster --config examples/kind/kind-ssl.yaml
helm upgrade --install gitlab gitlab/gitlab \
--set global.hosts.domain=(고객님의 호스트 IP).nip.io \
-f examples/kind/values-base.yaml \
-f examples/kind/values-ssl.yaml
이제 GitLab에 https://gitlab.(고객님의 호스트 IP).nip.io
에서 액세스할 수 있습니다.
(선택 사항) 루트 CA 추가
브라우저가 우리의 자체 서명된 인증서를 신뢰하도록 하려면 루트 CA를 다운로드하고 신뢰해야 합니다:
kubectl get secret gitlab-wildcard-tls-ca -ojsonpath='{.data.cfssl_ca}' | base64 --decode > gitlab.(고객님의 호스트 IP).nip.io.ca.pem
루트 CA를 다운로드했으므로 이를 로컬 체인에 추가할 수 있습니다 (지침은 플랫폼에 따라 다르며 온라인에서 쉽게 찾을 수 있습니다).
참고:
docker login
으로 레지스트리에 로그인해야 하는 경우, 자체 서명된 인증서를 사용하도록 레지스트리를 구성하는 추가 단계를 수행해야 합니다. 더 많은 지침은 다음 위치에서 확인할 수 있습니다:
NGINX Ingress NodePort without SSL
이 방법에서는 kind
를 사용하여 SSL을 비활성화한 NGINX 컨트롤러 서비스의 NodePort를 로컬 머신의 포트로 노출합니다.
kind create cluster --config examples/kind/kind-no-ssl.yaml
helm upgrade --install gitlab gitlab/gitlab \
--set global.hosts.domain=(고객님의 호스트 IP).nip.io \
-f examples/kind/values-base.yaml \
-f examples/kind/values-no-ssl.yaml
http://gitlab.(고객님의 호스트 IP).nip.io
에서 GitLab에 액세스할 수 있습니다.
참고:
docker login
으로 레지스트리에 로그인해야 하는 경우 Docker에 보안되지 않은 레지스트리를 신뢰하도록 알려야 합니다.
DNS 처리
이 안내서는 nip.io에 네트워크 액세스가 있다고 가정합니다. 이를 사용할 수 없는 경우 minikube 문서의 DNS 처리 섹션을 참조하면 KinD에서도 작동합니다.
참고:
/etc/hosts를 편집할 때, $(minikube ip)
의 출력이 아닌 호스트 컴퓨터의 IP 주소를 사용해야 합니다.
정리
로컬 시스템을 정리하려면 다음 명령을 실행하세요:
kind delete cluster
참고:
클러스터를 생성할 때 이름을 지정했거나 여러 클러스터를 실행 중인 경우 --name
플래그로 특정 클러스터를 삭제할 수 있습니다.