쿠버네티스 클러스터 구축

노드 준비가 끝났다면(이전 글 참고) 이제 클러스터를 실제로 올립니다.

마스터 초기화

kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address [마스터IP]

10.244.0.0/16 은 잠시 뒤 설치할 CNI인 Flannel의 기본 네트워크 대역입니다. Flannel을 쓸 거라면 이 대역을 맞춰줘야 해요.

kubeconfig 설정

API 서버에 접근하려면 인증 정보가 담긴 kube config를 홈 디렉토리에 복사해야 합니다. init 직후 필수로 해주는 작업이에요.

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

root로 쓴다면 환경 변수로 대체할 수 있는데, 이건 로그아웃·재부팅 시 사라집니다.

export KUBECONFIG=/etc/kubernetes/admin.conf
# 영구 적용하려면 ~/.bashrc 에 추가 후 source ~/.bashrc

워커 조인

마스터가 준비되면 kubeadm init 출력 마지막에 kubeadm join ... 명령이 나옵니다. 이걸 워커에서 실행하면 조인돼요. 명령을 다시 보고 싶으면 마스터에서:

kubeadm token create --print-join-command

조인 후 마스터에서 노드 상태를 확인합니다.

kubectl get nodes

CNI 설치 (Flannel)

파드끼리 통신하려면 CNI가 필요합니다. Flannel을 설치할게요.

참고: 예전 문서의 coreos/flannel 경로는 지금 flannel-io/flannel 로 이전됐습니다. 아래 릴리스 URL을 사용하세요.

kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

특정 네트워크 인터페이스를 쓰고 싶을 때

노드에 인터페이스가 여러 개라 Flannel이 엉뚱한 주소를 잡는다면, 매니페스트를 받아서 인터페이스를 명시합니다.

wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

kube-flannel 컨테이너의 args--iface-regex 를 추가한 뒤 apply 합니다.

args:
- --ip-masq
- --kube-subnet-mgr
- --iface-regex=10\.8\.8\.0

클러스터 초기화(리셋)

설정이 꼬였을 때 깨끗이 되돌리는 절차입니다.

systemctl stop kubelet
systemctl stop containerd

rm -rf /etc/cni/net.d/*
rm -rf /etc/kubernetes/*
kubeadm reset          # y로 수락

CNI 잔여물까지 확실히 지우려면 네트워크 인터페이스와 상태 파일도 정리한 뒤 재부팅하는 게 깔끔합니다.

ip link delete cni0
ip link delete flannel.1
rm -rf /var/lib/cni/
rm -rf /run/flannel
rm -rf ~/.kube
reboot

리셋은 마스터·워커 모두 각각 해줘야 하고, 재부팅 후 다시 init/join하면 새 클러스터가 됩니다.