본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

Kind 멀티 노드 설치

원문 보기 위키 갱신

Kind는 Docker 컨테이너 "노드"로 로컬 Kubernetes 클러스터를 띄우는 도구예요. 이 튜토리얼을 따라 하면 약 10분 만에 Calico가 설치된 멀티 노드 Kind 클러스터를 손에 넣을 수 있어요. 테스트나 개발 환경을 빠르게 구성할 때 딱 맞는 방법이에요.

출처: 문서

본문

큰 그림

이 튜토리얼을 따라 하면 약 10분 만에 Calico가 설치된 멀티 노드 Kind 클러스터를 만들 수 있어요.

가치

kind는 Docker 컨테이너 "노드"를 사용해서 로컬 Kubernetes 클러스터를 실행하는 도구예요.

여러분이 얻게 되는 결과의 자세한 내용은 다음과 같아요:

정책 IPAM CNI 오버레이 라우팅 데이터스토어
Calico Calico Calico VXLAN Calico Kubernetes

?

시작하기 전에

방법

멀티 노드 kind 클러스터 만들기

KIND는 표준 CNI 플러그인(ptp, host-local, …)과 간단한 netlink 라우트에 기반한 기본 네트워킹 구현("kindnetd")을 함께 제공해요. Calico CNI를 사용하려면 이 기본 CNI를 비활성화해야 해요.

Kind 클러스터 생성은 구성 파일로 바꿀 수 있어요. 여기서는 기본 네트워킹 구현(기본 CNI)을 비활성화하고 pod IP CIDR을 바꾸는 kind 구성을 제공할 거예요.

  1. 다음 명령을 실행해서 기본 CNI를 비활성화하고 Calico CNI를 쓸 준비를 해요:
cat > values.yaml <<EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
networking:
  disableDefaultCNI: true
  podSubnet: 192.168.0.0/16
EOF
  1. 다음 명령을 실행해서 컨트롤 플레인 하나와 워커 노드 두 개로 Kind 클러스터를 시작해요:
kind create cluster --config values.yaml --name dev
  1. 다음 명령을 실행해서 클러스터에 이제 노드가 세 개 있는지 확인해요:
kubectl get nodes -o wide

다음과 비슷한 결과가 나와야 해요.

NAME                STATUS      ROLES           AGE    VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION    CONTAINER-RUNTIME
dev-control-plane   NotReady    control-plane   4m     v1.25.0   172.18.0.2    <none>        Ubuntu 22.04.1 LTS   5.10.0-17-amd64   containerd://1.6.7
dev-worker          NotReady    <none>          4m     v1.25.0   172.18.0.4    <none>        Ubuntu 22.04.1 LTS   5.10.0-17-amd64   containerd://1.6.7
dev-worker2         NotReady    <none>          4m     v1.25.0   172.18.0.3    <none>        Ubuntu 22.04.1 LTS   5.10.0-17-amd64   containerd://1.6.7

Calico 설치하기

Tab: Operator

  1. Calico 커스텀 리소스 정의를 설치해요.

클러스터가 Kubernetes 1.36 이상 기반이라면:

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.33.0/manifests/v3_projectcalico_org.yaml

클러스터가 Kubernetes 1.34 또는 1.35 기반이라면:

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.33.0/manifests/v3_projectcalico_org-v1beta1.yaml
  1. Tigera Operator를 설치해요.
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.33.0/manifests/tigera-operator.yaml
  1. 필요한 커스텀 리소스를 만들어 Calico를 설치해요. 이 매니페스트에서 사용할 수 있는 구성 옵션에 대한 자세한 내용은 Tigera Operator API 레퍼런스를 참고하세요.

SECONDARY: 이 매니페스트를 만들기 전에 내용을 읽어 보고 설정이 여러분의 환경에 맞는지 확인하세요. 예를 들어 pod-network-cidr을 교체했다면 이 파일에서도 바꿔 주어야 해요.

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.33.0/manifests/custom-resources.yaml

Tab: Manifest

다음 명령을 사용해서 Calico를 설치해요.

kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.33.0/manifests/calico.yaml

SECONDARY: CRD 번들이 워낙 커서 kubectl apply가 요청 크기 제한을 초과할 수 있어요. 대신 kubectl create나 kubectl replace를 사용하세요.

SECONDARY: 새 탭에서 YAML 보기도 가능해요.

다음과 같은 출력이 보여야 해요.

configmap/calico-config created
customresourcedefinition.apiextensions.k8s.io/bgpconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/bgppeers.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/blockaffinities.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/clusterinformations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/felixconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworksets.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/hostendpoints.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamblocks.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamconfigs.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamhandles.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ippools.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/kubecontrollersconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networksets.crd.projectcalico.org created
clusterrole.rbac.authorization.k8s.io/calico-kube-controllers created
clusterrolebinding.rbac.authorization.k8s.io/calico-kube-controllers created
clusterrole.rbac.authorization.k8s.io/calico-node created
clusterrolebinding.rbac.authorization.k8s.io/calico-node created
daemonset.apps/calico-node created
serviceaccount/calico-node created
deployment.apps/calico-kube-controllers created
serviceaccount/calico-kube-controllers created

Calico 설치 확인하기

다음 명령을 실행하면 클러스터의 Calico 설치를 확인할 수 있어요.

watch kubectl get pods -l k8s-app=calico-node -A

다음과 비슷한 결과가 나와야 해요. 어떤 방식으로 설치했는지에 따라 네임스페이스는 다를 수 있다는 점에 유의하세요.

NAMESPACE     NAME                READY   STATUS    RESTARTS   AGE
kube-system   calico-node-2xcf4   1/1     Running   0          57s
kube-system   calico-node-gkqkg   1/1     Running   0          57s
kube-system   calico-node-j44hp   1/1     Running   0          57s

watch를 빠져나오려면 ctrl+c를 누르세요.

축하해요! 이제 Calico가 탑재된 Kind 클러스터가 생겼어요.

정리하기

삭제 명령을 실행하면 이 튜토리얼에서 만든 클러스터가 사라져요.

kind delete cluster --name dev

다음 단계

필수

추천 튜토리얼

더 알아보기 (Learn more)

Kind 클러스터는 로컬 테스트에 최적이라 실습을 망칠 걱정 없이 마음껏 정책을 시험해 볼 수 있어요. 설치가 끝났다면 calicoctl 설치와 기본 네트워크 정책 튜토리얼로 이어서 학습해 보세요. 문제가 생기면 watch kubectl get pods -l k8s-app=calico-node -A로 calico-node 파드 상태부터 확인하는 게 좋아요.