on
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