KinD(Kubernetes in Docker)를 활용한 Kubernetes 개발

이 안내서는 로컬 Kubernetes 개발 환경을 구성하는 다중 플랫폼 리소스로 제공되는 것입니다. 이 안내서에서는 KinD를 사용할 것입니다. 이는 Docker를 사용하여 Kubernetes 클러스터를 생성하고 여러 노드에 대한 쉬운 배포 메커니즘을 제공합니다.

또한 nip.io를 사용할 것인데, 이는 192.168.1.250.nip.io와 같은 형식을 사용하여 모든 IP 주소를 호스트 이름에 매핑할 수 있게 해줍니다. 별도의 설치가 필요하지 않습니다.

참고: 아래의 SSL 활성화 설치 옵션을 사용할 경우, 리포지토리를 복제하고 변경 사항을 푸시하려면 SSH 대신 HTTPS를 통해 수행해야 합니다. 우리는 GitLab Shell의 서비스 노출을 NodePorts를 통해 업데이트하여 이 문제를 해결할 계획입니다.

Apple silicon (M1/M2)

kind는 macOS의 로컬 Kubernetes 개발 환경을 제공하기 위해 colima와 함께 사용될 수 있습니다. 여기에는 M1M2 변형이 포함됩니다.

종속성 설치

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

    softwareupdate --install-rosetta
    

VM 빌드

colima VM을 생성하십시오:

colima start --cpu 4 --memory 16 --disk 40 --profile docker --arch aarch64 --vm-type=vz --vz-rosetta

준비가 되면 준비를 참고하여 kind와 함께 GitLab을 설치할 수 있습니다.

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를 사용하여 네임스페이스로 context를 전환하고 추가 타이핑을 건너뛰십시오.

종속성 설치

asdf (자세한 정보)를 사용하여 다음 도구를 설치할 수 있습니다:

  • kubectl
  • helm
  • kind

kind는 로컬 Kubernetes 클러스터를 실행하기 위해 Docker를 사용하므로 Docker를 설치하십시오.

구성 예제 가져오기

GitLab 차트 리포지토리에는 다음 단계에서 참조된 모든 예제가 포함되어 있습니다. 최신 버전을 가져오려면 리포지토리를 복제하거나 기존 체크아웃을 업데이트하십시오:

git clone https://gitlab.com/gitlab-org/charts/gitlab.git

GitLab Helm 차트 추가

시스템을 GitLab Helm 차트에 액세스할 수 있도록 설정하려면 다음 명령을 따르십시오:

helm repo add gitlab https://charts.gitlab.io/
helm repo update

배포 옵션

다음의 필요에 따라 다음 배포 옵션 중 하나를 선택하십시오.

참고: 첫 번째 완전한 배포 프로세스는 네트워크 및 시스템 리소스에 따라 약 10분이 소요될 수 있습니다. Cloud 네이티브 GitLab 이미지가 다운로드됩니다. 다음 명령을 사용하여 GitLab이 실행되는지 확인하십시오:

kubectl --namespace YOUR_NAMESPACE get pods

webservice 파드가 READY 상태에서 2/2 컨테이너를 보여줄 때 GitLab이 완전히 배포된 것입니다.

NGINX Ingress NodePort with SSL

이 방법에서는 NGINX 컨트롤러 서비스의 NodePort를 SSL로 활성화하여 로컬 머신의 포트에 노출하기 위해 kind를 사용합니다.

kind create cluster --config examples/kind/kind-ssl.yaml
helm upgrade --install gitlab gitlab/gitlab \
  --set global.hosts.domain=(your host IP).nip.io \
  -f examples/kind/values-base.yaml \
  -f examples/kind/values-ssl.yaml

그럼 이제 https://gitlab.(your host IP).nip.io에서 GitLab에 액세스할 수 있습니다.

(선택사항) 루트 CA 추가

브라우저가 우리의 셀프 서명 인증서를 신뢰하려면 루트 CA를 다운로드하고 신뢰해야 합니다:

kubectl get secret gitlab-wildcard-tls-ca -ojsonpath='{.data.cfssl_ca}' | base64 --decode > gitlab.(your host IP).nip.io.ca.pem

이제 루트 CA가 다운로드되었으므로 로컬 체인에 추가할 수 있습니다(지침은 플랫폼에 따라 다르며 온라인에서 쉽게 찾을 수 있습니다).

참고: docker login으로 레지스트리에 로그인해야 하는 경우 셀프 서명 인증서와 함께 레지스트리를 구성하는 추가 단계가 필요합니다. 자세한 지침은 다음 위치에서 확인할 수 있습니다:

NGINX Ingress NodePort without SSL

이 방법에서는 kind를 사용하여 NGINX 컨트롤러 서비스의 NodePort를 로컬 머신의 포트에 SSL을 비활성화하여 노출시킬 것입니다.

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에 액세스하세요.

note
docker login으로 레지스트리에 로그인해야 하는 경우 Docker에게 신뢰할 수 없는 레지스트리를 신뢰하도록 알려야 합니다.

DNS 처리

이 가이드는 nip.io에 대한 네트워크 액세스가 있다고 가정합니다. 사용할 수 없는 경우 minikube 문서의 DNS 처리 부분을 참조하십시오. 이 부분은 KinD에 대해서도 동작합니다.

note
/etc/hosts를 편집할 때, $(minikube ip)의 출력이 아닌 호스트 컴퓨터의 IP 주소를 사용해야 합니다.

정리

로컬 시스템을 청소할 준비가 되면, 다음 명령을 실행하세요:

kind delete cluster
note
클러스터를 생성할 때 이름을 지정하거나 여러 클러스터를 실행 중인 경우 --name 플래그를 사용하여 특정한 클러스터를 삭제할 수 있습니다.