쿠버네티스 클러스터에 존재하는 Pod 서비스를 외부로 노출시키기 위한 가장 원시적인 방법은 NodePort를 이용하는 것입니다. 하지만 NodePort는 인스턴스의 IP가 변경되면 해당 서비스에도 이를 반영해야합니다. 따라서 Cloud 벤더에서는 LoadBalancer나 Ingress 타입을 통해 서비스를 노출할 수 있도록 지원합니다.
이번 포스팅에서는 온 프레미스 환경에서 LoadBalancer 타입을 지원하기 위한 MetalLB를 설치하는 방법을 다루고자 합니다.
문제 상황
1. nginx Deployment를 하나 생성합니다. (kubectl create deploy nginx --image=nginx)
2 GB or more of RAM per machine (any less will leave little room for your apps)
2 CPUs or more
Full network connectivity between all machines in the cluster (public or private network is fine)
Unique hostname, MAC address, and product_uuid for every node. Seeherefor more details.
Certain ports are open on your machines. Seeherefor more details.
Swap disabled. YouMUSTdisable swap in order for the kubelet to work properly
여기서 마지막 줄을 보면, Swap을 비활성화 해야됩니다. 그 이유는 Swap 기능은 본래 가용된 메모리보다 더 큰 메모리 할당을 가능하도록 하기 위함인데, 쿠버네티스 철학은 주어진 인스턴스의 자원을 100% 가깝게 사용하는 것이 목표이기 때문에 부합되지 않습니다. 따라서 성능을 제대로 사용하기 위해서 Swap 기능을 비활성화 해야합니다.
1. Swap 중지하기 (swapoff -a)
2. 재부팅되면 초기화 되므로 완전하게 중지시킵니다. (sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab)
쿠버네티스를 처음 공부할 때 난해한 부분이 클러스터 설치라고 생각합니다. 물론 GCP, AWS와 같은 클라우드에서 제공하는 쿠버네티스 클러스터를 활용하거나 Katakoda와 같은 웹사이트를 통해 접할 수도 있지만, 직접 VM으로 클러스터를 구축하는 경험도 중요하다고 생각합니다.
향후 몇개의 포스팅을 통해 VirtualBox를 통해 3개(1 Master, 2 Worker)의 K8S 클러스터를 구축방법을 다루어보고자 합니다. 쿠버네티스는 Kubeadm을 활용하여 설치할 계획이며, 학습 목적이므로 Ansible이나 기타 자동화 툴 도입이나 상세 설정 없이 설치하는 과정을 설명합니다.
PC 환경은 램 16GB이상을 권장드리며, 공유기가 있다는 전제하에 네트워크 구성은 Bridge Adaptor를 통해 구성하오니 내용 참고 바랍니다.
(※ 공유기가 없는 환경이라면 NAT 네트워크를 구성하여 진행 가능합니다.)
앞으로 다룰 내용
1. VirtualBox Ubuntu 설치
2. Docker 설치
3. 쿠버네티스 클러스터 구성
4. NFS 구성
5. metallb 설치
6. ingress-nginx 설치
이번 포스팅은 첫 번째로 VirtualBox를 사용하여 이미지 설치를 위한 기초 설정을 다루겠습니다.