노드 준비가 끝났다면(이전 글 참고) 이제 클러스터를 실제로 올립니다.
마스터 초기화
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하면 새 클러스터가 됩니다.