k8s 클러스터 구축하기(with.VirtualBox)

k8s 클러스터 구축하기(with.VirtualBox)

원도우 PC위에 VirtualBox를 이용하여 쿠버네티스 클러스터를 구축하는 실습을 수행한다.

클러스터 구축에 사용할 스택은 다음과 같다.

Windows10(64bit)

VirtualBox: 오라클에서 만든 오픈소스 하이퍼바이저로, 가상머신을 띄울 수 있게 해 준다.

Ubuntu 20.04: 우분트 서버를 기준으로 쿠버네티스 클러스터를 생성한다.

k3s: 적은 리소스로도 쿠버네티스 컴포넌트를 실행할 수 있도록 경량화한 쿠버네티스 배포판이다. IoT&Edge; 디바이스 위에서 돌릴 수 있도록 가볍게 만들어졌다.

아키텍처

클러스터의 구조는 다음과 같다.

윈도우PC 위에 Oracle VirtualBox를 설치하고 Ubuntu 20.04 VM 2대를 생성한다. 이때, master와 worker가 서로 통신할 수 있고 NAT로 외부와 통신할 수 있는 'k8s-network' 네트워크 서브넷을 만든다. 이 네트워크는 '10.0.1.0/24'의 범위를 가지며, master와 worker는 해당 네트워크 안에서 각각 '10.0.1.5', '10.0.1.6'의 IP를 가지고, default gateway(Virtual NAT)는 '10.0.1.1'의 IP를 가지게 된다.

Ubuntu 20.04 Desktop 다운로드

VM에서 사용할 우분트 iso 이미지를 다운로드한다. 사이트에 접속하여 Desktop image를 선택한다.

VirtualBox 설치

사이트에 접속하여 VirtualBox platform packages > Windows hosts에서 VirtualBox 설치 파일을 다운로드한다.

설치 방법

설치 위치 정하기 (Next) > 옵션 정하기 (Next) Warning Network Interfaces (Yes) > Ready to Install (Install) 앱 디바이스 변경 허용 (예) > 이 장치 소프트웨어를 설치하시겠습니까? (설치) Finish

네트워크 및 노드 설정

NAT 네트워크 구성

노드끼리 서로 통신하고 인터넷과 연결하기 위해서 NAT 네트워크를 먼저 구성해야 한다.

CTRL + G를 눌러 환경 설정에 들어간다. (파일-환경 설정) 네트워크 클릭 새 NAT 네트워크 추가 추가된 NatNetwork 더블클릭 다음과 같이 설정한다. 네트워크 이름: k8s-network

네트워크 CIDR: 10.0.1.0/24

네트워크 옵션: DHCP 지원 (체크) 확인

확인을 누르면 가상의 NAT 네트워크가 생성된다. 이 네트워크 안에 우분투 노드 2대를 생성한다.

master 노드 설치

VM 생성

CTRL + N(새로 만들기)을 눌러 VM을 생성한다. 다음과 같이 설정한다. 이름: master

머신 폴더: 디스크 용량이 넉넉한 드라이버

종류: Linux

버전: Ubuntu (64-bit) 메모리 크기: 4,096 MB (k3s 스펙상 512 MB도 가능하나 원활한 테스트를 위해 최소 4GB를 잡는다.) 지금 새 가상 하드 디스크 만들기 VDI(VirtualBox 디스크 이미지) 하드 디스크: 고정 크기 하드 디스크 크기: 20 GB 만들기

생성이 완료되면 다음과 같은 VM 한 대가 생성된 것을 볼 수 있다.

VM 설정

CTRL + S(설정)를 누른다.

일반 고급 클립보드 공유: 양방향

네트워크 어댑터 1 네트워크 어댑터 사용하기 (체크) 다음에 연결됨: NAT 네트워크 네트워크 이름: k8s-network

확인

VM 시작 및 우분투 설치

master VM을 더블클릭하여 서버를 구동한다.

시동 디스크 선택: 다운로드한 우분투 20.04 이미지 선택

시작

English > Install Ubuntu

Keyboard layout: English > English(US) > Continue

Minimal installation > Download updates (체크 해제) > Continue

Erase disk and install Ubuntu > Install Now

Write the changes to disk? > Continue

Where are you? (Seoul) > Continue

Who are you? Your name: ubuntu Your computer’s name: master Pick a username: ubuntu Password: (사용자 지정)

Installation Complete > Restart Now

Please remove the installation medium, then press ENTER > ENTER

네트워크 설정

우분투 서버를 접속하여 네트워크를 설정한다.

우측 상단, 네트워크 아이콘 클릭

Settings 클릭

톱니바퀴 아이콘 클릭

이미 10.0.1.4로 IP가 자동으로 잡혀있는 것을 확인할 수 있지만, IP를 명시적으로 고정시키기 위해 IPv4 수동 설정을 한다.

IPv4 탭 클릭 > Manual 선택 Address: 10.0.1.4 Netmask: 255.255.255.0 Gateway: 10.0.1.1 DNS: 8.8.8.8

Apply 버튼 클릭

