(시리즈1) Linux 환경에서 KVM 이용해서 가상머신 환경 만들고, kubeadm 이용해서 가상머신 간에 쿠버네티스 클러스터 구축하기 (1) - 호스트에 가상머신 설치 및 가상머신 환경 설정

msyhu·2021년 5월 4일
0
post-thumbnail

논문 주제로 쿠버네티스를 선정했기 때문에 실험을 진행할 쿠버네티스 클러스터가 필요했습니다. 제게는 물리 머신 한대만 주어져 있었으므로, 이것을 이용해서 쿠버네티스 클러스터를 구성했습니다.

설치한 환경 버전 정보

  • Ubuntu = 18.04.4 LTS
  • KVM = 2.11.1
  • Kubernetes = 1.20.5
  • Docker = 20.10.5

KVM 설치 & ubuntu 설치

KVM이란 리눅스 기반에서 CPU 기반의 전가상화, 즉 하드웨어 전체를 가상화 하는 것을 지원하는 하이퍼바이저를 말합니다.

sudo apt install -y qemu-kvm libvirt-bin bridge-utils ubuntu-vm-builder virt-manager
sudo virt-manager & # 백그라운드에서 실행

네트워크는 따로 안건들여 줘도 알아서 묶입니다.

이후 환경은 root 환경에서 실행했습니다. (sudo su)

마스터 노드 1대, 워커 노드 2대 생성을 목표로 하였으며, 할당한 컴퓨팅 자원은 다음과 같습니다.

node 끼리 통신 설정

sshd-server 설치

클라이언트에서 서버로 ssh 접속 할 수 있도록 프로그램을 설치해 주는 과정입니다.

ssh 기본 포트인 22번으로 통신을 할 것이므로, 설치 후 별다른 설정은 해 주지 않았습니다.

sudo apt install openssh-server
netstat -an | grep 22 # 잘 켜졌는지 확인

ssh root 접속 권한 부여

환경설정의 편의를 위해 모든 작업을 root 권한으로 진행했으므로, ssh로 root 접속이 되도록 해야 했습니다.

sudo su
passwd # 패스워드 설정
vim /etc/ssh/sshd_config -> PermitRootLogin yes
service sshd restart

host에서 접속 가능하게 설정

호스트에서 가상 머신들로 public key 를 보내고, ssh 접근이 alias로 되도록 설정해 주었습니다.

ssh-keygen # host 에서
ssh-copy-id root@[IP주소]
ssh-copy-id root@[IP주소]
ssh-copy-id root@[IP주소]

vim ~/.ssh/config

Host master
	HostName [IP주소]
	User root
	IdentityFile /home/msyhu/.ssh/id_rsa

Host worker1
        HostName [IP주소]
        User root
        IdentityFile /home/msyhu/.ssh/id_rsa

Host worker2
        HostName [IP주소]
        User root
        IdentityFile /home/msyhu/.ssh/id_rsa

tmux 설정

tmux란 Terminal MUltipleXer 의 약자로, 쉘을 여러개 사용할 때 쉘들에게 동시에 명령을 한다거나, 쉘을 나갔다가 들어갔을 때 이전 상태가 저장되어 있기를 원할 때 사용합니다.

클러스터를 구성하면서 같은 명령어를 여러 개의 노드에게 입력할 일이 많았는데, 그때 유용하게 사용했습니다.

sudo apt install tmux # tmux 설치
tmux new -s cluster # tmux 세션 'cluster' 생성
ctrl + b + % # 세로 나눔
ctrl + b + " # 가로 나눔

<Ctrl-B>, :
setw synchronize-panes on # 동시 명령어 입력

외부 laptop ↔ 가상머신 포트포워딩 하기

시스템이 랩탑 → 호스트 머신 → 가상머신 으로 구성되어 있으므로, 가상머신인 쿠버네티스 클러스터들을 랩탑에서 손쉽게 다루기 위해서는 랩탑에서 가상머신들로 바로 접근해야 했습니다. 그러기 위해서 호스트 머신에서 3대의 가상머신으로 포트포워딩을 해 주었습니다.

우분투에서 포트포워딩을 하기 위해서 iptable을 사용합니다. 우리의 목표는, 랩탑에서

ssh [호스트IP] -p [포트번호]

를 이용해 호스트 머신 안에 있는 특정 IP로 접속하는 것입니다.

iptable 이란?
리눅스상에서 방화벽을 설정하는 도구입니다. 패킷필터링 기능을 사용자 공간에서 제어하는 수준으로 사용할 수 있는데, 패킷필터링이란 지나가는 패킷의 해더를 보고 제어하는 것입니다.


sudo iptables -I INPUT -p tcp -s 0.0.0.0/0 -d [호스트IP] --dport [호스트에서 포트포워딩 하고싶은 포트] -j ACCEPT
sudo iptables -I FORWARD -m tcp -p tcp -d [가상머신IP] --dport 22 -j ACCEPT
sudo iptables -t nat -I PREROUTING -p tcp -d [호스트IP] --dport [호스트에서 포트포워딩 하고싶은 포트] -j DNAT --to-destination [가상머신IP]:22

위에서 사용한 iptables 기본 용어는 다음과 같은 것들이 있습니다.

  • INPUT = 호스트 컴퓨터를 향한 모든 패킷
  • FORWARD = 호스트 컴퓨터가 목적지가 아닌 패킷
  • PREROUTING = 패킷이 리눅스 서버에 전달되기 전 규칙을 정의한다.

이렇게 하여 랩탑에서 쿠버네티스 클러스터를 다룰 준비는 되었습니다.
다음 포스팅에서는 쿠버네티스 클러스터를 구축해 보도록 하겠습니다.

profile
컨테이너, k8s, 마이크로서비스 등 클라우드 네이티브 환경에 관심이 많습니다.

0개의 댓글