이전 글에서는 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를 사용하려고 준비중이다. 하지만 쿠버네티스를 "사용"하는 것과 "설치"하는것은 많은 차이가 있다. 사용하면서 알아야 할 개념이 60이라면, 설치하면서 알아야 할 개념은 80, 운영까지 포함해야 100이 된다고 생각한다. 즉, 단순히 사용만 할 것인데, 나머지 40까지의 개념을 알아야 할까?

그래서 Kubernetes 쪽 세상에서는 단순하게 사용할 수 있도록 하기 위해서 여러 쉬운 도구를 제공한다. 그 중에서 유명한게 minikube, k3d, kind, k3s 등이 있다. 4 개를 대충 사용해 봤고, 처음에는 k3d로 클러스터를 구축해 봤었다. k3d는 docker container에 k3s가 설치되어 kubernetes를 구축하는 형태이다. 그러므로 반드시 docker를 따로 설치해야 했다. 그리고 가장 문제가 되었던것은 설명서가 너무 간단하게 되어 있어서, 무언가 궁금한것을 찾아 보려고 해도 찾을 방법이 없었다. 또한 테스트 해 봤던 시기에는 공식 홈페이지( https://k3d.io/ )의 설명은 3.x 설명이었는데, release된 버젼은 2.x 대였다. 오늘 확인해 보니 저번주에 3.0 이 release가 되었네?? 그래도 관심이 있는 사람이라면, k3d 홈페이지를 방문해서 확인해 보는것도 나쁘지는 않겠다.

k3d를 찾아서 조사를 하다가, 원래 대상으로 생각하지 않았던 k3s를 조사하게 되었고 설치 및 구성이 편하기 때문에 이 글에서는 k3s를 이용하여 single node cluster(컴퓨터 1대)를 구축하거나, 혹은 multi node cluster(컴퓨터 여러대)를 구축하는 법에 대해서 적어 보도록 하겠다. ( 쿠버네티스쪽 세상에서 "node"라고 이야기 하는것들은 그냥 컴퓨터라고 생각하면 된다. )

k3s - 가벼운 쿠버네티스

k3s는 Rancher라는 회사에서 쿠버네티스를 경량화 시켜 둔 것이다. ( https://rancher.com/docs/k3s/latest/en/ ) 쿠버네티스를 영어로 쓰면 kubernetes 라고 쓰는데, 이걸 일일이 적기 힘드니깐 k와 s사이에 8글자가 있다고 해서 k8s 라고 줄여서 적는다. 그렇다면 k3s는 뭐냐? k8s 보다 가볍게 만들었다고 k3s 라는 이름을 지어 둔 것이다. 

어떻게 읽어야 하는지도 가이드를 해 주지 않았다. 그래서 나는 '케이쓰리에스'라고 읽고 있다. 우리나라에서는 이걸 보통 어떻게 읽어야 하는지 알면 좀 알려 주세요. ㅎㅎ.

https://github.com/rancher/k3s - 본인들도 공식 발음을 안 정했다는....

Kubernetes에는 수 많은 기능들이 포함되어 있고, 또한 수많은 플러그인들이 따로 존재한다. 하지만, k3s는 이를 단순화 시켜, 잘 사용하지 않는 기능들이나, 각종 실험적인 기능들을 제거 했고, 또한 몇가지 꼭 필요한 플러그인들을 기본적으로 포함시켜서 배포하고 있기 때문에, 단순히 설치하는것만으로도 어렵지 않게 쿠버네티스를 운영해 볼 수 있도록 해 두었다. k3s 를 선택해 소개하는것도 이 때문이다.

우선 간단하게 쿠버네티스 클러스터의 구조를 이야기 하고, 거기에 맞춰서 쿠버네티스 클러스터를 구축해 보는법에 대해서 알아 보자. 쿠버네티스는 관리를 위한 master와 실제 서비스가 동작하는 worker로 이루어진다. ( 더 자세히는 etcd라던지, api-server라던지 하는것들도 있는데 굳이 여기에서는 설명하지는 않는다. ) 당연히 single node cluster(컴퓨터 1대로 만드는 클러스터)의 경우, 한 대의 컴퓨터가 master와 worker의 역할을 모두 하는것이고, multi node cluster(컴퓨터를 여러개 묶어서 만드는 클러스터)의 경우, master와 worker가 분리되어 있는 형태다. master가 worker를 조종하는 역할이므로, master가 1대만 있고, 그 1대가 죽어버리면 쿠버네티스 클러스터 전체가 동작하지 않을테니 보통 3대를 둔다.

https://rancher.com/learning-paths/introduction-to-kubernetes-architecture/

우선 single node cluster를 구축하는 방법을 알아 보자.

여기서는 vultr에서 VM Instance를 만들어서 테스트 하는 것을 설명하겠지만, 자신의 Ubuntu 서버가 있다면 그곳에 그냥 설치해도 된다. vultr에서 VM Instance 를 생성하는 방법은 이미 작성한 글이 있으니 그곳을 참고하도록 하자. ( https://blog.ggaman.com/1019 ) 링크가 클릭하기 귀찮을 수도 있으니 이곳에서도 대충 기록하도록 하겠다.

Vultr ( https://my.vultr.com/ ) 에 로그인 한 뒤, Products -> Deploy Instance 를 눌러 새로운 인스턴스를 생성하는 화면을 띄우자.

VM Instance를 만들기 위해서 Products -> Deploy Instance 를 누르자

지금은 single node cluster를 만들어 볼 것이다. 즉, master와 worker가 같은 컴퓨터에 있을테니, 좀 넉넉한 크기의 인스턴스를 생성해 주도록 하자. Cloud Computer -> Asia -> Seoul ( 서울이 Sold out이면 Tokyo ) -> Ubuntu 18.04 를 선택하고, VM Instance는 한달에 $40가 소모되는 인스턴스를 고르자. ( 4core, 8GB RAM, 4TB Traffic, 160GB SSD ) 비용이 매우 크게 느껴질 수 있는데, 1시간에 100원이 안되니깐, 크게 걱정할 필요는 없다.

1시간에 100원이 부담스럽다면, $20의 비용이 드는 인스턴스를 생성해도 상관없다. $20짜리 인스턴스는 1시간에 50원이 든다. 사실 k3s는 훨씬 더 작은 환경에서도 돌아 가지만, 그렇다고 하더라도 그 보다 작은 사이즈는 추천하지 않는다. 1 vCPU를 사용하기 때문에 속도가 좀 느리고, "이렇게 쉽게 뭘 할 수 있다고?" 라는것을 테스트 하기에는 사양이 딸린다. ( https://rancher.com/docs/k3s/latest/en/installation/installation-requirements/ )

VM Instance type을 고른 뒤에, 화면 아래쪽에 있는 Deploy now 버튼을 눌러 인스턴스를 생성하도록 하자.

약 1분정도 기다리면 VM Instance가 생성된다. Products -> Instances 를 누른 뒤에, VM 목록중에 생성된 "Cloud Instance"를 클릭하여 서버의 정보를 확인하자. 그리고 IP Addressusername, password를 확인 한 뒤 ssh로 접속하자. password 옆에 있는 눈 모양 아이콘을 누르면 password를 볼 수 있고, 겹쳐진 종이 모양을 누르면 암호를 복사할 수 있다.

ssh에 접속하고 나면 명령어 딱 1개만 치면 k3s 가 설치 된다. 하지만 나중을 위해서 아래중 두번째 명령을 이용해서 설치하도록 하자.

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

몇가지 shell script와 k3s 라는 바이너리를 다운받게 되는데, 용량은 약 50Mbyte 정도 된다. 일반적으로는 약 15초 ~ 30초 정도 지나면 설치가 완료되나, 다운로드 속도가 느린 경우에는 50Mbyte 정보를 다운 받는 시간을 기다려야 한다. 지금 이 문서를 작성하면서 테스트를 하고 있는데, 지금은.. 왜 그런지 느리네... 흠.. 원래는 이렇게 느리지 않았는데... 아무튼 좀 기다리면 곧 설치가 된다.

잘 설치 되었는지 확인하자. 원래 kubernetes를 관리하기 위해선 kubectl 이라는 프로그램을 설치해 사용한다. 하지만 k3s를 설치하면 굳이 kubectl을 직접 설치하지 않아도 된다. k3s kubectl 이라는 명령을 통해서 kubectl을 실행 시킬 수 있다. k3s kubectl nodes 명령을 이용해서 kubernetes cluster가 잘 설치 되었는지 확인해 보자. ( kubectl get nodes 명령은 쿠버네티스에 몇개의 node(컴퓨터) 가 있는지 확인할 수 있는 명령이다. )

kubectl  get nodes 로 현재 node 갯수를 알 수 있다.

k3s kubectl get all -A 명령을 이용해서 쿠버네티스에 pod나 service, loadbalancer 가 잘 설정되어 있는지도 확인해 보자.

kind에서는 LoadBalancer를 사용하려고 하면 private IP 대역이 잡혀 서비스를 직접 돌려서 테스트하기 쉽지 않은데, k3s의 경우에는 traefik이 같이 설치되고 LoadBalancer의 external ip가, 지금 설치된 컴퓨터의 IP를 가지게 되므로 실제 서비스를 올린뒤 접속해서 테스트 해보기 좋다.

kubectl 명령이 필요할 때마다 k3s kubectl이라고 치면 귀찮으니, 쉽게 alias를 만들 수도 있지만 그냥 kubectl을 설치하도록 하자. 설치하는 방법도 여러가지가 있다. snap 을 이용해서 설치하는게 제일 편하긴 하지만, snap은 home directory 위치에 따라서 또 다른 설정이 필요할 수도 있으므로, 여기에서는 그냥 package manager 즉, apt-get을 이용해서 설치하는 방법을 가이드 한다. 물론 이 내용은 공식 홈페이지에서도 찾을 수 있다. ( https://kubernetes.io/docs/tasks/tools/install-kubectl/ )

sudo apt-get update && sudo apt-get install -y apt-transport-https gnupg2
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl

kubectl을 설치한 직후에 바로 kubectl get nodes 명령을 사용하면 예전과를 다르게 에러 메세지가 발생하는 경우가 있다. kubectl은 사용자 홈 디렉토리에 .kube/config 파일을 읽어 kubernetes 환경 설정 정보로 사용하기 때문이다. 하지만 k3s를 설치하면 kubernetes 환경 설정 정보가 /etc/rancher/k3s/k3s.yaml 위치에 있다. 그러므로 이를 복사해 주어야 한다. 아래 명령을 수행하려면 k3s를 설치할때 --write-kubeconfig-mode 644 명령을 줘야 root 권한이 아니더라도 별 문제 없이 수행 할 수 있다.

mkdir .kube # 이미 디렉토리가 만들어져 있는 경우도 있다.
cp /etc/rancher/k3s/k3s.yaml ~/.kube/config

설명이 길고 이것저것 실행해 보느라 길어보이지만, 정리해 보면 아래 명령어 한줄이면 single node cluster kubernetes를 구축할 수 있다.

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

모든 테스트가 끝나면 깔끔하게 삭제하고 싶을것이다. 아래의 명령을 이용하면 k3s를 삭제하면서 kubernetes의 모든 것들을 삭제할 수 있다. k3s를 설치할 때 각종 스크립트가 설치 된다는 정보가 있는데 그곳에 스크립트 파일의 위치를 보여 주고 있다. 궁금하다면 스크롤을 올려서 설치 스크린샷에 아래의 스크립트가 있는것을 확인해 보자.

/usr/local/bin/k3s-uninstall.sh

글이 너무 길어지니 여기서 1차 정리를 하고, multi node cluster를 구축하는것은 다음글에서 다루도록 하겠다. 궁금하면 오백원..은 아니고, https://k3s.io/ 에 가면 agent 설치하는 설명이 있는데, 그곳을 먼저 봐도 되겠다. ㅋㅋ

요즘에 회사에서 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

공부 겸.. 업무 겸(?)...

  • 전화 시스템에 대해서 알아야 할 필요가 있기도 했고, 궁금하기도 했다.
  • 온라인에서 이것저것을 찾아서 볼 수 있지만... 참... 온라인 자료는 정리가 잘 되어 있지 않다.
  • 그러다 한 블로그를 찾았는데 ( https://www.nexpert.net/715 ) 글이 잘 정리 되어 있었다.
  • 마침 책이 나왔다는 글까지 봐서 책을 구매.
  • 가격은 좀 비싼 편(2.8만원)이다. 부크크( http://www.bookk.co.kr/ ) 라는 플랫폼을 이용하는데, 자가 출판 플랫폼이다.
  • 그러니.. 좀 비쌀 수 밖에... 하지만 책 쓴 사람에게 많이 돌아 간다면 이해 할 수 있다. ( 회사 돈이기도 했고 ㅎ )

책 읽기 전

  • 이 책에서는 전화망에 관련되는 정보가 있다.
  • 그 중에서도 SIP 관련 내용이 대부분이나, "전화망 그 자체"에 대한 정보도 많기 때문에, 전화망에 대해서 궁금하다면 읽으면 괜찮을거라 생각한다.
  • 다만, 원래 관심이 있었던 IP-PBX 에 대한 내용은 단어 정도만 나오긴 하지만...
  • 그래도, 많은 도움이 되었다.

책 정리

  • 이 책의 주요 내용을 모두 요약하는건 너무 어렵다. 특히 SIP 프로토콜 부분은 RFC 문서를 설명하고 있는거라서...
  • 그러므로, 전화망에 대한 몇가지 지식이나, 용어들에 대해서만 정리 하도록 하겠다.

정리

주요 용어

  • IDF : Intermediate Distribution Frame, 중간 단자함. 각층에 전화선이 모여 있는 곳. 아파트에서는 각층의 계단실 같은곳에 있다.

  • MDF : Main Distribution Frame. 주 배선반. 국선 단자함. 건물의 지하나 1층에 모든 전화선이 모이는곳.

  • PBX : Private Branch Exchange, 사설 전화를 처리하는 장비. 내선은 외부로 나가지 않고, PBX에서 내선끼리 연결된다. 작은것은 전화 2개 정도만 처리하는것도 있고, 많은것은 100개 가까이 처리하는것도 있는듯 하다.

  • PSTN : Public Switched Telephone Network. 일반 전화망. 전화선이 모인 PBX 끼리 연결된 전화망이라고 생각하면 된다.

  • DTMF : Dual Tone Multiple Frequency. 전화 번호를 누르면 나오는 "띠 띠" 소리가, 2가지 이상의 톤을 같이 소리를 내는것이다. 이 정보를 이용해서 전화 번호를 전달한다.

  • FXO : 전화기 포트 중, 전화국에서 오는쪽의 포트. 즉 벽에 설치 되어 있는 포트를 FXO 라고 부른다.

  • FXS : 전화기 포트 중, 전화기에 연결되는 쪽의 포트. 즉 전화가에 연결되는 포트를 FXS 라고 부른다.

  • IP-BPX : Internet Protocol Private Branch Exchange. PBX와 동일하지만, 전화선이 아니라, 인터넷을 이용해서 전화를 할 수 있도록 하는 장비

  • VoIP : Voice over Internet Protocol. 인터넷을 이용하는 전화. 일반적으로는 인터넷을 이용해서 전화를 걸고 이를 PSTN(일반전화선)으로 전화를 받거나, 그 반대의 경우에 대해서 이야기 한다. 아날로그 음성을 디지털 패킷으로, 디지털 패킷을 아날로그 음성으로 변환해야 하는데, VoIP GateWay가 이 역할을 한다.

  • SIP : 일반전화선이 아니라, 인터넷을 이용해서 전화를 할 수 있는 프로토콜. 인터넷을 이용해서 전화를 할 수 있는 몇가지 프로토콜이 있긴한데, 현재는 다들 SIP를 쓰고 있음.

  • 아.. 귀찮으니깐 나머지는 생략... ㅎㅎ.

허허 참.... 또 뜬다..

  • 근데 좀 다른 점을 발견해서 기록으로...
  • 테스트 주소 : http://woollimcoop.org/?m=bbs&bid=contact
  • 재현 방법 : 위 주소에 접속 한 뒤, F5를 빠른 시간에 여러번 누른다.

문제 추측 1 : 팝업을 허용한 곳이 있어서 생기는 문제 아닐까?

  • 웹브라우져를 사용하다보면 팝업을 허용하게 되는곳이 한 두 곳 생긴다.
  • 팝업을 허용한 A 사이트가 있고, B 사이트에서는 팝업이 막혀 있을때, B 사이트에서 A 사이트의 url을 iframe 등으로 loading 한 뒤, popup을 띄우면 가능하지 않을까? 라는 생각이 들었다.
  • 그래서 팝업이 허용되어있는 모든 사이트를 삭제 했지만, 팝업이 뚫고 나오는 문제 발생
  • 재현 동영상
  •  

문제 추측 2 : 익스텐션(확장) 문제가 아닐까?

  • 설치된 익스텐션 중 일부의 기능이나, 버그를 우회해서 팝업을 띄우는게 아닐까 생각을 해 보았다.
  • 그래서 모든 익스텐션을 disable 시키고 테스트 해 보았으나, 실패...
  • 그래서 팝업 블로커 익스텐션만 따로 설치해서 테스트 해도, 팝업이 뚫고 나오는 문제 발생
  • 재현 동영상
  •  

그래서..

  • 걍 이쯤에서 포기하고 크롬을 새로 깔까 생각중...;;;
  1. June 2019.08.08 09:30

    모비온 회사에서 아래 링크와 같이 차단하는 방법을 안내하고 있는데요,
    이 방법으로 차단이 되는 건지 한번 봐주시면 좋겠어요
    http://www.mediacategory.com/mediaCategory/ad/mobon_user_policy_linfo.html

    • 2019.08.12 23:41 신고

      안녕하세요 ^_^
      해당 내용은 "맞춤 광고"에 대한 내용입니다.

      "맞춤 광고"라는건 사용자의 사용 기록을 확인하여, 그에 맞는 광고를 보여주는 것입니다.

      팝업이 뜨는것과를 별개로 보입니다. ^_^

  2. Ann 2019.12.11 00:54

    안녕하세요, 3탄까지 보고 많이 참고했었는데 4탄을 이제야 봣네요... 저는 관련 문제에 접근해야 했는데 팝업이 안떠서 고민이었습니다. ㅠㅠ

    개인적으로 팝업이 뜨는 이유를 확인해 보면 '시점' 문제인 것 같습니다. 연속적으로 클릭이 발생하게 되는데 이게 대부분의 경우에는 막히지만 간혹가다가 브라우저서 block이 발동하기 전에 뚫고 나오는 놈들이 있는 것 같은.... 허허

    해당 유입 분석을 해보면 크롬 말고도 삼성 인터넷, 사파리(잡힙니다. 왠지는 모르겠으나), 안드로이드 기타 웹뷰, 익플 등등 다양하게 적용되고 있었습니다. ㅜ

    • 2019.12.11 12:36 신고

      답변 감사드립니다. ^_^ 저 역시 그렇게 생각하고 있습니다.

      재미난건... 저도 요즘에는 팝업이 안 뜨고 있습니다. ㅎㅎ ;; 제가 별 달리 한 일이 없는것 같은데 말이죠. ㅎㅎ.

      답글 달아 주셔서 감사합니다. ^_^

오늘 또.. 광고가...

  • 광고 팝업 관련해서 댓글을 달아 주신 내용을 참고삼아 #_enliple 을 검색해 보았더니.. 세상에. 링크의 끝에 #_enliple 이 붙어 있는게 너무 많더라...

어떻게 저 링크가 만들어 질까?

  • 궁금해서 링크가 있는것들을 찾아서 소스코드를 확인해 보니 자주 보였던 mobon.net 이 보인다. 그리고 dreamsearch.or.kr 도 보인다.
  • mobon.net에서 사용되는 javascript는 아래와 같다.
    • 코드를 간단히 설명하면,
      • 해당 사이트에 접근해서 url에 #_enplie라는 hash가 없으면, url 주소의 끝에 #_enplie를 붙여 주고
      • hash가 변경되면(위에서 변경했음), 광고로(adUrl)로 이동한다.
    • 아래의 동영상 확인
  • 즉, 걍 저 스크립트가 페이지에 있으면 무조건 url의 hash 부분을 변경하게 된다.
  • 이후, 사용자들은 페이지를 facebook등에 공유하게 되면 url의 끝에 #_enplie가 붙어 있는 url을 공유하게 되는것이다.
  •  얼마나 링크들이 많이 퍼졌는지를 트래킹하기 위한 정보로 사용하는것인지, 아니면 광고를 잘 처리 했다는 의미로 사용하는것인지는 모르겠다.

오늘은 여기까지. ㅎ.

이런이런.. 또 뜨네?

  • 그래서 이제는 코드까지 좀 뜯어 보기로

코드는?

  • YTN에 페이지에 접근했는데 광고가 또 떴다.
  • 그래서 이제는 코드를 뜯어 보기로...
  • 개발자 도구를 띄웠는데.. 에러가 나있네?

에러난쪽 코드 분석...

  • 에러는 다음의 jquery에서 시작된 것이다.
    • 이 파일을 열어 보면, mobon.net 이라는 사이트에서 jquery를 다시 긁어 오는것을 알 수 있다.
    • mobon.net 사이트에 접근해 보면, 이전에 조사한 사이트인 인라이플라는 회사가 연관되어 있는것을 알 수 있다.
      • 또한, mediacategory 사이트에 접근할때, megadata.co.kr 이라는 사이트에서 javascript를 다운 받는다. 해당 자바스크립트에는 인플라이 광고주 랜딩처리 한다고 적혀 있다.
  • 또한 해당 코드를 확인해보면 의심스러운 몇가지 행동을 하는 코드를 발견할 수 있다.
    • HTML Document에 a tag를 만들어 추가하고, click event를 발생시키는 코드. 이후 추가한 a tag를 제거하고 있다.
    • 빈 새창을 띄우고, focus를 보낸뒤, 창을 닫는 동작
    • 모바일 웹 브라우져면 동작하지 않도록
    • Safari면 동작하지 않도록
    • 볼만한 부분은 아래 부분이다. 계속해서 about:blank popup을 만들고 focus를 주고, close 시키는것을 0.5초마다 반복하도록 한다.

엇...

  • 실수로 창을 닫아 버렸다. -_-;;;
  • 오늘은 여기까지... ;;;
  1. 한수 배우고 싶습니다 2019.06.09 21:05

    수고 많으십니다. 선생님.
    #_enliple"target="_blank'>~~ 요런 해시태그를 캐다 보니 이 홈피까지 와서 많이 배우게 될 거 같은데요
    이 해시태그가 정확히 무얼 의미하는 것인지, 저 광고 회사와 어떤 연관이 있는지 정확하게 좀 알고 싶습니다.

    • 2019.06.26 13:06 신고

      헐... 저도 아직 가끔씩 광고창이 뜨고 있습니다. 크롬 플러그인에서 무언가가 있는지도 확인해 봐야 할 듯 해요.

      저 광고회사랑은 반드시 연관이 있다고 생각하고 있습니다. ^_^

  2. 돈덕후만 2019.06.10 09:30 신고

    감사합니다.
    너무 궁금한데, 실력이 미천하여 추적하지는 못하고 고수님의 글 보고 있습니다.
    막을 수 없더라도 이유는 알고 싶어서 계속 방문하겠습니다.

    • 2019.06.26 13:09 신고

      음.. 아마도 hosts 파일을 변경하는것으로 광고 뜨는것을 막을 수는 있을듯 합니다.

      https://vfxpedia.tistory.com/8

      위 글을 확인해 보시고, 해당 회사의 도메인도 등록해 주시면 동작하지 않을듯 합니다.

      잘 되면 알려 주세요 ^_^

크롬에서 가끔 광고창이 뜬다. 그것도 팝업으로..

  • 요즘에는 웹브라우져에서 기본적으로 팝업을 다 막아 둔다.
  • 그런데도 가끔씩 팝업으로 광고가 뜨는 경우가 있다.
  • 근데 이게 맨날 뜨는건 아니라서, 그냥 참고 쓰고 있었는데...

이거 안되겠다.

  • 궁금하기도 하고 말야... ㅎ.

어떤 경우에 떴었지?

  • 우선 팝업으로 광고창이 뜰 때 상황을 대략 보면
    • 새 탭으로 링크를 열때 주로 뜨더라 ( 내가 거의 모든 창을 새 탭으로 띄워서.. 그렇게 생각 된 것일수도... )
    • 새 탭으로 링크를 열면, 해당 창에서 popup이 blocking 된다는 아이콘이 여러번 나온뒤, 팝업창이 뜨고 광고가 나온다.

어떤 과정을 통해서 뜨지?

  • 크롬에서 팝업이 뜨면, "이전"으로 갈 수 없으므로, 팝업을 띄운 놈을 알기 어려운 문제가 있다.
  • 하지만, 팝업 창에서 F12나, Ctrl+Shift+I를 누르면 나오는 개발자 도구에서 정보를 얻을 수 있는데...
  • 그 중 network 상태를 보면 앞 부분에 appier.net 에 대해 연결 되는것을 볼 수 있다.
  • 그 정보를 분석해 보면
    • 출발지(referer) : www.mediacategory.com
    • URL Request : anylist.c.appier.net
    • 광고할 사이트 : dongwonmall.com

그래서 각 사이트는 뭔가?

  • URL 주소가 몇개가 있는데, 각 사이트는 뭔지 확인해 보자.

    • 광고할 사이트 dongwonmall은... 말 그대로 동원몰 이다.

    • Request를 보내는 appier.net 는 광고 마케팅 업체이다.

    • mediacategory.com 에 접근해서 정보를 보면, 많은양의 cookie 정보를 가지고 있는것을 알 수 있다.

      • mediacategoty.com 의 도메인 정보를 보면 주인이 enliple.com 인것을 알 수 있다.

      • enliple 역시 광고 플랫폼 회사다.

어떻게 크롬 팝업 block을 뚫고 뜨는거지?

  • 이건 아직 모르겠다. 다음번에 팝업 blocker를 뚥고 나올때, 다시 보고 분석하는것으로.. 끝. ㅋ.

결론

  • 광고 업체는 어떻게든.. 먹고 사는구나...
  • 이 업체에 광고를 맡긴 업체에게 뭐라고 해야, 하려나? 이런식의 광고는 사용자에게 나쁜 경험을 준다고?

+ Recent posts