네트워크 반영을 위해 토글 버튼을 눌러 잠깐 껐다가 다시 켜준다.

CTRL + ALT + T를 눌러 터미널을 열고, 네트워크 설정이 정상적으로 동작하는지 확인해 보기 위해 다음 명령을 수행한다.

sudo apt update

인터넷이 정상적으로 작동하면 VM 복제를 위해 종료한다.

sudo shutdown now

worker 노드 설치

worker 복제

worker 노드는 이미 생성한 master 노드를 복제하면 된다. 종료된 master 노드를 우클릭하여 복제 메뉴를 클릭한다.

이름: worker

경로: master VM을 저장한 위치

MAC 주소 정책: 모든 네트워크 어댑터의 새 MAC 주소 생성

나머지 전부 체크 해제 > 다음

복제 방식: 완전한 복제 > 복제

복제가 완료되면 master, worker 노드 둘 다 시작한다.

Host명 변경 및 네트워크 설정

worker 노드로 접속하여 Host명 변경 및 네트워크 설정을 진행한다. master 노드를 복제했기 때문에 Host명이 master로 설정되어 있으므로, 이를 worker 로 수정한다. CTRL + ALT + T를 눌러 터미널을 열고 다음과 같은 명령을 수행한다.

sudo hostname worker sudo sh -c 'echo worker > /etc/hostname' sudo sed -i 's/master/worker/g' /etc/hosts # 터미널 종료 exit

Host명 변경 후 네트워크 세팅으로 들어가 다음과 같이 설정한다.

IPv4 탭 클릭 > Manual 선택 Address: 10.0.1.5 Netmask: 255.255.255.0 Gateway: 10.0.1.1 DNS: 8.8.8.8

Apply 버튼 클릭

네트워크 반영을 위해 토글 버튼을 눌러 잠깐 껐다가 다시 켜준다.

쿠버네티스 클러스터 구축

VM 생성은 완료되었으므로, 이제 이 VM 위에 직접 k3s 클러스터를 구축해본다.

k3s master 설정

master 노드로 접속한다.

sudo apt update sudo apt install -y docker.io nfs-common dnsutils curl # k3s master 설치 curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="\ --disable traefik \ --disable metrics-server \ --node-name master --docker" \ INSTALL_K3S_VERSION="v1.18.6+k3s1" sh -s - # master 통신을 위한 설정 mkdir ~/.kube sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config sudo chown -R $(id -u):$(id -g) ~/.kube echo "export KUBECONFIG=~/.kube/config" >> ~/.bashrc source ~/.bashrc # 설치 확인 kubectl cluster-info # Kubernetes master is running at https://127.0.0.1:6443 # CoreDNS is running at https://127.0.0.1:6443/api/v1/namespaces... # # To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. kubectl get node -o wide # NAME STATUS ROLES AGE VERSION INTERNAL-IP ... # master Ready master 15m v1.18.6+k3s1 10.0.1.1

kubectl get node라는 명령으로 master가 보이고, STATUS가 READY로 확인할 수 있다면 일단 master 노드는 정상적으로 설치가 완료된 것이다.

이제 클러스터에 worker 노드를 추가하기 위해, master 노드에서 NODE_TOKEN값과 MASTER_IP를 다음과 같이 확인한다.

# master 노드 토큰 확인 NODE_TOKEN=$(sudo cat /var/lib/rancher/k3s/server/node-token) echo $NODE_TOKEN # K10e3e22bb17ca13dd864c82e5046cbf67bc5f39e4aa13f7b5077bb5266c29f34xx::server:92af6cdc5e4892054676cf9098a9acxx MASTER_IP=$(kubectl get node master -ojsonpath="{.status.addresses[0].address}") echo $MASTER_IP # 10.0.1.4

master 노드에서 확인한 값들은 worker 노드에서 사용할 것이므로 복사해둔다.

k3s worker 설정

master 서버에서 나와 worker로 사용할 서버에 접속하여 다음과 같이 명령을 실행한다. master 노드에서 확인한 NODE_TOKEN과 MASTER_IP를 변수에 입력한다.

NODE_TOKEN= MASTER_IP= sudo apt update sudo apt install -y docker.io nfs-common curl # k3s worker 노드 설치 curl -sfL https://get.k3s.io | K3S_URL=https://$MASTER_IP:6443 \ K3S_TOKEN=$NODE_TOKEN \ INSTALL_K3S_EXEC="--node-name worker --docker" \ INSTALL_K3S_VERSION="v1.18.6+k3s1" sh -s -

worker 노드에서 설치가 완료된 이후에 다시 master 노드로 접속한다(worker 노드 종료하지 않고). 다음 명령을 실행하여 worker 노드가 추가된 것을 볼 수 있고, STATUS가 READY로 나온다면 정상적으로 쿠버네티스 클러스터를 완성한 것이다.

kubectl get node # NAME STATUS ROLES AGE VERSION # master Ready master 65m v1.18.6+k3s1 # worker Ready 2m37s v1.18.6+k3s1

Reference

from http://havving-do-it.tistory.com/200 by ccl(A) rewrite - 2021-09-02 14:26:05