Kubernetes

[Kubernetes] 클러스터 구축

HU_717 2024. 1. 27. 15:30

쿠버네티스에 대한 개념이 많아 책을 참고하여 기본 지식을 향상시키기 위해 작성한 글입니다.

 

 

 

"도커/쿠버네티스를 활용한 컨테이너 개발 실전 입문", "시작하세요! 도커/쿠버네티스" 두 책을 참고하여 작성한 글입니다.

 

 

 

 


✏️ 쿠버네티스 클러스터 구축

✓ 메모리 스왑 비활성화

  • 메모리 스왑 활성화시, 컨테이너 성능이 일관되지 않을 수 있음
  • 메모리 스왑 : 실제 메모리 RAM이 가득 찼지만 더 많은 메모리가 필요할 때 디스크 공간을 이용하여 부족한 메모리를 대체할 수 있는 공간

✓ Kubeadm의 선택

  • Minikube, kubespray 설치 도구도 내부적으로 kubeadm을 사용함
  • 온프레미스 환경, 클라우드 인프라 환경에 상관없이 일반적인 리눅스 서버라면 모두 사용이 가능함

 

✏️ 클러스터 구축 명령어

  • 책에서는 컨테이너 네트워크 애드온 설치에서 calico 네트워크 플러그인을 설치하였지만 워커 노드 연결 과정에서 시간초과가 발생하여 연결이 되지 않는 문제가 발생하였다.
  • calico 버전이 달라졌다하며 파일 수정도 진행하였지만 연결이 되지 않았다. 
  • IP주소에 따른 오류 같은데 해결책을 발견하지 못하여 Flannel 네트워크 모델을 사용하였다.

✓ apt packages 설치

sudo apt-get update
sudo apt-get install -y socat

✓ Docker 설치

// 도커 설치에 필요한 APT 패키지 설치
sudo apt-get update && sudo apt-get install -y ca-certificates curl gnupg lsb-release

// 도커 공식 GPG Key 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

// apt 패키지 매니저로 도커 설치 시, stable Repository에서 받아오도록 설정
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

// 5:20.10.11~3-0~ubuntu-focal 버전의 도커 설치
sudo apt-get install -y containerd.io docker-ce=5:20.10.11~3-0~ubuntu-focal docker-ce-cli=5:20.10.11~3-0~ubuntu-focal

// 도커 정상적으로 설치되었는지 확인
sudo docker run hello-world

✓ 스왑 메모리 끄기

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

✓ kubeadm, kubelet, kubectl 설치

여기서 주의해야할 점은 Master node와 Worker노드의 설치 버전이 맞게 되어야한다

만약 아래 설치 과정에서 오류가 발생한다면 sudo 를 붙이고 시도해보길 바란다

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF

apt-get update

apt-get install -y kubelet kubeadm kubectl

 

  • 버전 확인 방법 
kubeadm version
kubelet --version
kubectl version --client

 

  • 버전 고정 방법
sudo apt-mark hold kubelet kubeadm kubectl

 

✓ Master 노드 세팅

Flannel 네트워크 모델 : 서로 다른 노드에 있는 Pod간 통신을 원활히 하기 위해 필요한 네트워크 플러그인

- 기본 네트워크 대역 : 10.244.0.16

sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address={마스터 노드 IP}

 

정상적으로 초기화 되면 아래와 같은 명령어를 수행하라고 나온다

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

 

Flannel  Pod 네트워크를 클러스터에 배포한다

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

 

✓ Worker 노드 연결

Master노드에서 정상적으로 초기화 되었다면 token을 반환하게 되는데 이 token을 Woker 노드에서 Join해준다

kubeadm join {마스터 노드 IP}:6443 --token {token} \
--discovery-token-ca-cert-hash sha256:{해시값}

 

✓ Master 노드에서 정상적인 연결 확인

kubectl get node -o wide

 

위와 같은 과정을 거치면 정상적으로 클러스터가 구축됨을 확인할 수 있다.

필자는 리눅스 환경에서 진행하였으며 버전 충돌, IP 오류 등등 많은 오류가 발생하였다.

이에 worker에서 초기화를 많이 진행하였는데 다음 글에서는 이와 관련된 내용을 작성하려 한다.

'Kubernetes' 카테고리의 다른 글

[Kubernetes] 구축 오류  (0) 2024.04.10
[Kubernetes] 서비스 특징 비교  (1) 2024.01.27
[Kubernetes] 기본 개념  (0) 2024.01.18