Case: Longhorn em K3s para substituir NFS instável
Case: Longhorn em K3s para substituir NFS instável
Contexto
Um cluster K3s local usava NFS como storage de desenvolvimento e sofria instabilidade (PVs caindo, pods crashando). Precisávamos de um provisionador estável, fácil de reinstalar e sem dependência do NFS.
O que foi feito
- Scripts para instalar Longhorn em K3s a partir do bundle upstream (1.6.x, 1.9.x), dividindo manifestos em partes aplicáveis.
- Patches específicos para K3s (paths de kubelet, registrador CSI,
volumeBindingModee réplicas ajustadas). - Preflight anti-downgrade: bloqueia instalar versão mais antiga se já houver Longhorn no cluster.
- Scripts de delete/reinstall que limpam CRDs e finalizers para evitar stuck resources.
- Script de status para inspecionar pods, eventos, logs do CSI/manager e serviços de webhook.
Fluxo (simplificado)
flowchart LR
Install[install.sh] --> Fetch[fetch_upstream.sh\nbaixa bundle]
Fetch --> Split[split_upstream.sh\nquebra manifestos]
Split --> Patch[patch_k3s.sh\npaths + defaults]
Patch --> ApplyCRD[apply CRDs/RBAC/manager/CSI/UI]
ApplyCRD --> Restart[rollout restart manager]
Restart --> Wait[wait pods Ready]
Delete[delete.sh] --> Cleanup[remove UI/CSI/manager/RBAC]
Cleanup --> Finalizers[limpa finalizers\nvolumes/replicas/etc.]
Finalizers --> RemoveCRD[delete CRDs + namespace]
Operação e devX
install.sh: instala namespace, baixa/splita bundle, aplica patches, instala CRDs/RBAC/manager/CSI/UI, aplica defaults e reinicia manager; espera pods ficarem Ready.delete.sh: remove componentes, limpa finalizers de CRs e apaga CRDs/namespace.reinstall.sh: combina delete + install para rebuild limpo.status.sh: mostra pods, últimos eventos, logs de CSI/manager e status dos webhooks.
Impacto (anonimizado)
- Troca de NFS instável por storage Longhorn estável no cluster local.
- Reinstalação previsível (scripts idempotentes, com preflight anti-downgrade).
- Diagnóstico rápido de falhas (eventos/logs consolidados em um comando).
O que você pode reutilizar
- Patching de paths K3s (
/var/lib/kubelet) em bundles upstream antes de aplicar. - Preflight que bloqueia downgrade acidental do longhorn-manager.
- Script de limpeza que remove finalizers para evitar CRs presas ao desinstalar.
Esta postagem está licenciada sob
CC BY 4.0
pelo autor.