kubeadm 설치하기

Moon Blue의 IT 로그 📝·2023년 10월 3일
0

kubeadm 은 설치형 쿠버네티스로서 서버간 클러스터링 환경을 구성하고 관리하기 위한 공식 도구중 하나입니다 온프레미스 환경에 직접 설치하고 운용할 목적으로 만들어졌습니다

✅ 리눅스 서버 환경 설정

  • 스왑 메모리를 켜놓으면 인스턴스 자원이 일관되지 않아 클러스터 운영에 문제가 발생한다 🔥
  • 1.28 버전(beta)부터는 스왑메모리 사용을 지원한다고는 하나 조금 더 지켜봐야 할 것으로 보인다 🔍
# 스왑설정 해제 및 확인
swapoff -a
free -h

# 재부팅 이후에도 스왑설정 유지
sed -i '/swap/s/^/#/' /etc/fstab
  • 운영상 반드시 열려있어야 하는 필수 포트가 있는데,
    이것이 닫혀있을 경우 운영 및 설치에 문제가 있을 수 있다❗️
# 쿠버네티스 주요 포트만 허용으로 변경해도 됨 (ex: ufw allow 6443)
# 방화벽 해제 (우분투 기준)
ufw disable
  • 쿠버네티스 구성요소간의 통신을 위한 필수 포트 확인
nc 127.0.0.1 6443

✅ 컨테이너 런타임 설치

🐳 더 간단한 방법 🐳
컨네이터 런타임만 설치 (더 가볍게 쿠버네티스를 운용할 수 있다)
💡 컨테이너 런타임 만 필요하기 때문에 패키지 전부를 설치할 필요는 없다❗️

# containerd 와 runC 가 아래의 명령어 하나로 설치됨 (컨테이너 런타임만 설치)
apt install docker.io 
## docker 또는 containerd 를 컨테이너 런타임으로 설치하였을 경우 

# 환경설정 파일 [기본값]으로 초기화
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml

# config.toml 파일에서 SystemdCgroup 설정값 확인 및 변경 🔥
# SystemdCgroup 값이 false 라면 true 로 변경해야 함 🔥
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml

# containerd.service 변경사항 적용
sudo systemctl restart containerd

✅ kubeadm, kubelet, kubectl 설치

✅ 마스터 노드 init

  • 클러스터링을 위한 초기화 명령어
  • 각종 옵션들을 필요에 따라 구성하여 사용
kubeadm init \
# [옵션1] : 0.0.0.0 <- 이부분에 마스터 노드의 ip주소 입력
--apiserver-advertise-address=0.0.0.0 \
# [옵션2] 쿠버네티스용 네트워크 플러그인 ip대역 (ex: 플라넬 cni 권장 ip 대역)
--pod-network-cidr=10.244.0.0/16 

✅ CNI (Container Network Interface) 설치

  • 노드간의 네트워크 통신을 위한 플러그인
  • CNI 규격에 맞춘 다양한 플러그인이 존재 (calico, flannel, weave net etc..)
  • 각 플러그인들중 환경에 맞게 선택하여 설치한다
# ex : 플라넬 플러그인 설치
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

✅ 워커 노드 join

  • 마스터 노드와 조인하여 클러스터 대열에 합류하는 명령어
  • 마스터 노드에서 init 명령어를 사용하여 얻게된 token 을 포함한 명령어를 워커노드에서 실행
# 마스터 노드에서 kubeadm init 명령에 대한 응답값으로 아래와 "유사한" 토큰이 생성됨
# 워커 노드에서 아래와 "유사한" 토큰을 포함한 명령어를 실행하므로 쿠버네티스 클러스터 대열에 합류하게 됨
kubeadm join 0.0.0.0:6443 --token abcdefghijklmnopqrstuvwxyz \ 
--discovery-token-ca-cert-hash sha256:0123456789

워커노드 에서 join 명령어가 정상적으로 동작하지 않는 경우 🚫
마스터노드 에서 워커노드 ipping 테스트를 해보는게 좋다 🔍🔍

✅ 마스터 노드에서 토큰 재발행

# 토큰 재생성을 위한 명령어
kubeadm token create --print-join-command

✅ 노드 reset

  • 클러스터링을 위해 점유하고 있던 자원 해제 (ex: 포트 해제) 및 환경설정 해제
# 클러스터링 연결 해제 명령어
kubeadm reset

# purge : 패키지 및 환경설정까지 삭제
# autoremove 옵션 : 패키지 의존성 삭제
apt purge kubelet kubeadm kubectl kube* --auto-remove

✅ 노드 정보 확인

### 현재 노드의 숫자 및 자세한 정보 확인
kubectl get nodes -o wide
profile
What a Beautiful World~ 🌏

0개의 댓글