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

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

설치 확인하기

  1. 다음 명령으로 모든 파드가 실행 중인지 확인해요.

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
  1. 다음 명령으로 클러스터에 노드 두 개가 있는지 확인해요.

    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 클러스터가 준비되었어요.

다음 단계

더 알아보기 (Learn more)

K3s는 개발·테스트 환경에서 Calico를 빠르게 체험하기 좋은 방법이에요. 설치 후 네트워크 정책 데모를 실행하면 Calico 정책이 실제로 어떻게 동작하는지 눈으로 확인할 수 있어요.