K3s 멀티 노드 설치
K3s는 단일 바이너리로 패키징된 경량 Kubernetes 구현체예요. 이 튜토리얼은 테스트나 개발 워크로드를 위한 멀티 노드 K3s 클러스터를 약 10분 만에 만들고 Calico를 설치하는 방법을 안내해요. 노드 추가부터 Calico 설치(Operator/Manifest 두 가지 방식)까지 차례로 따라 해 보세요.
출처: 문서
본문
큰 그림
이 튜토리얼은 약 10분 만에 Calico가 설치된 멀티 노드 K3s 클러스터를 만들어 줘요.
가치
K3s는 단일 바이너리로 패키징된 Kubernetes의 경량 구현체예요.
여러분이 얻게 되는 것의 세부 내용:
| Policy | IPAM | CNI | Overlay | Routing | Datastore |
|---|---|---|---|---|---|
| Calico | Calico | Calico | VXLAN | Calico | Kubernetes |
?
시작하기 전에
-
다음 요구 사항을 충족하는 Linux 호스트를 준비해요.
- x86-64 프로세서
- CPU 1개
- RAM 1GB
- 여유 디스크 공간 10GB
- Ubuntu 18.04 (amd64), Ubuntu 20.04 (amd64)
참고: K3s는 ARM 프로세서도 지원하지만, 이 튜토리얼은 x86-64 프로세서 환경에서 테스트되었어요. 자세한 내용은 이 링크를 참고하세요.
방법
컨트롤 플레인 인스턴스 초기화하기
K3s 설치 스크립트는 환경 변수로 조정할 수 있어요. 여기서는 flannel을 비활성화하고, k3s 기본 네트워크 정책을 비활성화하고, 파드 IP CIDR을 바꾸는 추가 인자를 넣어요.
참고: 인자 전체 목록은 이 링크에서 볼 수 있어요.
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--flannel-backend=none --disable-network-policy --cluster-cidr=192.168.0.0/16" sh -
경고: 네트워크에서 이미 192.168.0.0/16을 사용 중이라면 위 명령에서 192.168.0.0/16을 다른 값으로 바꿔 다른 파드 네트워크 CIDR을 선택해야 해요.
K3s 인스턴스 원격 접근 활성화하기
클러스터에 원격 접근을 설정하려면 먼저 시스템에 kubectl이 설치되어 있는지 확인해요.
참고: OS에 kubectl을 설치하는 방법을 잘 모르겠다면 이 링크를 참고하세요.
K3s는 서버의 /etc/rancher/k3s/k3s.yaml에 kubeconfig 파일을 저장해요. 클러스터에 원격 접근하고 싶은 시스템의 ~/.kube/config로 서버에 있는 k3s.yaml 내용 전체를 복사해요.
K3s 클러스터에 노드 추가하기
클러스터에 노드를 추가하려면 두 가지 정보가 필요해요.
K3S_URL: 메인 노드의 IP 주소예요.K3S_TOKEN: 메인 노드의/var/lib/rancher/k3s/server/node-token파일에 저장되어 있어요 (1단계). 노드 인스턴스에서 다음 명령을 실행해 클러스터에 조인해요.
참고:
serverip와mytoken은 여러분 값으로 바꾸는 것을 잊지 마세요.
curl -sfL https://get.k3s.io | K3S_URL=https://serverip:6443 K3S_TOKEN=mytoken sh -
Calico 설치하기
Tab: Operator
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
Tigera Operator를 설치해요.
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.33.0/manifests/tigera-operator.yaml
필요한 커스텀 리소스를 만들어 Calico를 설치해요. 이 매니페스트에서 사용할 수 있는 구성 옵션에 대한 자세한 내용은 Tigera Operator API 참조를 참고하세요.
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.33.0/manifests/custom-resources.yaml
참고: 이 매니페스트를 만들기 전에 내용을 읽어 보고, 설정이 여러분 환경에 맞는지 확인하세요. 예를 들어 파드 네트워크 CIDR에 맞게 기본 IP 풀 CIDR을 바꿔야 할 수 있어요.
Tab: Manifest
다음 명령으로 Calico를 설치해요.
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.33.0/manifests/calico.yaml
참고: 새 탭에서 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
설치 확인하기
- 다음 명령으로 모든 파드가 실행 중인지 확인해요.
Tab: Operator
NAMESPACE NAME READY STATUS RESTARTS AGE
tigera-operator tigera-operator-c9cf5b94d-gj9qp 1/1 Running 0 107s
calico-system calico-typha-7dcd87597-npqsf 1/1 Running 0 88s
calico-system calico-node-rdwwz 1/1 Running 0 88s
kube-system local-path-provisioner-6d59f47c7-4q8l2 1/1 Running 0 2m14s
kube-system metrics-server-7566d596c8-xf66d 1/1 Running 0 2m14s
kube-system coredns-8655855d6-wfdbm 1/1 Running 0 2m14s
calico-system calico-kube-controllers-89df8c6f8-7hxc5 1/1 Running 0 87s
Tab: Manifest
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-node-9hn9z 1/1 Running 0 23m
kube-system local-path-provisioner-6d59f47c7-drznc 1/1 Running 0 38m
kube-system calico-kube-controllers-789f6df884-928lt 1/1 Running 0 23m
kube-system metrics-server-7566d596c8-qxlfz 1/1 Running 0 38m
kube-system coredns-8655855d6-blzl5 1/1 Running 0 38m
-
다음 명령으로 클러스터에 노드 두 개가 있는지 확인해요.
kubectl get nodes -o wide다음과 비슷한 결과가 나와야 해요.
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME k3s-master Ready master 40m v1.18.2+k3s1 172.16.2.128 <none> Ubuntu 18.04.3 LTS 4.15.0-101-generic containerd://1.3.3-k3s2 k3s-node1 Ready <none> 30m v1.18.2+k3s1 172.16.2.129 <none> Ubuntu 18.04.3 LTS 4.15.0-101-generic containerd://1.3.3-k3s2
축하해요! 이제 Calico와 Traefik을 갖춘 멀티 노드 K3s 클러스터가 준비되었어요.
다음 단계
- Kubernetes 네트워크 정책 데모를 실행해 네트워크 정책이 동작하는 모습을 그래픽 뷰로 확인해 보세요.
더 알아보기 (Learn more)
K3s는 개발·테스트 환경에서 Calico를 빠르게 체험하기 좋은 방법이에요. 설치 후 네트워크 정책 데모를 실행하면 Calico 정책이 실제로 어떻게 동작하는지 눈으로 확인할 수 있어요.