k3s¶
Instala e mantém o k3s fixado por versão e checksum. Só reinstala se a versão instalada divergir de k3s_versao.
Este cluster roda num único node, sem alta disponibilidade de control plane nem failover automático se o node cair. Escolha consciente pro tamanho e criticidade atual do projeto, não uma limitação técnica do k3s, que suporta múltiplos nodes e control plane em HA se algum dia isso for necessário (ver k3s).
A configuração do servidor, hoje só node-name, vai em /etc/rancher/k3s/config.yaml, o mecanismo declarativo nativo do k3s, em vez de flag solta no ExecStart. É o jeito de escalar isso pra qualquer config futura (disable, tls-san, etc.) virar uma linha no template em vez de mais uma variável de ambiente espalhada. Toda mudança nesse arquivo reinicia o k3s, via handler, e o role força esse handler a rodar imediatamente (meta: flush_handlers) em vez de deixar pro fim da play. Sem isso, o restart só aconteceria depois do argocd-bootstrap já ter instalado o Argo CD e aplicado o root.yaml, um reinício de controle-plane fora de hora e sem relação com o que causou ele.
flowchart TD
Config[config.yaml muda] --> Handler[handler: reiniciar k3s]
Handler --> Flush["meta: flush_handlers, roda imediatamente"]
Flush -.->|sem isso| Tarde[restart só depois do argocd-bootstrap, fora de hora]
Na primeira vez que este role rodar contra um node que ainda não tem /etc/rancher/k3s/config.yaml (é o caso do node de produção hoje, mesmo sem trocar nenhum valor), o arquivo é criado do zero, o que conta como mudança, e o k3s reinicia. Esperado, coberto pelo meta: flush_handlers acima, mas é um reinício de controle-plane de verdade, vale saber antes de rodar.
k3s_node_name existe porque o node já rodava com --node-name=srv-1692732206 antes deste repositório existir, um nome escolhido manualmente, não o que o instalador geraria sozinho a partir do hostname. Conferido direto no node antes de migrar pra cá. O ExecStart antigo, gerado da vez em que o k3s foi instalado sem este role, ainda carrega essa flag; como o valor bate com o que config.yaml declara agora, não há conflito, só uma redundância inofensiva que só some numa próxima instalação do zero.
flowchart LR
ExecStart[ExecStart antigo: --node-name=srv-...] --> Valor[mesmo valor]
ConfigYaml[config.yaml novo: node-name] --> Valor
Valor --> SemConflito[sem conflito, redundância inofensiva]