Day 2 - Kubernetes 클러스터 구성
Day 2 - Kubernetes 클러스터 구성
목차
최종 결과

| 노드 | 역할 | IP | 상태 |
|---|---|---|---|
| k8s-m | control-plane | 172.100.100.10 | Ready |
| k8s-n1 | worker | 172.100.100.11 | Ready |
| k8s-n2 | worker | 172.100.100.12 | Ready |
| k8s-n3 | worker | 172.100.100.13 | Ready |
1. 네트워크 설정

호스트 이름 변경
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. 워커 노드 사전 설정

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. 마스터 노드 초기화

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 명령어 확인
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