우노
[Kubernetes] MacOS 에서 VirtualBox 로 Kubernetes Cluster 구성하기 본문
[Kubernetes] MacOS 에서 VirtualBox 로 Kubernetes Cluster 구성하기
운호(Noah) 2022. 2. 21. 23:33들어가기 앞서,
- Kubernetes Cluster 를 구성하는 방법은 다양합니다.
- Minikube을 이용하는 방법, 클라우드 플랫폼의 VM을 이용하여 구축하는 방법,
- 라즈베리파이 보드를 구매하여 클러스터를 만드는 방법 등 다양한 방법들이 있습니다.
- 해당 포스트에서는 MacOS 위에 VirtualBox 를 설치하여, 쿠버네티스 클러스터를 구축하는 방법에 대해서 살펴보겠습니다.
설치 스펙
- MacOS
- VirtualBox 가 설치된다면, 어떤 호스트든 괜찮습니다.
- VirtualBox
- Master, Worker node 용 VM 을 생성할 수 있도록 하는 툴입니다.
- Ubuntu 20.04
- 우분트 서버를 기준으로 쿠버네티스 클러스터를 생성해보겠습니다.
- k3s
- 적은 리소스로도 쿠버네티스 컴포넌트를 실행할 수 있도록 경량화한 쿠버네티스 배포판입니다.
- IoT & Edge 디바이스 위에서 돌릴 수 있도록 가볍게 만들어졌습니다.
클러스터 구조
- 해당 그림에서 Host (윈도우) 는 Host (Mac) 으로 보시면 됩니다.
- 우선, PC 위에 Oracle VirtualBox 를 설치하고, Ubuntu 20.04 VM 2대 (Master, Worker) 를 생성합니다.
- 또한, Master 와 Worker 가 서로 통신할 수 있고, NAT 로 외부와 통신할 수 있는, k8s-network 라는 네트워크 서브넷을 생성합니다.
- 이 네트워크는 10.0.1.0/24 의 범위를 가집니다.
- 이 때, Master 와 Worker 는 해당 네트워크 안에서 각각 10.0.1.5, 10.0.1.6 의 IP 를 가지고
- Nat gateway(Virtual NAT)는 10.0.1.1 의 IP 를 가집니다.
진행 순서
- Ubuntu 20.04 Desktop 다운로드
- VirtualBox 설치
- 네트워크 서브넷 생성
- Master Node 생성
- VM 설정
- Master Node VM 시작 및 우분투 설치
- Master Node 네트워크 설정
- Worker Node 생성
- Woker Node Host명 변경 및 네트워크 설정
- 모든 VM 생성 완료
- Master Node k3s 설정
- Worker Node k3s 설정
- VM 별 SSH 접속 설정
- VM 별 SSH 접속을 위한 포트포워딩 설정
Ubuntu 20.04 Desktop 다운로드
VM 에서 사용할, Ubuntu 20.04 이미지를 다운로드합니다.
https://releases.ubuntu.com/20.04/
VirtualBox 설치
- 다운로드 링크
- https://www.virtualbox.org/wiki/Downloads
- OS X hosts 클릭 [MacOS 버전]
네트워크 서브넷 생성
노드끼리 서로 통신하고, 인터넷과 연결하기 위해서, 먼저 서브 네트워크를 생성합니다.
VirtualBox 의 환경 설정 → 네트워크 → 네트워크 생성 → 네트워크 편집을 클릭한 뒤, 아래와 같이 설정합니다.
Master Node 생성
새로 만들기를 클릭한 뒤, 아래와 같이 설정합니다.
이후, 아래와 같이 설정합니다.
- 메모리 크기: 1024 MB
- k3s 스펙상 512 MB 도 가능합니다.
- 하드 디스크 : 지금 새 가상 하드 디스크 만들기
- 하드 디스크 파일 종류 : VDI(VirtualBox 디스크 이미지)
- 물리적 하드 드라이브에 저장 :
고정 크기
- 파일 위치 및 크기 :
20 GB
- 메모리 크기: 1024 MB
생성이 완료되면, 아래와 같은 VM 이 생성된 것을 화인할 수 있습니다.
VM 설정
생성한 Master Node VM 을 우측 클릭한 뒤, 설정을 클릭합니다.
일반 → 고급 → 클립보드 공유를 양방향으로 설정합니다.
네트워크 → 어댑터 1 → 아래와 같이 설정합니다.
디스플레이 → 그래픽 컨트롤러 → VBoxVGA 로 선택합니다.
Master Node VM 시작 및 우분투 설치
Master VM 을 더블클릭하여 서버 실행 및 접근합니다.
시동 디스크 선택 : 다운로드 받은 우분투 20.04 이미지를 선택합니다.
이후, 아래와 같이 설정합니다. (일부는 사용자의 취향에 맞게 설정합니다.)
- English → Install Ubuntu
- Keyboard layout : English → English(US) → Continue
- Minimal installation 선택 → Download updates while installing Ubuntu 체크 해제 → 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
Master Node 네트워크 설정
Master Node 에 접속합니다.
우측 상단의 네트워크 아이콘 클릭 → Settings 클릭 → Network → Wired 우측의 톱니바퀴 아이콘 클릭
이미 IP가 10.0.1.4 로 잡혀져있지만, IP를 고정시키기 위해 IPv4 수동 설정을 합니다.
- IPv4 탭 클릭 → Manual 선택
- Address :
10.0.1.4
- Netmask :
255.255.255.0
- Gateway :
10.0.1.1
- DNS :
8.8.8.8
- Address :
- Apply 버튼 클릭
- 네트워크 반영을 위해 토글 버튼을 눌러 잠깐 껐다가 다시 켜줍니다.
- IPv4 탭 클릭 → Manual 선택
CTRL + ALT + T 를 눌러 터미널을 연 뒤, 네트워크 설정이 정상적으로 동작하는지 확인해 보기 위해 다음 명령을 수행합니다.
sudo apt update
인터넷이 정상적으로 작동하면 VM 복제를 위해 Master 서버를 종료합니다.
sudo shutdown now
Worker Node 생성
Worker Node 를 설치하는 것은 조금 더 쉽습니다.
- 이미 생성한 Master Node 를 복제하면 되기 때문입니다.
종료된 Master Node 를 우클릭하여 복제를 클릭합니다.
이후, 아래와 같이 설정합니다.
- 이름 : worker1
- 경로 : master VM 을 저장한 위치에 저장합니다.
- MAC 주소 정책 : 모든 네트워크 어댑터의 새 MAC 주소 생성
- 나머지 전부 체크 해제 → 계속
- 복제 방식 : 완전한 복제 → 복제
복제가 완료되면 Master, Worker 노드를 둘다 시작합니다.
Woker Node Host명 변경 및 네트워크 설정
Worker Node 로 접속하여 Host명을 변경합니다.
- Master Node를 복제했기 때문에, Host명이 master 로 설정되어 있습니다.
- 이것을 worker1 로 수정합니다.
CTRL + ALT + T 를 눌러 터미널을 연 뒤, 아래 명령어를 통해, Host 명을 worker1 로 변경합니다.
sudo apt install vim -y sudo vim /etc/hostname
Host명을 변경한 뒤, 네트워크 세팅으로 들어가 아래와 같이 설정합니다.
- IPv4 탭 클릭 → Manual 선택
- Address:
10.0.1.5
- Netmask:
255.255.255.0
- Gateway:
10.0.1.1
- DNS:
8.8.8.8
- Address:
- Apply 버튼 클릭
- 네트워크 반영을 위해 토글 버튼을 눌러 잠깐 껐다가 다시 켜줍니다.
- IPv4 탭 클릭 → Manual 선택
모든 VM 생성 완료
- Master Node VM 과 Worker Node VM 은 생성되었습니다.
- 이제 VM 위에 직접 k3s 클러스터를 구축해봅시다.
Master Node k3s 설정
Master Node 에 접속한 뒤, 터미널에 아래 명령어들을 입력합니다.
sudo apt update # docker 설치 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 27m v1.18.6+k3s1 10.0.1.1 ...
kubectl get node
라는 명령어로, Master Node 가 보이고,STATUS
가Ready
라면,- 일단 Master Node는 정상적으로 설치가 완료된 것입니다.
이제 클러스터에 Worker Node 를 추가하기 위해,
Master Node 에서 아래 명령어를 통해,
NODE_TOKEN
값과MASTER_IP
를 확인합니다.# master 노드 토큰 확인 NODE_TOKEN=$(sudo cat /var/lib/rancher/k3s/server/node-token) echo $NODE_TOKEN # K10e6f5a983710a836b9ad21ca4a99fcxx::server:c8ae61726384c19726022879xx MASTER_IP=$(kubectl get node master -ojsonpath="{.status.addresses[0].address}") echo $MASTER_IP # 10.0.1.4
- Master 노드에서 확인한 값들을 복사합니다. (Worker Node 에서 사용하기 위해)
Worker Node k3s 설정
Master 서버에서 나와, Worker 서버에 접속하여 아래와 같이 명령어를 실행합니다.
sudo apt update # docker 설치 sudo apt install -y docker.io nfs-common curl NODE_TOKEN=master에서 확인한 토큰 입력 MASTER_IP=master에서 얻은 내부IP 입력 # k3s worker 노드 설치 curl -sfL https://get.k3s.io | K3S_URL=https://$MASTER_IP:6443 \ K3S_TOKEN=$NODE_TOKEN \ INSTALL_K3S_EXEC="--node-name worker1 --docker" \ INSTALL_K3S_VERSION="v1.18.6+k3s1" sh -s -
- Master Node 에서 확인한 NODE_TOKEN 과 MASTER_IP 를 변수에 입력합니다.
Worker Node 에 k3s 설치를 완료된 이후에, Worker Node 를 나와, 다시 Master Node 로 접속합니다.
아래 명령어를 실행하여 worker 노드가 추가된 것을 확인합니다.
STATUS 가 Ready 로 나온다면 정상적으로 쿠버네티스 클러스터를 완성한 것입니다.
kubectl get node # NAME STATUS ROLES AGE VERSION # master Ready master 40m v1.18.6+k3s1 # worker Ready <none> 17m v1.18.6+k3s1
- worker 노드가 정상적으로 클러스터에 추가되려면 시간이 조금 걸립니다.
VM 별 SSH 접속 설정
SSH 접속하고자하는 VM 에 접근한 뒤, 아래 과정을 반복해 SSH 를 설정합니다.
# vim 설치 sudo apt-get install vim -y # SSH 설치 sudo apt-get install ssh -y # SSH 설정 파일 수정 sudo vim /etc/ssh/sshd_config
// 변경 전 #PermitRootLogin prohibit-password // 변경 후 PermitRootLogin yes
# ssh 서버 실행 sudo service ssh start # ssh 실행 상태 확인 service ssh status
VM 별 SSH 접속을 위한 포트포워딩 설정
이후, Host 에서 VM 으로 SSH 접속 하기 위해, 포트포워딩을 설정합니다.
VirtualBox 상단 메뉴의 설정 클릭 → 네트워크 탭 → 이전에 만들어두었던 NAT Network 를 수정합니다.
포트 포워딩 버튼을 클릭합니다.
아래와 같이 세팅합니다.
- 호스트 IP 는 127.0.0.1 를 사용합니다.
- 호스트 IP 는 VirtualBox가 설치된 PC의 아이피입니다.
- 만일, virtualbox 가 설치된 pc에서만 가상머신으로 접속한다면 loopback ip 인 127.0.0.1을 입력해도 됩니다.
- 하지만, 공유기 등으로 여러 pc 가 연결되어 있다면, loopback 말고 PC 의 IP 주소를 입력하면, 같은 네트워크 내의 다른 PC등에서도 접속이 가능합니다.
- PC의 아이피 주소는 ipconfig 등의 명령어로 확인 가능합니다.
- 호스트 포트는 현재 사용하고 있지 않은 임의의 포트 번호를 사용합니다.
- 게스트 IP 는 가상 머신의 IP 를 사용합니다.
- 게스트포트는 SSH 기본 포트인 22를 사용합니다.
- 확인을 클릭합니다.
- 호스트 IP 는 127.0.0.1 를 사용합니다.
아래 명령어를 통해 VM 에 SSH 접근을 테스트합니다.
ssh -p 11001 ubuntu@127.0.0.1 ssh -p 11002 ubuntu@127.0.0.1
참고
'DevOps > Kubernetes' 카테고리의 다른 글
[K8S] Label, Selector, Annotation (0) | 2023.03.01 |
---|---|
[K8S] Nodeport, Port, Targetport 정리 (0) | 2023.03.01 |
[Kubernetes] MacOS Kubernetes 및 Dashboard 설치 (0) | 2022.02.20 |
[Kubernetes] 간단한 일반 서버, 도커, 쿠버네티스 비교 실습 (0) | 2022.02.16 |
[Kubernetes] VM 과 Container 의 차이 (0) | 2022.02.16 |