mirror of
https://github.com/Alkatrazz24/Funk-lab.git
synced 2026-07-09 02:54:43 +02:00
feat: funk-cluster start --k8s — uncordon + attente ArgoCD
Après funk-stop --k8s, les nœuds reviennent Ready mais SchedulingDisabled (cordon stocké dans etcd). Sans uncordon, tous les pods restent Pending. Ajouts dans funk-start --k8s : - kubectl uncordon sur les nœuds SchedulingDisabled uniquement (idempotent) - Attente ArgoCD Running (jusqu'à 3 min) — confirme que le GitOps est opérationnel Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
a631a4ab6c
commit
c9fd0d2812
2 changed files with 42 additions and 4 deletions
|
|
@ -62,7 +62,8 @@ La connexion SSH se coupe à la fin (storage-01 s'éteint lui-même). C'est norm
|
||||||
funk-stop --k8s
|
funk-stop --k8s
|
||||||
```
|
```
|
||||||
|
|
||||||
Ordre d'arrêt automatique : hermes-agent + litellm → cordon+drain compute-02/03 → drain compute-01 → vérif NFS → talosctl shutdown → gpu-01 → qdrant + postgresql → storage-01.
|
Ordre d'arrêt : hermes-agent + litellm → cordon+drain compute-02/03 → drain compute-01 → vérif NFS → talosctl shutdown → gpu-01 → qdrant + postgresql → storage-01.
|
||||||
|
Ordre de démarrage : storage-01 déjà up → gpu-01 (WOL) → compute-01/02/03 (WOL) → uncordon → ArgoCD up → workloads.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -83,7 +84,10 @@ Vérifie dans l'ordre :
|
||||||
3. Attend le montage NFS `/mnt/models` sur gpu-01
|
3. Attend le montage NFS `/mnt/models` sur gpu-01
|
||||||
4. Attend le chargement du modèle GPU (jusqu'à 4 min)
|
4. Attend le chargement du modèle GPU (jusqu'à 4 min)
|
||||||
5. Attend les modèles CPU (jusqu'à 2 min)
|
5. Attend les modèles CPU (jusqu'à 2 min)
|
||||||
6. `--k8s` : envoie WOL aux 3 nœuds, attend ping, attend nœuds Ready (3 min max)
|
6. `--k8s` :
|
||||||
|
- Envoie WOL aux 3 nœuds, attend ping, attend nœuds Ready (3 min max)
|
||||||
|
- **Uncordon** des nœuds s'ils sont `SchedulingDisabled` (état résiduel après `funk-stop --k8s`)
|
||||||
|
- Attend qu'ArgoCD soit Running (signe que le GitOps redémarre les workloads)
|
||||||
|
|
||||||
### `funk-stop [--k8s]`
|
### `funk-stop [--k8s]`
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -308,6 +308,8 @@ cmd_start() {
|
||||||
if [ -n "$with_k8s" ]; then
|
if [ -n "$with_k8s" ]; then
|
||||||
echo ""
|
echo ""
|
||||||
echo "[ cluster k8s — démarrage compute-01/02/03 ]"
|
echo "[ cluster k8s — démarrage compute-01/02/03 ]"
|
||||||
|
|
||||||
|
# Envoi WOL pour les nœuds éteints
|
||||||
for i in 0 1 2; do
|
for i in 0 1 2; do
|
||||||
local ip="${K8S_IPS[$i]}" name="${K8S_NAMES[$i]}" mac="${K8S_MACS[$i]}"
|
local ip="${K8S_IPS[$i]}" name="${K8S_NAMES[$i]}" mac="${K8S_MACS[$i]}"
|
||||||
if ping -c1 -W2 "$ip" &>/dev/null; then
|
if ping -c1 -W2 "$ip" &>/dev/null; then
|
||||||
|
|
@ -317,21 +319,53 @@ cmd_start() {
|
||||||
ok "$name — WOL envoyé"
|
ok "$name — WOL envoyé"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# Attente ping
|
||||||
info "Attente ping des nœuds..."
|
info "Attente ping des nœuds..."
|
||||||
for ip in "${K8S_IPS[@]}"; do
|
for ip in "${K8S_IPS[@]}"; do
|
||||||
wait_ping "$ip" 120 && ok "$ip joignable" || warn "$ip n'a pas répondu"
|
wait_ping "$ip" 120 && ok "$ip joignable" || warn "$ip n'a pas répondu"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# Attente nœuds Ready (kubelet enregistré + CNI ok)
|
||||||
info "Attente nœuds Ready (jusqu'à 3 min)..."
|
info "Attente nœuds Ready (jusqu'à 3 min)..."
|
||||||
local k8s_elapsed=0
|
local k8s_elapsed=0
|
||||||
until [ $($KUBECTL get nodes --no-headers 2>/dev/null | grep -c " Ready" || echo 0) -ge 3 ] \
|
until [ "$($KUBECTL get nodes --no-headers 2>/dev/null | grep -c " Ready" || echo 0)" -ge 3 ] \
|
||||||
|| [ $k8s_elapsed -ge 180 ]; do
|
|| [ $k8s_elapsed -ge 180 ]; do
|
||||||
sleep 10; k8s_elapsed=$((k8s_elapsed + 10))
|
sleep 10; k8s_elapsed=$((k8s_elapsed + 10))
|
||||||
echo -ne " → Attente nœuds Ready... ${k8s_elapsed}s\r"
|
echo -ne " → Attente nœuds Ready... ${k8s_elapsed}s\r"
|
||||||
done; echo ""
|
done; echo ""
|
||||||
local ready=$($KUBECTL get nodes --no-headers 2>/dev/null | grep -c " Ready" || echo 0)
|
local ready="$($KUBECTL get nodes --no-headers 2>/dev/null | grep -c " Ready" || echo 0)"
|
||||||
[ "$ready" -ge 1 ] \
|
[ "$ready" -ge 1 ] \
|
||||||
&& check_ok "kubectl — $ready nœud(s) Ready" \
|
&& check_ok "kubectl — $ready nœud(s) Ready" \
|
||||||
|| warn "Nœuds pas encore Ready (vérifier avec kubectl get nodes)"
|
|| warn "Nœuds pas encore Ready (vérifier avec kubectl get nodes)"
|
||||||
|
|
||||||
|
# Uncordon — les nœuds restent SchedulingDisabled après un funk-stop --k8s
|
||||||
|
# Sans ça, ArgoCD déploie des pods qui restent Pending indéfiniment
|
||||||
|
echo ""
|
||||||
|
info "Uncordon des nœuds (autorise le scheduling des pods)..."
|
||||||
|
local uncordoned=0
|
||||||
|
for name in "${K8S_NAMES[@]}"; do
|
||||||
|
if $KUBECTL get node "$name" --no-headers 2>/dev/null | grep -q "SchedulingDisabled"; then
|
||||||
|
$KUBECTL uncordon "$name" 2>/dev/null && ok "$name — uncordonné" || warn "$name — uncordon échoué"
|
||||||
|
uncordoned=$((uncordoned + 1))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
[ $uncordoned -eq 0 ] && ok "Nœuds déjà schedulables (pas de cordon résiduel)"
|
||||||
|
|
||||||
|
# Attente ArgoCD opérationnel (signe que les workloads peuvent se déployer)
|
||||||
|
echo ""
|
||||||
|
info "Attente ArgoCD opérationnel (jusqu'à 3 min)..."
|
||||||
|
local argocd_elapsed=0
|
||||||
|
until [ "$($KUBECTL get pods -n argocd --no-headers 2>/dev/null \
|
||||||
|
| grep -c "Running" || echo 0)" -ge 1 ] \
|
||||||
|
|| [ $argocd_elapsed -ge 180 ]; do
|
||||||
|
sleep 10; argocd_elapsed=$((argocd_elapsed + 10))
|
||||||
|
echo -ne " → Attente ArgoCD... ${argocd_elapsed}s\r"
|
||||||
|
done; echo ""
|
||||||
|
local argocd_pods="$($KUBECTL get pods -n argocd --no-headers 2>/dev/null | grep -c "Running" || echo 0)"
|
||||||
|
[ "$argocd_pods" -ge 1 ] \
|
||||||
|
&& check_ok "ArgoCD — $argocd_pods pod(s) Running (GitOps opérationnel)" \
|
||||||
|
|| warn "ArgoCD pas encore prêt — workloads k8s en cours de déploiement"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
print_score
|
print_score
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue