[k8s] k8s설치를 위한 VM 구축하기 (feat. Virtual Box)

2022. 8. 22. 20:42[ DevOps ]/[ k8s ]

구성도

이번 포스팅에서 구축할 master, worker 노드의 구성도이다. 하나의 master 노드와 두 개의 worker 노드를 구축하고 OS 설치, 네트워크 구성, 도커 설치 등을 진행한다.

 

 

이번 포스팅에서 다룰 내용은 다음과 같다.

 

- VM 기반으로 Master, Worker 노드를 구축

- 노드 간 네트워킹 설정 (NAT)

- 호스트에서 SSH 접속 설정

- 각 노드에 docker를 설치

 

쿠버네티스 설치 과정은 다른 포스팅에서 다룬다.

 

 

 


 

0. 사전준비

1) Ubuntu iso 이미지 파일 다운로드 

    - 22.04에 containerd를 설치할 경우 일종의 버그가 있어 20.04를 추천한다.

    - 설치 편리를 위해 server 대신 desktop iso를 사용했다.

2) Virtual Box 설치

 

1. virtual box 네트워크 구성

가상머신을 만들기 전에 네트워크 환경을 먼저 구축한다.

- NAT 네트워크 설정 및 포트포워딩 구성

- 워커노드 두 개는 각각 10.100.0.101과 10.100.0.102 ip로 설정하고 SSH로 접속하기 위해 22번 포트를 포워딩해 둔다.

- master 노드는 10.100.0.104로 설정했다.

 

- 192.168.X.X, 10.X.X.X, 172.16.X.X -> privatet IP

- 127.0.0.1 -> default localhost IP

 

 

2. 우분투 ISO 파일 설치 후 Master 노드 구성

- Master Node를 하나 만들어서 환경 구성 완료 후, 이를 복제해서 Node 1, 2를 구성할 것

 

- CPU: 2 core

- Memory: 4096MB

- Network: NAT

- Disk: 20 GiB (설정 시, VDI- 동적할당 - 20기가로 설정)

 

cf. 1번에서 구성한 네트워크(k8s Network)를 master 노드에 적용하기

 

 

3. 부팅할 CD 구성

 

- 사전에 다운로드한 Ubuntu ISO 파일을 아래와 같이 등록한다.

 

 

 

4. VM 시작해서 우분투 설치 후 기본 설정

설치가 완료되면 아래 과정을 통해 우분투를 설정한다. 현재 Ubuntu Desktop을 설치했기 때문에 GUI로 설정한다. 

 

[네트워크 설정]

1) Static IP 할당하기

default로 DHCP로 동적 IP가 할당되기 때문에 위와 같이 설정에서 고정 IP를 설정한다.

 

- master node: 10.100.0.104/24

- G/W: 10.100.0.1

- DNS: 10.100.0.1

- hostname: master.example.com

 

* 네트워크 변경사항을 반영하기 위해 네트워크를 한번 끊었다가 다시 연결해야 한다.

 

2) hostname 설정

$ sudo vi /etc/hostname

# 기존 내용 지우고 master.example.com 작성 후 저장

 

 

sudo vi /etc/hosts 에 아래와 같이 수정

 

/etc/hosts에 위와 같이 작성하여 현재 master 노드의 호스트이름과 다른 노드들의 호스트 이름을 등록한다. (DNS가 없기 때문에 설정하는 과정임)

 

[root 계정 활성화]

- 계정에 비밀번호 설정이 안 되면 유저 전환이나 해당 유저로 로그인이 안된다.

$ sudo passwd root

 

cf. 스펙 확인

- 커널 버전 확인: uname -r

- Memory: free -m

- CPU: lscpu

- OS: cat /etc/os-release

 

5. SSH 서버 설치 

- openssh-server : 원격 로그인 지원 서버

- curl : command line 웹 브라우저

 

$ apt-get update -y
$ apt-get install -y openssh-server vim curl tree

 

openssh-server 외에도 앞으로 자주 사용할 패키지들을 같이 설치한다.

 

 

 

6. 호스트-VM 간 설정: 클립보드 공유

윈도우와 리눅스 가상머신 간에 복사, 붙여 넣기가 가능하도록 클립보드 공유 설정을 진행한다. (참고 링크)

- Super PuTTy를 사용할 예정이라 설정하지 않음.

 

 

7. 부팅 방식 변경: GUI -> CLI

$ systemctl set-default multi-user.target
$ systemctl isolate multi-user.target

 

 

8. Super Putty 설치: SSH 접속

* VM에 직접 접속해서 사용할 경우, 이 과정은 생략할 수 있다.

 

1) Super Putty 설치

- 설치 링크: https://github.com/jimradford/superputty/tags

위 링크에 접속해서 버전 선택 후, SuperPuttySetup.msi를 설치한다. (윈도우)

 

2) PuTTy 설치

 - 설치 링크: https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

 

 

3) Supper Putty에 등록

 

4) 세션 등록

우측 Seesion 텝이서 PuTTy Sessions에 우클릭하여 등록한다.

 

- 위에서 Virtual Box에 NAT 네트워크 및 포트포워딩을 설정을 참고하여 IP 및 포트를 설정한다.

- master node의 IP는 10.100.0.104이지만 포트포워딩을 설정해 두었기 때문에 로컬호스트로 바로 접속이 가능하다.

 

 

 

5) 가상머신에서 ssh 접속 설정

SSH는 리눅스 유저별로 접속이 가능하며 'key를 통한 접속 방법'과 '유저 패스워드'를 통한 접속 방법이 있다. 현재 예시에서는 유저 패스워드를 기반으로 접속하는 설정이다.

 

$ mkdir ~/.ssh
$ chmod 700 ~/.ssh

$ sudo vim /etc/ssh/sshd_config
## PasswordAuthentication yes 로 수정

$ sudo service sshd restart

 

 

9. Docker 설치 

- 도커 기능을 사용할게 아니고 kubeadm, kubelet, kubectl을 1.22 이상 버전을 사용할 거라면 containerd(또는 CRI-O)만 설치하길 추천한다.

- 도커 대신 컨테이너 런타임만 설치: https://jh-labs.tistory.com/484

- 참고링크: https://docs.docker.com/engine/install/ubuntu/

- containerd만 설치: https://www.itzgeek.com/how-tos/linux/ubuntu-how-tos/install-containerd-on-ubuntu-22-04.html

- containerd GitHub: https://github.com/containerd/containerd/tags

- k8s docs container runtime: https://kubernetes.io/docs/setup/production-environment/container-runtimes/

- containerd installation github docs: https://github.com/containerd/containerd/blob/main/docs/getting-started.md

 

$ sudo apt-get update
$ sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
    
$ sudo mkdir -p /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
 
$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

- 우분투는 기본적으로 부팅 시 docker도 자동으로 실행된다. systemctl status docker 커맨드로 'enabled' 가 되어 있는지 확인하고 그렇지 않다면 systemctl enable docker 커맨드로 부팅시 자동실행으로 설정한다.

 

- docker 일부 명령들은 sudo 권한을 필요로 한다. sudo 명령을 생략하기 위해서 root 계정으로 전환 후 사용할 유저를 docker 그룹에 추가해 준다.

 

 

10. VM 복제

지금까지 세팅한 Master node 정보를 그대로 복제해서 worker node 2개를 만든다.

 

 

 

- 다음으로 '완전한 복제' 선택

 

복제가 완료되면 복제된 VM에 접속해서 IP정보와 hostname 정보를 수정한다.

 

1) hostname 수정

$ sudo vim /etc/hostname

# node1.example.com 으로 수정

 

2) static IP 정보 수정

아래 커맨드를 입력해서 GUI 형태로 변경하여 수정할 수도 있고 터미널에서 netplan을 사용해서 고정 IP를 변경할 수도 있다.

$ systemctl isolate graphical.target

 

위에서 virtual box 네트워크 설정(포트포워딩)에서 진행했듯이 node1에 해당하는 IP로 설정한다. 

 

3) ping 테스트

$ ping -c 2 master.example.com  # node1에서 진행

$ ping -c 2 node1.example.com   # master에서 진행

ping으로 hostname과 IP가 변경되었고 서로 잘 통신이 가능한지 확인한다.

 

* node2도 마찬가지로 node1 복제 후 진행

 

 

 

11. VM 스냅샷(snapshot) 생성

스냅샷을 만들어둬서 현재 VM 상태를 백업해두어 나중에 현재 시적으로 되돌리기를 쉽게 진행할 수 있다.

 

찍기 누르고 스냅샷 이름을 지정하면 지정한 경로에 스냅샷 파일이 저장된다.

 

 

 

 

사실 Vagrant를 사용하면 한 번에 구축 가능한 사항들이지만 직접 구축해 보는 것도 좋은 경험인 것 같다.

 

 

 

Reference

- https://youtu.be/V5-h3yvCOSA