microk8s를 이용한 간편한 Kubernetes 클러스터 구축 (AWS Ubuntu)

NewNewDaddy·2023년 10월 10일
0
post-thumbnail

0. INTRO

  • Microk8s를 활용하여 UBUNTU 기반 EC2에서 쿠버네티스 클러스터를 간단하게 구축해보자!
  • 참고 문서 -> microk8s getting started

1. VPC 구축

1. VPC 구성도

  • 두 개의 리전에 각각 하나씩의 public, private subnet을 두었고, public은 Internet Gateway에, private는 NAT Gateway로 연결되어 인터넷 통신이 가능하도록 구성하였다.
  • Master Node는 public subnet에, Worker Node는 private subnet에 위치하게 될 것이다.
  • 하지만 이런 구조의 경우 NAT Gateway 비용이 나가게 되므로 단순 개발용의 경우 Master와 Worker를 모두 public subnet에 두어 클러스터를 구축하여도 상관없다.

2. Master Node의 Security Group

  • 공식 문서에서 사용되는 port에 대한 목록을 확인 할 수 있다. -> microk8s required ports

    • 위의 port들 중 16443, 25000 은 worker node join시 반드시 open되어 있어야 한다.
  • Master에 연결되는 SG는 위의 port들에 22, 80, 443 port까지 추가되어 open시켜놓았다.

2. EC2 server에서의 작업

1. Master Node

  1. docker & docker-compose install

    sudo apt-get update -y &&\
        apt-transport-https &&\
        ca-certificates &&\
        curl &&\
        software-properties-common
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
    sudo apt update
    apt-cache policy docker-ce
    sudo apt install -y docker-ce
    sudo usermod -aG docker $USER
    
    # install docker-compose
    sudo apt-get install docker-compose-plugin
  2. microk8s install

    sudo apt update
    
    # hostname change
    sudo hostnamectl set-hostname master
    
    # microk8s install
    sudo snap install microk8s --classic --channel=1.28
    sudo usermod -a -G microk8s $USER
    sudo chown -f -R $USER ~/.kube
    sudo su - $USER
    
    # additional service install
    microk8s enable dashboard
    microk8s enable dns
    microk8s enable registry
    microk8s enable istio
    
    # alias 설정
    {
        echo alias kc="'microk8s kubectl'"
        echo alias kcd="'microk8s kubectl describe'"
    } >> ~/.bashrc
    
    source ~/.bashrc
  3. master node 확인

    kc get nodes

2. Worker Node

  1. master server에서 ssh를 통해 worker server에 접속

    sudo ssh ubuntu@[worker internal IP] -i [key.pem]

  2. docker & docker-compose install

    sudo apt-get update -y &&\
        apt-transport-https &&\
        ca-certificates &&\
        curl &&\
        software-properties-common
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
    sudo apt update
    apt-cache policy docker-ce
    sudo apt install -y docker-ce
    sudo usermod -aG docker $USER
    
    # install docker-compose
    sudo apt-get install docker-compose-plugin
  3. microk8s install

    sudo apt update
    
    # hostname change
    sudo hostnamectl set-hostname node1
    
    # microk8s install
    sudo snap install microk8s --classic --channel=1.28
    sudo usermod -a -G microk8s $USER
    sudo chown -f -R $USER ~/.kube
    sudo su - $USER

3. Node Join

1. Master Node

microk8s add-node

  • 위 command를 입력하면 아래와 같은 문장들이 출력된다.

    From the node you wish to join to this cluster, run the following:
    microk8s join 10.0.0.10:25000/fdcb6153fe7321e0418d569514daa83b/b312fd124686
    
    Use the '--worker' flag to join a node as a worker not running the control plane, eg:
    microk8s join 10.0.0.10:25000/fdcb6153fe7321e0418d569514daa83b/b312fd124686 --worker
    
    If the node you are adding is not reachable through the default interface you can use one of the following:
    microk8s join 10.0.0.10:25000/fdcb6153fe7321e0418d569514daa83b/b312fd124686
    microk8s join 172.17.0.1:25000/fdcb6153fe7321e0418d569514daa83b/b312fd124686
  • 이 중 'microk8s join 10.0.0.10:25000/ ~ ~ ~ ~ / ~ ~ ~ ~ --worker' 명령을 worker node에 입력해주면 된다.

2. Worker Node

sudo microk8s join 10.0.0.10:25000/fdcb6153fe7321e0418d569514daa83b/b312fd124686 --worker

3. Node 추가 확인

  • 조금 기다린 후 master node에서 'kc get nodes' 명령을 입력해보면 worker nodes가 잘 추가된 것을 확인할 수 있다.

4. Role 이름 수정

  • Master Node Role Labeling

    kc label node [MASTER HOSTNAME] node-role.kubernetes.io/master=master

  • Worker Node Role Labeling

    kc label node [WORKER HOSTNAME] node-role.kubernetes.io/worker1=worker

0. OUTRO

  • 구축하는 중간에 다른 일들이 껴있어서 Kubectl 명령의 출력에 보이는 AGE는 시간이 쫌 오래 지나게 나왔지만 실제로 EC2에 접속하여 클러스터 구축까지 5분이 채 걸리지 않았던 것 같다.
  • 복잡한 설정들 없이 직관적인 명령들 몇개만 치면 정말 빠르게 쿠버네티스 클러스터를 구축할 수 있고 microk8s는 운영환경에서도 사용이 가능할 정도라고 하니 장점이 많은 Tool이라 생각된다.
profile
데이터 엔지니어의 작업공간 / #PYTHON #CLOUD #SPARK #AWS #GCP #NCLOUD

0개의 댓글