From 1af45ca51ee1adb745b61a2911f8e8364497e535 Mon Sep 17 00:00:00 2001 From: MichaelFisher1997 Date: Mon, 2 Mar 2026 19:37:06 +0000 Subject: [PATCH] fix: skip kubeadm wait-control-plane phase, wait for VIP manually - Use --skip-phases=wait-control-plane to avoid 4-minute timeout - Wait for kube-vip to bind VIP before checking API server health - Add kube-vip logs and VIP status to debug output --- nixos/kubeadm/modules/k8s-common.nix | 36 ++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/nixos/kubeadm/modules/k8s-common.nix b/nixos/kubeadm/modules/k8s-common.nix index 1d157a0..e44c66b 100644 --- a/nixos/kubeadm/modules/k8s-common.nix +++ b/nixos/kubeadm/modules/k8s-common.nix @@ -195,15 +195,47 @@ in env -i PATH=/run/current-system/sw/bin:/usr/bin:/bin kubeadm init \ --config /tmp/kubeadm/init-config.yaml \ --upload-certs \ - --ignore-preflight-errors=NumCPU,HTTPProxyCIDR,Port-10250 || { - echo "==> kubeadm init failed, checking pod status:" + --ignore-preflight-errors=NumCPU,HTTPProxyCIDR,Port-10250 \ + --skip-phases=wait-control-plane || { + echo "==> kubeadm init phases failed, checking pod status:" crictl pods || true crictl ps -a || true + echo "==> Checking if VIP is bound:" + ip -4 addr show | grep "$vip" || echo "VIP NOT BOUND" + echo "==> kube-vip logs:" + crictl logs $(crictl ps --name kube-vip -q 2>/dev/null | head -1) 2>/dev/null || echo "Could not get kube-vip logs" echo "==> kubelet logs:" journalctl -xeu kubelet --no-pager -n 50 exit 1 } + echo "==> Waiting for kube-vip to claim VIP $vip" + for i in $(seq 1 60); do + if ip -4 addr show | grep -q "$vip"; then + echo "==> VIP $vip is bound" + break + fi + if [ "$i" -eq 60 ]; then + echo "==> WARNING: VIP not bound after 2 minutes, proceeding anyway" + fi + sleep 2 + done + + echo "==> Waiting for API server to be ready" + for i in $(seq 1 60); do + if curl -sk "https://$vip:6443/healthz" 2>/dev/null | grep -q "ok"; then + echo "==> API server is healthy" + break + fi + if [ "$i" -eq 60 ]; then + echo "==> ERROR: API server not healthy after 2 minutes" + crictl pods || true + crictl ps -a || true + exit 1 + fi + sleep 2 + done + mkdir -p /root/.kube cp /etc/kubernetes/admin.conf /root/.kube/config chmod 600 /root/.kube/config