Vagrant를 이용한 Kubernetes 클러스터 구축

Vagrant를 이용한 Kubernetes 클러스터 구축

최근 1.18 -> 1.20으로 업그레이드를 진행하면서 클러스터 구축을 처음부터 직접 해보는 것이 좋을 것 같았다.

Vagrant로 노드 준비 부터 클러스터 구축까지 직접 할 수도 있을 것이고, Ansible을 이용하거나, 스크립트를 작성하는 등 여러 방법이 있을 것이다.

각 방법이 잘 나와있는 링크는 아래에 있으며, 진행하면서 몇 가지 참고할 만한 것들은 직접 작성하였다.

클러스터는 직접 구축해보고 싶다 : https://simroot.tistory.com/15

Ansible을 이용해서 한번에 구축하고 싶다 : https://kubernetes.io/blog/2019/03/15/kubernetes-setup-using-ansible-and-vagrant

스크립트를 이용해서 한번에 구축하고 싶다 : https://github.com/Jivvon/vagrant-kubeadm-kubernetes

설치

Vagrant 설치

https://www.vagrantup.com/downloads

brew tap hashicorp/tap brew install vagrant

Docker 설치

공식 문서

설치를 완료한 후 따로 설정하지 않으면 root 계정으로만 docker를 사용할 수 있다. sudo 를 사용하지 않을 수 있도록 사용자 계정을 docker 그룹을 추가해주자.

sudo usermod -aG docker ${USER}

이후 다시 접속하면 일반 사용자로도 docker를 사용할 수 있다.

< 상태 확인 >

systemctl status docker

docker --version

Kubernetes를 설치하기 전 점검해야 할 사항

(공식 문서) kubeadm 설치하기 - 시작하기 전에

FINDA 기술블로그 - 쿠버네티스(kubernetes) 설치 및 환경 구성하기

여러 가지가 있지만 중요하면서도 가장 빈번하게 발생하는 것은 스왑 메모리 비활성화 이다.

일시작인 스왑 메모리 비활성화

swapoff -a

재부팅 되어도 비활성화 유지

sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

Kubernetes 클러스터를 위한 도구 설치

kubeadm, kubelet 및 kubectl 설치하기

kubeadm : 클러스터를 부트스트랩하는 도구이다.

kubelet : 클러스터 내의 모든 노드에 존재하여 해당 노드에서 실행되는 파드와 컨테이너에 관한 작업을 수행하는 컴포넌트이다.

kubectl : 클러스터와 통신하기 위한 CLI 도구이다.

kubeadm ,kubelet, kubectl

sudo apt-get update && sudo apt-get install -y apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - cat <

apt-mark hold 를 해 주어야 apt 업데이트가 되지 않는다! (버전에 따라 호환 여부가 다른 것들이 있기 때문에 반드시 설정해 주어야 한다)

확인

apt-mark hold showhold

kube-apiserver, scheduler 등 설치하기 전에 ( kubeadm init 명령어 수행 전) 노드끼리 ping 날려서 확인

vagrant@worker1:~$ ping worker2 PING worker2 (192.168.100.22) 56(84) bytes of data. 64 bytes from worker2 (192.168.100.22): icmp_seq=1 ttl=64 time=0.342 ms 64 bytes from worker2 (192.168.100.22): icmp_seq=2 ttl=64 time=0.783 ms ^C --- worker2 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1032ms rtt min/avg/max/mdev = 0.342/0.562/0.783/0.220 ms vagrant@worker1:~$ ping master1 PING master1 (192.168.100.11) 56(84) bytes of data. 64 bytes from master1 (192.168.100.11): icmp_seq=1 ttl=64 time=0.402 ms 64 bytes from master1 (192.168.100.11): icmp_seq=2 ttl=64 time=0.587 ms ^C --- master1 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1018ms rtt min/avg/max/mdev = 0.402/0.494/0.587/0.092 ms

CNI 플러그인(calico) 설치

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

Kubernetes 클러스터 구성

마스터 노드(컨트롤 플레인 노드) 구성

마스터 노드는 최초 1회만 초기화 설정을 해주어야 한다. (워커 노드는 안 해도 된다)

sudo kubeadm init --control-plane-endpoint [마스터노드 ip 주소] \ --pod-network-cidr [CIDR 포함한 IP (192.168.0.0/16)] \ --apiserver-advertise-address [(워커 노드에게 알려줄)마스터노드 ip 주소]

출력의 끝에 나오는 kubeadm join~ 명령어를 따로 복사해놓자. 워커 노드를 join할 때 사용할 수 있다.

이후 kubeconfig 파일을 자신의 홈 디렉토리에 복사한다.

mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config

워커 노드 구성

Docker 설치 kubeadm, kubelet, kubectl 설치 (마스터 노드와 동일한 버전) curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

cat <

deb https://apt.kubernetes.io/ kubernetes-xenial main

EOF

sudo apt-get update

sudo apt-get install -y kubelet kubeadm kubectl

sudo apt-mark hold kubelet kubeadm kubectl

확인

kubeadm version

3. join ```shell sudo kubeadm join [마스터 노드 api server (ip:6443)] --token --discovery-token-ca-cert-hash sha256:

확인 # 마스터 노드에서 kubectl get nodes 워커 노드에서 하려면 마스터 노드에 있는 kubeconfig 파일을 가져와야 한다. # 마스터 노드에서 rsync -avz ~/.kube/config vagrant@[워커노드 hostname]:~/.kube/config # PASSWORD: vagrant

확인

ssh vagrant@[워커노드 hostname]

PASSWORD: vagrant

kubectl get nodes

from http://jivvon.tistory.com/3 by ccl(A) rewrite - 2021-08-03 23:00:46