본문으로 건너뛰기

Day 2 - Kubernetes 클러스터 구성

Day 2 - Kubernetes 클러스터 구성

목차


최종 결과

result

노드역할IP상태
k8s-mcontrol-plane172.100.100.10Ready
k8s-n1worker172.100.100.11Ready
k8s-n2worker172.100.100.12Ready
k8s-n3worker172.100.100.13Ready

1. 네트워크 설정

network

호스트 이름 변경

sudo hostnamectl set-hostname k8s-m # 마스터
sudo hostnamectl set-hostname k8s-n1 # 워커1

네트워크 주소 변경

sudo vi /etc/netplan/50-cloud-init.yaml
sudo netplan apply

연결 테스트

ping 172.100.100.10 -c 3 # k8s-m
ping 172.100.100.11 -c 3 # k8s-n1
ping 172.100.100.12 -c 3 # k8s-n2
ping 172.100.100.13 -c 3 # k8s-n3

2. 호스트 등록 및 SSH 설정

/etc/hosts 등록

sudo vim /etc/hosts
192.168.5.10 k8s-m
192.168.5.11 k8s-n1
192.168.5.12 k8s-n2
192.168.5.13 k8s-n3

SSH 키 설정

# 키 생성
ssh-keygen -t ed25519

# 각 노드에 키 배포
ssh-copy-id pista@k8s-n1
ssh-copy-id pista@k8s-n2
ssh-copy-id pista@k8s-n3

3. 워커 노드 사전 설정

worker

VMWARE 작업

  • k8s-m에서 k8s-n1,n2,n3을 vmware로 클론
  • 스냅샷 생성(vmestr)
  • k8s-n1,n2,n3에서 MAC 주소 변경

# 호스트 이름 변경
sudo hostnamectl set-hostname k8s-n1
sudo hostnamectl set-hostname k8s-n2
sudo hostnamectl set-hostname k8s-n3

# 네트워크 설정
sudo vi /etc/netplan/50-cloud-init.yaml

sudo netplan apply

# 기존 키 삭제
rm -f ~/.ssh/id_ed25519 ~/.ssh/id_ed25519.pub
# 새 키 생성
ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519
# 확인
cat ~/.ssh/id_ed25519.pub

# 각 노드에 키 배포
ssh-copy-id pista@k8s-n1
ssh-copy-id pista@k8s-n2
ssh-copy-id pista@k8s-n3

# SSH로 sudoers 설정 (-t 옵션 사용)
for node in k8s-n1 k8s-n2 k8s-n3; do
ssh -t $node "echo 'pista ALL=(ALL) NOPASSWD:ALL' | sudo tee /etc/sudoers.d/pista"
done

# 패키지 업데이트
for node in k8s-m k8s-n1 k8s-n2 k8s-n3; do
ssh $node "sudo apt update -y && sudo apt upgrade -y"
done

# 스왑 비활성화
for node in k8s-m k8s-n1 k8s-n2 k8s-n3; do
ssh $node "sudo swapoff -a"
done

4. 마스터 노드 초기화

master

kubeadm init

Calico 192.168.0.0/16 🌟 가장 많이 사용, 네트워크 정책 지원

Flannel 10.244.0.0/16 가장 간단, 초보자 추천

Weave 10.32.0.0/12

sudo kubeadm init \
--pod-network-cidr=192.168.0.0/12 \
--apiserver-advertise-address=172.100.100.10

⛔ 에러 발생 시

sudo kubeadm reset
sudo swapoff -a
sudo systemctl restart kubelet

kubectl 설정

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

자동완성 및 alias

sudo apt install -y bash-completion
echo "source <(kubectl completion bash)" >> ~/.bashrc
echo "alias k=kubectl" >> ~/.bashrc
echo "alias kg='kubectl get'" >> ~/.bashrc
source ~/.bashrc

5. 워커 노드 클러스터 참여

join

워커 노드 Join

# 마스터에서 join 명령어 확인
kubeadm token create --ttl 0 --print-join-command

# 각 워커 노드에서 실행
ssh k8s-n1 "sudo kubeadm join 172.100.100.10:6443 --token <TOKEN> --discovery-token-ca-cert-hash sha256:<HASH>"
ssh k8s-n2 "sudo kubeadm join ..."
ssh k8s-n3 "sudo kubeadm join ..."

Calico 네트워크 플러그인 설치

curl -O https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml
kubectl apply -f calico.yaml

상태 확인

kubectl get nodes
kubectl get po -A

결과:

  • 모든 노드: Ready
  • 모든 Pod: Running

관련 문서

그래프 뷰

그래프 데이터 로딩 중…
현재: Day 2 - Kubernetes 클러스터 구성
노드 클릭 → 이동 · 드래그 → 위치 조정