[CKA] kubeadm 설치 중 오류 해결

IP forwarding, cgroup driver, kubeconfig와 worker 초기화 등 kubeadm 설치 중 만난 문제를 정리합니다.

IP forwarding preflight 오류

kubeadm init에서 다음 preflight 오류가 발생할 수 있습니다.

[ERROR FileContent--proc-sys-net-ipv4-ip_forward]:
/proc/sys/net/ipv4/ip_forward contents are not set to 1

Pod 간 통신과 CNI 동작에는 노드의 패킷 포워딩이 필요합니다. 모든 노드에서 값을 영구 설정하고 즉시 적용합니다.

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF
sudo sysctl --system

containerd와 kubelet cgroup driver

containerd와 kubelet은 같은 cgroup driver를 사용해야 합니다. 이 실습에서는 systemd driver를 사용했습니다.

sudo mkdir -p /etc/containerd
sudo sh -c 'containerd config default | sed "s/SystemdCgroup = false/SystemdCgroup = true/" > /etc/containerd/config.toml'
grep SystemdCgroup /etc/containerd/config.toml
sudo systemctl restart containerd

kubectl이 API server에 연결하지 못하는 경우

control plane 초기화 후 kubectl에서 couldn't get current server API group 또는 연결 오류가 나오면 현재 사용자의 kubeconfig를 확인합니다.

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

worker node의 kubelet.conf를 일반 사용자의 kubectl 관리 설정으로 복사하는 방식은 사용하지 않습니다. 클러스터 관리 명령은 권한이 있는 kubeconfig에서 실행합니다.

worker node를 다시 join하기 전 초기화

실패한 join 상태를 정리해야 한다면 먼저 해당 노드와 사용 중인 CRI socket을 확인한 뒤 kubeadm reset을 실행합니다.

sudo kubeadm reset --cri-socket=<cri-socket>

/etc/kubernetes, /var/lib/kubelet, /etc/cni/net.d를 무조건 재귀 삭제하는 명령은 필요한 상태와 보존 대상을 확인하기 전에는 사용하지 않습니다. reset 후 남은 CNI·네트워크 설정은 현재 Kubernetes와 CNI 공식 문서의 정리 절차에 따라 처리합니다.