오늘의 인기 글
최근 글
최근 댓글
Today
Total
12-25 13:31
관리 메뉴

우노

[Kubernetes] MacOS 에서 VirtualBox 로 Kubernetes Cluster 구성하기 본문

DevOps/Kubernetes

[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 설치

네트워크 서브넷 생성

  • 노드끼리 서로 통신하고, 인터넷과 연결하기 위해서, 먼저 서브 네트워크를 생성합니다.

  • VirtualBox 의 환경 설정 → 네트워크 → 네트워크 생성 → 네트워크 편집을 클릭한 뒤, 아래와 같이 설정합니다.

Master Node 생성

  • 새로 만들기를 클릭한 뒤, 아래와 같이 설정합니다.

  • 이후, 아래와 같이 설정합니다.

    • 메모리 크기: 1024 MB
      • k3s 스펙상 512 MB 도 가능합니다.
    • 하드 디스크 : 지금 새 가상 하드 디스크 만들기
    • 하드 디스크 파일 종류 : VDI(VirtualBox 디스크 이미지)
    • 물리적 하드 드라이브에 저장 : 고정 크기
    • 파일 위치 및 크기 : 20 GB
  • 생성이 완료되면, 아래와 같은 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
    • Apply 버튼 클릭
    • 네트워크 반영을 위해 토글 버튼을 눌러 잠깐 껐다가 다시 켜줍니다.
  • 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
    • Apply 버튼 클릭
    • 네트워크 반영을 위해 토글 버튼을 눌러 잠깐 껐다가 다시 켜줍니다.

모든 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 가 보이고,STATUSReady 라면,
    • 일단 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를 사용합니다.
    • 확인을 클릭합니다.
  • 아래 명령어를 통해 VM 에 SSH 접근을 테스트합니다.

      ssh -p 11001 ubuntu@127.0.0.1
      ssh -p 11002 ubuntu@127.0.0.1

참고

Comments