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)

kindcolima와 함께 사용하여 macOS에서 로컬 Kubernetes 개발 환경을 제공하는 데 사용할 수 있습니다. 이는 M1M2 변형을 포함합니다.

의존성 설치

  • MacOS 버전이 13 (Ventura) 이상인지 확인하세요.
  • colima를 설치하세요.
  • Rosetta를 설치하세요:

    softwareupdate --install-rosetta
    

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 플래그로 특정 클러스터를 삭제할 수 있습니다.