이전 글에서는 k3s를 이용하여 쉽게 single node kubernetes cluster를 구축하는 법을 알아 보았다. ( https://blog.ggaman.com/1018 ) 이번 글에서는 k3s를 이용해서 multi node kubernetes cluster를 구축하는 법을 알아 보겠다. 즉, 컴퓨터 여러대를 묶어서 사용하겠다는것이다. 이전의 글을 보고 왔으면 크게 할 일이 없지만 몇가지 사소하게 설정이 필요한 부분이 있어서 이 글도 따로 작성하게 되었다.

이전글에도 적어 두었지만, 쿠버네티스는 master nodeworker node로 구분되고, master node가 worker node를 조작한다고 설명했다. 그렇기 때문에 실제 서비스가 돌아가는곳은 worker node이므로, master node의 성능이 매우 좋을 필요는 없다. 이전 글에서는 single node kubernetes cluster를 구축했기 때문에 master node와 worker node가 같은 장비였으므로, 좀 좋은 스펙을 가진 VM Instance를 생성하여 구성해 보았다.

이 글에서는 multi node cluster 를 구축하는것을 보여주려고 한다.

우선 vultr에서 master용 VM Instance를 몇개 만들어 보자. https://my.vultr.com/deploy/ 에 접근한 뒤에, Products -> Cloud Compute -> Asia -> Seoul -> Ubuntu 18.04 를 선택하자. $20 짜리 Instance 를 고른다. ( 2vCPU, 4GB, 3TB Traffic, 80GB SSD ) 시간당 가격은 50원 정도이다. vultr에 대한 사용법을 알고 싶다면 https://blog.ggaman.com/1019 링크의 내용을 참고하면 된다.

왜 $20짜리를 고르라고 하냐면, k3s 홈페이지에서 그렇게 안내하고 있기 때문이다. ^_^

https://rancher.com/docs/k3s/latest/en/installation/installation-requirements/

multi node cluster는 "안정성"과 "확장성"을 위해서 사용하는데, DB(etc, PostgreSQL, MySQL)를 따로 분리해서 설치하는것을 추천하고 있다. 하지만 우리는 "간단하게" 사용하기 위해서 설치하는것이므로, 여기에서 굳이 확인하지 않았다. 참고로, 아직 실험적인 기능을 사용하면 DQLite를 사용해서 DB에 대한 고민을 덜 해도 될 듯 하다. 관심이 있다면 다음 링크를 이용해서 확인해 보도록 하자. ( https://rancher.com/docs/k3s/latest/en/installation/ha-embedded/ )

Embedded DB 를 사용하면 굳이 DB를 따로 설치할 필요가 없다. 다만, 실험적인 기능인것을 알고 써야겠지?

k3s에 대한 설명이 좀 길었으니, 이제 다시 vultr 화면으로 돌아 가자. master는 총 3대를 만들어야 한다. 중요한 것은 server의 hostname을 모두 다르게 설정해야 한다는것이다. 서버의 이름이 같으면 클러스터 구축이 제대로 되지 않는다. 반드시 서로 다른 이름을 주고 VM Instance 를 생성하도록 하자. 이렇게 3개의 인스턴스를 생성하면 1시간에 약 100원이 소모된다.

hostname을 반드시 각자 다른 이름으로 지정해서 띄우도록 하자

이전 게시물에서 설명한 방법으로, IP, username, password 를 이용하여 ssh에 접속하도록 하자. ( https://blog.ggaman.com/1018 )

k3s를 이용하여 쿠버네티스 클러스터를 설치하는것은 이전에 이야기 했다시피 하나의 명령어만 실행하면 끝난다. 우선 master-1 서버에 아래의 명령을 이용해서 k3s를 설치하도록 하자. 여기서는 실험적(experimental) 기능이긴 하지만 DQLite를 이용하는 방법을 써 보도록 하자.

curl -sfL https://get.k3s.io | sh -s - --write-kubeconfig-mode 644 --cluster-init

당연히 별 문제 없이 실행되었을 것이다. 이제 kubectl 명령을 통해서 몇개의 node가 kubernetes cluster로 묶여 있는지 확인해 보자. 당연히 1대의 컴퓨터에서만 k3s를 설치 했으므로, 1대만 출력 될 것이다.

아직 1대의 node만 연결된 cluster

우리의 목적은 총 3대의 master node를 만드는것이므로, 나머지 2대를 master node로 만들어 보도록 하자. k3s를 설치하게 되면 기본적으로 master node로 설치된다. 그리고 나머지 2대를 처음 설치만 master node에 연결하는 형태로 master node를 늘릴 수 있게 된다. master-1 서버에서 아래의 명령을 이용해서 TOKEN 값을 얻자. TOKEN은 /var/lib/rancher/k3s/server/node-token 위치에 있다.

cat /var/lib/rancher/k3s/server/node-token

이제 master-2master-3의 서버에 ssh를 접속하여 아래의 명령을 실행하면 master node들이 늘어나게 된다. MASTER-1-IP 에 master-1의 ip를, NODE_TOKEN은 위 명령을 이용해서 얻은 값을 적어주면 된다. ( master-1 에서 설치할 때는 --cluster-init 을 넣어 줬지만, 나머지 2대의 서버에 실행시킬 아래 명령에는 그 값이 없다는것에 주의해야 한다. )

curl -sfL https://get.k3s.io | sh -s - --write-kubeconfig-mode 644 --server https://MASTER-1-IP:6443 --token NODE_TOKEN

내 환경에서는 아래와 같이 입력하였다.

curl -sfL https://get.k3s.io | sh -s - --write-kubeconfig-mode 644 --server https://158.247.192.125:6443 --token K1081d886e341e3172b0c9f14e920652df428c0c0c5ba00fa040661c3a2018443a2::server:8883b89d6fdd7d48f7ab0b29c6479177

master-2master-3에서 위 명령을 설치한 이후에 다시 master-1에 와서 kubecl get nodes 명령을 입력해 master node가 몇개로 변했는지 확인해 보자.

master가 3개로 변했다!!!!

위 과정을 거쳐 master가 총 3개가 생성되었다. master를 3개나 만들어 두었으니, 한대쯤은 죽어도 kubernetes 가 잘 운영 될 것이다.

master를 여러개 만들었으니, 이제 worker 들도 여러개를 등록해 보자. k3s에서는 workeragent 라는 이름으로 부른다. agent를 등록하는 방법도 매우 간단하다. agent를 위한 VM Instance를 더 만들도록 하자. 이 때도 각 VM의 이름을 다르게 줘야 한다는것을 잊지 말자. 이번에는 VM Instance를 생성할때, $40 ( 4 vCPU, 8GB ) 4개를 생성하겠다. 1시간에 약 300원이 소모된다. worker에 더 많은 서비스들이 동작할 것이기 때문에 높게 잡아서 진행하는것이다. 만약 테스트를 위해서라면 $20 짜리를 4개를 생성해도 된다. 약 150원 정도 소모 된다. 그것도 부담되면 2개만 생성해도 된다. ^^ 중요한것은 이름을 다르게 줘야 한다는것이다.

worker도 이름을 다르게 주자

worker를 모두 생성하고 나면, worker-1에서 worker-4까지 모든 worker에 ssh로 접속하여 아래의 명령을 날려 주도록 하자. 아까 master-2, master-3 에 날려준 형태와 비슷하긴 한데, 옵션이 아니라 환경변수로 master-1의 주소와, master-1의 TOKEN 정보를 전달하는 형식이다.

curl -sfL https://get.k3s.io | K3S_URL=https://158.247.192.125:6443 K3S_TOKEN=K1081d886e341e3172b0c9f14e920652df428c0c0c5ba00fa040661c3a2018443a2::server:8883b89d6fdd7d48f7ab0b29c6479177 sh -

agent를 설치하고 나면 제일 마지막에 k3s-agent 가 잘 실행되었다고 출력 된다.

모든 worker에서 위 명령을 실행 뒤, master-1의 kubectl get nodes 명령을 실행해 몇개의 node가 cluster로 묶였는지 확인해 보자. ( 반드시 master-1에서 실행할 필요는 없다. master 중 아무데서나 실행해도 된다. )

기존 master 3개에, worker 4개가 추가 되었다.

이번에도 마찬가지로 주저리 설명이 길었지만, 실제로 worker에서 실행해야 하는 명령은 아래와 비슷한 단 한줄의 명령이다.

curl -sfL https://get.k3s.io | K3S_URL=https://$(MASTER-1-IP):6443 K3S_TOKEN=$(MASTER-1-TOKEN) sh -

이로써 k3s를 이용해서 multi node cluster를 구성하는것까지 해 보았다. 이렇게 k3s는 kubernetes를 쉽게 설치하여 사용할 수 있는 방법을 제공한다. 심지어 multi node cluster 역시 쉽게 구성할 수 있도록 제공해 준다.

이렇게 구성된 kubernetes cluster를 편리하게 관리할 수 있게 해 주는 Rancher라는 서비스도 있다. 다만 Rancher를 사용하려면 kubernetes 에 대하여 어느 정도는 알고 있어야 한다. 그렇기 때문에 Rancher를 사용하기 전에 Kubernetes를 사용하는것에 대해서 공부를 해야 한다. 편리하게 해 준다는거지, 모르는데도 잘 동작하게 해 주지는 않는다. 

이 블로그에서 kubernetes 자료를 만들어 업데이트 할지는 모르겠다. 설명해야 할 게 너무 많고, 기반 지식도 어느정도는 필요하기 때문에 되도록이면, 책을 구매해서 보는것을 추천한다. 사실 내가 잘 모른다. ㅎㅎ. 혹시 docker 라는것도 잘 모른다면, docker와 kubernetes를 동시에 다루는 책도 있으니, 그런 책을 사서 보는것도 좋을 것이다. 보통 책에서는 minikube 로 kubernetes 환경을 만들어서 설명한다. 그 때 minikube가 아니라, k3s를 이용하여 구축해 보면 더 좋은 경험을 해 볼 수 있을것이라 생각한다.

요즘에 회사에서 Kubernetes 관련 업무를 하고 있다. 실제로 내가하는건 별로 없고, 대부분 팀의 다른분들이 다 하지만, 그래도 뭔가를 좀 알아야 하니깐 집에서도 이것저것 해 보고 있다. Kubernetes를 하니깐 당연히 Cluster를 구축해 보는게 좋을것이다. GCP나 AWS에 모두 Kubernetes cluster를 제공해 주고 있으나, 이것저것 직접 해 보려고 일부러 VPS(Virtual Private Server)를 여러개 묶어서 해 보고 있다. Kubernetes를 모두 이해하는건 어려우니 지금은 k3s (https://k3s.io/) 를 이용해서 해 보고 있다. 다음 기회에 k3s에 관해서 써 볼 수 있도록 하겠다.

잡설은 그만. VPS를 제공해 주는데가 여러곳이 있는데, 이 중에서 내가 사용해 본 Vultr에서 VPS를 만드는것을 알아 보자.

Vultr

vultr.com

vultr(벌쳐-라고 읽는다)는 많은 VPS 서비스 제공자 중에 한명이다.  처음 vultr을 선택한 이유는, 그 당시에는 가입후 $10 크레딧 충전시 무료 $20 크레딧을 추가로 제공했기 때문이었다. ( 지금은 스폰서 링크를 이용하면 $100을 더 준다. ) 벌써 $20~30 정도를 두 번 더 충전해서 쓰고 있다. 무엇보다 쉽게 VPS를 만들고 설정도 단순하기 때문에 대충 만들어서 테스트 해 보기 좋다는 점이 계속 사용하게 만들었다.

그리고 아시아 지역에는 도쿄와 싱가폴 리전만 있었는데, 최근에 서울 리전에 새로 만들어져서 빠르게 접속해서 쓸 수 있다. 다만, 서울 리전은 가끔씩 Sold Out 되어 있는 상태가 자주 있고, 서울 리전에서 VPS를 만들어도, 정작 public IP를 확인 해 보면 일본 IP가 오는 경우도 있기도 한 점은 별로긴 하다.

참고로 주소지를 한국으로 두면, VPS 사용료 이외에 부가세 10%가 더 발생한다고 경고가 나온다. 주소지를 미국으로 바꾸어 두었더니, 더 이상 그런 메세지가 안 나오긴 하는데 실제로 안 나올지는 좀 더 지켜 봐야 겠다.

만약 vultr에 가입하실 거라면 아래 링크를 통해서 가입 부탁드립니다. 아래 링크로 가입을 하시고 $10 달러 이상 크레딧을 결재하시면, 가입하신분께 30일동안 사용 가능한 추가 $100 크레딧을 제공해, 총 $110 크레딧을 사용하실 수 있습니다. $25 크레딧을 충전하시면 30일동안 사용가능한 추가 $100 크레딧을 제공해, 총 $125 크레딧을 받으실 수 있으며, 저에게도 $25 크레딧이 제공됩니다. 이왕이면... $25 크레딧 충전 부탁드립니다. ^_^

www.vultr.com/?ref=8582867-6G

VPS를 만들어 보자

Credit card 등록 및 결재

우선 돈 부터 채우자. 위 링크를 클릭하시어 가입을 하시고, 로그인 하면 Credit Card를 등록하는 화면이 나옵니다. 이때 $10 혹은 $25, 혹은 그 이상을 골라서 결재를 하게 되면, $100 크레딧을 추가로 받을 수 있습니다.

인스턴스 생성

로그인 후 Products -> Deploy Instance 를 선택하자

vultr products

VPS 스펙 정하기 - 1

Cloud Compute를 선택하고, Asia -> Seoul(Sold out이면 Tokyo)로 리전을 선택한뒤, OS 를 선택한다.

vultr VPS spec

VPS 스펙 정하기 - 2

스크롤을 내려서 서버의 스펙을 선택한다. ( 클릭하면 크게 볼 수 있습니다. )

vultr VPS price list

금액 확인 및 계산

가격을 보면 알겠지만. 시간당 단위로 계산된다. 예를들면 위 그림에서 선택한 두번째 스펙인 1vCPU, 2G Memory, 50GB SSD, 2TB Bandwidth 를 선택하면 1달에는 $10, 그러니깐 1.2만원이고, 1시간은 $0.015, 약 20원 이다. 간단하게 테스트 해 보고 싶을때 좋다. 좀 쓸만한 서버 스펙은, 위 그림에서 4번째 스펙이다. 4vCPU, 8GB Memory, 4TB Bandwidth, 160GB SSD. 이것도 1시간 가격으로만 보면 72원 정도 된다. 미국의 일부 리전에는 IPv6 한정으로, 1vCPU, 512MB Memory, 500GB Bandwidth, 10GB SSD로, 시간당 5원 짜리도 있다. ( 하지만, IPv6는 아무도 안 쓰니깐... ㅎㅎ )

Kubernetes Cluster 구축을 위해서 Master서버를 1번 스펙 3대, Worker서버를 3번 스펙 2대, 4번 스펙 1대를,  4시간을 테스트 해 보았다고 하면 아래의 비용이 나온다.

Master : 1vCPU, 1GB Memory, 1TB Bandwidth, 25GB SSD - 1시간 $0.007 * 4시간 * 3대 =  $0.084 = 약 100원
Worker : 2vCPU, 4GB Memory, 3TB Bnadwidth, 80GB SSD - 1시간 $0.03 * 4시간 * 2대 = $0.24 = 약 290원
Worker : 4vCPU, 8GB Memory, 4TB Bandwidth, 160GB SSD - 1시간 $0.06 * 4시간 * 1대 = $0.24 = 약 290원
총 : 680원

4시간동안 장비를 빌려서 공부를 하는데 700원 이하로 든다면 충분히 해 볼만 하다고 생각된다. 좀 고사양 장비를 가지고 필요할 때만 사용하면 $25만 충전해도 몇달은 거뜬했었다. 예전에 $25를 충전해서, 각 대륙별, 국가별 리전에서 네트워크 문제도 확인하고, 속도도 측정해 보고... 몇달동안 요긴하게 잘 써 먹었다.

1시간 단위로 금액이 청구 되므로, 딱딱 끊어서 쓰고 싶다면 체크를 잘해야 한다. 하지만, 시간당 비용이 크게 비싸지 않기 때문에, 크게 무리가 없다. 트래픽도 시간당 단위로 나눠서 사용된다. 즉, 1시간을 사용하고 종료하면, 트래픽도 1시간치 이내로 써야, 1시간 비용만 나온다. 즉, 서버는 10일만 사용했는데, 트래픽을 한달치를 다 쓰게 되면 한 달 치 비용이 청구된다. 

스펙 확인 후 VPS 생성

화면 아래에 있는 Deploy Now 버튼을 클릭한다.

vultr - depoly instance

생성된 VPS 인스턴스 확인

서버를 만들고 나면 인스턴스의 목록을 볼 수 있다. 추후 이 화면을 보고 싶다면, 왼쪽의 Products 아이콘을 누르면 된다.

vultr products - VPS instance list

생성된 VPS 정보 보기

만들어진 서버 (Cloud Instance)를 클릭하여 들어가보면, 아래와 같이 public IP 정보와 Username 그리고 password가 있다. ssh key를 등록하지 않고, password 만으로 접속할 수 있으니 매우 편리하다. 간단하게 shell 로 접속하고 싶다면, 화면의 상단 오른쪽에 있는 아이콘 중에서, 모니터 모양 안에 ">" 가 있는 버튼을 누르면, 바로 console 로 접근 가능하다. 서버를 삭제하고 싶다면 화면의 상단 오른쪽에 있는 아이콘 중에서 휴지통 모양의 아이콘을 누르면 된다.

vultr server information

이로써 Vultr에서 VPS를 생성하는 방법을 알아 보았다. 다음에는 기회가 되면 vultr에서 VPS를 발급 받고, k3s를 이용해서 kubernetes cluster를 구축하는 법을 알아 보겠다.

만약 vultr에 가입하실 거라면 아래 링크를 통해서 가입 부탁드립니다. 아래 링크로 가입을 하시고 $10 달러 이상 크레딧을 결재하시면, 가입하신분께 30일동안 사용 가능한 추가 $100 크레딧을 제공해, 총 $110 크레딧을 사용하실 수 있습니다. $25 크레딧을 충전하시면 30일동안 사용가능한 추가 $100 크레딧을 제공해, 총 $125 크레딧을 받으실 수 있으며, 저에게도 $25 크레딧이 제공됩니다. 이왕이면... $25 크레딧 충전 부탁드립니다. ^_^

www.vultr.com/?ref=8582867-6G

+ Recent posts