쿠버네티스에 대한 개념이 많아 책을 참고하여 기본 지식을 향상시키기 위해 작성한 글입니다.
"도커/쿠버네티스를 활용한 컨테이너 개발 실전 입문", "시작하세요! 도커/쿠버네티스" 두 책을 참고하여 작성한 글입니다.
✏️ 쿠버네티스 클러스터 구축
✓ 메모리 스왑 비활성화
- 메모리 스왑 활성화시, 컨테이너 성능이 일관되지 않을 수 있음
- 메모리 스왑 : 실제 메모리 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 |