Substituindo o Kubernetes por systemd (2024)
(blog.yaakov.online)- O autor relata como, ao operar servidores pessoais, ficou frustrado com a complexidade e o consumo de recursos do Kubernetes e acabou substituindo-o por uma combinação de systemd e Podman
- O Kubernetes é atraente por causa de GitOps e automação, mas em ambientes pequenos é um sistema pesado demais
- Usando o recurso de atualização automática do Podman e a geração de serviços systemd, é possível implementar de forma simples as funções centrais que antes eram feitas pelo Kubernetes
- Também explica a execução automática de serviços em nível de usuário combinando
systemctleloginctl, destacando que o consumo de recursos da VPS caiu bastante - No entanto, menciona que a integração do Podman com o systemd deve em breve ser substituída por uma nova abordagem chamada "Quadlet"
Introdução: o primeiro contato com o Kubernetes
- Ele apresenta a experiência de ter tentado montar um cluster em um NUC pessoal ao experimentar Kubernetes em 2018
- O Kubernetes é complexo, mas no fundo funciona com a seguinte estrutura de loop repetitivo:
- identificar o estado atual → calcular o estado desejado → calcular a diferença → aplicar
- Os recursos de automação com vários componentes, como o cert-manager, foram muito impressionantes
As exigências excessivas de recursos do Kubernetes
- Em um servidor pessoal (NUC), o Kubernetes causava uso contínuo de CPU, barulho da ventoinha e aquecimento
- Até diferentes distribuições, como Azure, MicroK8s e K3S, consumiam recursos consideráveis
- MicroK8s: 12% de uso de CPU (VPS com 2 vCPU)
- K3S: 6% de uso de CPU (2 vCPU Ampere A1)
A tentação da automação com GitOps
- Com ferramentas como Flux, era possível fazer automação de deploy baseada em Git, o que era muito conveniente
- Bastava enviar a imagem de contêiner para o GitHub, e o servidor implantava automaticamente a versão mais recente do app
- Porém, sem Kubernetes, era muito difícil implementar esse tipo de automação
A chegada do Podman e do systemd
- O Podman é uma alternativa ao Docker e tem a capacidade de converter contêineres em serviços systemd
- Com
podman generate systemd, é possível gerar automaticamente arquivos de serviço - Com a tag
io.containers.autoupdate, é possível fazer atualização automática da imagem uma vez por dia - Seguindo esse método apresentado na Fedora Magazine, ele conseguiu montar com sucesso um ambiente alternativo ao Kubernetes
Os três componentes necessários
-
systemctl --user enable mycontainer.service- Configura o contêiner para iniciar automaticamente no login
-
loginctl enable-linger- Configura a sessão do usuário para ser ativada na inicialização do servidor
-
Recurso de auto-update do Podman
- Com esses três elementos, foi possível substituir 99% do que o Kubernetes oferecia de forma mais simples e leve
Resultado da migração
- Ele migrou todos os serviços de uma VPS antiga para uma nova VPS
- Os recursos foram reduzidos pela metade, mas o desempenho até melhorou, com maior densidade de serviços e redução de custos
Próximo desafio: Quadlet
- Infelizmente, a integração do Podman com systemd deve ser descontinuada em breve
- Em vez disso, a definição passará para um novo formato chamado arquivos Quadlet
- Ele encerra observando que será preciso se preparar para aprender essa nova tecnologia
1 comentários
Comentários do Hacker News
Se você vê o Kubernetes apenas como uma forma de executar e atualizar imagens de contêiner, ele pode ser exagero
Tentei operar alguns pequenos sites com Docker, mas era difícil atualizar e testar imagens
rsyncao host de implantação e executar o script de deployNão tenho problema em administrar um cluster Kubernetes, mas em projetos de hobby é difícil usá-lo por causa dos requisitos de recursos
O systemd resolve muitos problemas e não deve ser ignorado
systemctl editOpero meu homelab com podman-systemd e, toda vez que pesquiso uma nova variação de Kubernetes, não vejo vantagem adicional
Usar o Quadlet para gerenciar contêineres dentro do systemd é o próximo passo
Criei o Skate e montei um sistema com suporte a multihost e manifestos do Kubernetes
É possível usar comandos do docker compose e o Caddy para obter certificados automaticamente
docker compose up -d --pull alwaysO systemd agora oferece o ParticleOS, uma distribuição de SO com suporte oficial para fluxos de trabalho imutáveis
Acho que implantar em um único servidor não deveria ser complicado, então escrevi uma ferramenta chamada Harbormaster