multipass + kuberspray 이용한 kubernetes 로컬 구축

저는 사용중인 macOS 에 multipass 를 이용하여 노드를 가상머신으로 구축하고, 이 위에 kubernetes 를 구현하여 k8s 테스트 환경으로 사용하고 있습니다. 애플실리콘을 지원하면서 무료인 가상머신 관리자가 마땅치 않은 가운데 multipass 라는 괜찮은 가상머신 관리자를 발견하여 이전 블로그에서도 거론하였듯이 이용하고 있지요.

그래서 multipass 를 이용하여 Kubernetes 를 로컬 랩탑에 구축하는 방법을 정리해 보고자 합니다. kubernetes 구축을 위해 kubespray 를 이용하였습니다.

구축 절차 요약

  1. multipass 설치
  2. multipass 이용하여 VM 구축 (master, node, bootstrap)
  3. VM 별 사전 필요 설정
  4. kubespray 설치
  5. kubespray 이용한 kubernetes 설치

상세 구축 절차

1. multipass 설치

2. multipass 이용하여 VM 구축

  • bootstrap 1개 (kubernetes 구축을 위한 kubespray 설치용 VM)
  • master 1개
  • node 2개
# Create multipass instance 

multipass launch --cpus 4 --memory 16G --disk 20480MiB --name master

multipass launch --cpus 2 --memory 8G --disk 20480MiB --name node1

multipass launch --cpus 2 --memory 8G --disk 20480MiB --name node2

multipass launch --cpus 2 --memory 8G --disk 20480MiB --name bootstrap

3. VM 별 사전 필요 설정

  • bootstrap VM 에서 실행
# root 권한
sudo su -

#  머신별로 접속하기 위한 ssh public key 등록 위해 RSA 키쌍 생성
ssh-keygen -t rsa

# public key 정보 보두 복사해서 다른 머신모두(~/.ssh/authorized_keys) 붙여넣기
cat ~/.ssh/id_rsa.pub

  • master, node1, node2 에서 root 권한으로 실행
# master, node1, node2 에서 실행 (root 권한으로)
swapoff -a
sed -i '/swap/d' /etc/fstab
systemctl stop ufw
systemctl disable ufw

4. kubespray 설치

  • bootstrap VM 에 설치 및 설정 작업 진행
  • node1/2/3 ansible_host IP 들은 multipass list 를 통해 확인된 각각 VM 별 IP 를 확인하여 수정 필요
# kubespray 설치
git clone https://github.com/kubernetes-sigs/kubespray.git

# 사전 준비
apt update
apt upgrade
apt install python3-pip python3-setuptools virtualenv -y
virtualenv --python=python3 venv
source venv/bin/activate
cd ./kubespray
pip install -r requirements.txt

# inventory.ini 수정
vim inventory/sample/inventory.ini

[all]
node1 ansible_host=192.168.64.2   ip=192.168.64.2 etcd_member_name=etcd1
node2 ansible_host=192.168.64.3   ip=192.168.64.3
node3 ansible_host=192.168.64.4   ip=192.168.64.4

# ## configure a bastion host if your nodes are not directly reachable
# [bastion]
# bastion ansible_host=x.x.x.x ansible_user=some_user

[kube_control_plane]
node1
# node2
# node3

[etcd]
node1
# node2
# node3

[kube_node]
node2
node3

[calico_rr]

[k8s_cluster:children]
kube_control_plane
kube_node
calico_rr

5. kubespray 이용한 kubernetes 설치

  • bootstrap VM 에서 ansible 실행
  • 위에 설치한 kubespray 폴더 내에서 실행
# ansible 실행
ansible-playbook -i inventory/sample/inventory.ini --become --become-user=root cluster.yml -vvv

# master VM 에서 ~/.kube/config 복사하여 Local  아래 경로에 저장
~/.kube/config.yaml

6. 완료

  • kubectl 준비하여 명령어로 설치 완료 확인 가능
kubernetes 설치 확인

7. Additional) kubectx + kubens

  • kubernetes 의 cluster 와 namespace 스위칭을 편하게 해주는 툴
  • Github Repository

참고

Series Navigation로컬 k8s 에서 ngrok ingress controller 로 서비스 인터넷 노출하기 (expose kubernetes services to internet for test) >>

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Back To Top