Kubernetes 개발을 위한 KinD

이 가이드는 로컬 Kubernetes 개발 환경을 설정하기 위한 크로스 플랫폼 리소스로 제공됩니다.

이 가이드에서는 KinD를 사용할 것입니다. 이는 Docker를 사용하여 Kubernetes 클러스터를 생성하고, 다양한 버전과 여러 노드를 배포하는 쉬운 메커니즘을 제공합니다.

또한, 우리는 nip.io를 사용하여 192.168.1.250.nip.io와 같은 형식으로 모든 IP 주소를 호스트 이름에 매핑할 수 있습니다. 이는 192.168.1.250에 매핑됩니다. 설치가 필요하지 않습니다.

note
아래의 SSL 지원 설치 옵션을 사용할 경우, 저장소를 복제하고 변경 사항을 푸시하려면 SSH 대신 HTTPS를 통해 진행해야 합니다. 우리는 NodePorts를 통한 GitLab Shell의 서비스 노출 업데이트로 이 문제를 해결할 계획입니다.

Apple 실리콘 (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

준비가 완료되면 아래의 준비 단계를 따라 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
note
대부분의 MacOS 시스템은 en0을 기본 인터페이스로 사용합니다. 다른 기본 인터페이스가 있는 시스템을 사용하는 경우, 해당 인터페이스 이름을 en0로 대체하세요.

네임스페이스 사용

애플리케이션을 default가 아닌 네임스페이스에 설치하는 것이 모범 사례로 간주됩니다. kubectlhelm 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 파드가 2/2 컨테이너가 있는 READY 상태를 표시할 때 GitLab이 완전히 배포된 것입니다.

SSL이 포함된 NGINX Ingress NodePort

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

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으로 레지스트리에 로그인해야 하는 경우, 자체 서명된 인증서와 함께 작동하도록 레지스트리를 구성하기 위해 추가 단계를 수행해야 합니다. 추가 지침은 다음에서 찾을 수 있습니다:

SSL이 없는 NGINX Ingress NodePort

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

kind create cluster --config examples/kind/kind-no-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-no-ssl.yaml

http://gitlab.(your host IP).nip.io에서 GitLab에 접근하세요.

참고: docker login으로 레지스트리에 로그인해야 하는 경우, Docker에 불안전한 레지스트리를 신뢰하도록 지시해야 합니다.

DNS 처리하기

이 가이드는 nip.io에 네트워크 접근이 있다고 가정합니다. 만약 이것이 당신에게 사용 불가능하다면, Minikube 문서의 DNS 처리하기 섹션을 참조하시기 바랍니다. 이는 KinD에서도 작동합니다.

참고: /etc/hosts를 편집할 때는 $(minikube ip)의 출력 대신에 호스트 컴퓨터의 IP 주소를 사용하는 것을 잊지 마세요.

정리

로컬 시스템을 정리할 준비가 되면 다음 명령어를 실행하세요:

kind delete cluster

알림:

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