multipass + kuberspray 이용한 kubernetes 로컬 구축
저는 사용중인 macOS 에 multipass 를 이용하여 노드를 가상머신으로 구축하고, 이 위에 kubernetes 를 구현하여 k8s 테스트 환경으로 사용하고 있습니다. 애플실리콘을 지원하면서 무료인 가상머신 관리자가 마땅치 않은 가운데 multipass 라는 괜찮은 가상머신 관리자를 발견하여 이전 블로그에서도 거론하였듯이 이용하고 있지요.
그래서 multipass 를 이용하여 Kubernetes 를 로컬 랩탑에 구축하는 방법을 정리해 보고자 합니다. kubernetes 구축을 위해 kubespray 를 이용하였습니다.
구축 절차 요약
- multipass 설치
- multipass 이용하여 VM 구축 (master, node, bootstrap)
- VM 별 사전 필요 설정
- kubespray 설치
- kubespray 이용한 kubernetes 설치
상세 구축 절차
1. multipass 설치
- multipass 설치는 아래 링크를 이용하여 설치하는 편이 빠를듯 합니다.
- https://multipass.run/install
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 준비하여 명령어로 설치 완료 확인 가능
7. Additional) kubectx + kubens
- kubernetes 의 cluster 와 namespace 스위칭을 편하게 해주는 툴
- Github Repository
참고
- kubespray github