2 pontos por GN⁺ 2025-05-06 | 1 comentários | Compartilhar no WhatsApp
  • 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 systemctl e loginctl, 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

  1. systemctl --user enable mycontainer.service

    • Configura o contêiner para iniciar automaticamente no login
  2. loginctl enable-linger

    • Configura a sessão do usuário para ser ativada na inicialização do servidor
  3. 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

 
GN⁺ 2025-05-06
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

    • O Kubernetes fornece os recursos necessários para que os contêineres compartilhem estado, se conectem entre si e acessem configurações ou segredos
    • O custo de CPU e memória vem do gerenciamento dos contêineres e do fornecimento dos recursos necessários
    • Em sistemas distribuídos, nem tudo funciona do jeito desejado, então o operador tenta continuamente alcançar o estado desejado
  • Tentei operar alguns pequenos sites com Docker, mas era difícil atualizar e testar imagens

    • Substituí tudo por um script que cria unidades systemd no Debian e reinicia quando há mudanças no serviço
    • Uso uma VM de teste para enviar as mudanças com rsync ao host de implantação e executar o script de deploy
    • O sistema inteiro roda em um VPS de 2 GB, e poderia cair para 1 GB se o Wordpress desse suporte oficial ao SQLite
    • Uso Mariadb para minimizar os requisitos de suporte
  • Não tenho problema em administrar um cluster Kubernetes, mas em projetos de hobby é difícil usá-lo por causa dos requisitos de recursos

    • O Kubernetes exige muitos recursos para rodar em um VPS de US$ 10/mês
    • Uso manualmente comandos do docker compose e, no lugar de Ingress, uso o recurso de descoberta de contêineres do Traefik
    • Em vez de CronJobs, escrevo pequenos scripts para gerenciar o crontab
    • Estou tentando resolver de forma menos eficiente problemas que o Kubernetes já resolveu
    • Gostaria de uma alternativa leve que forneça uma API compatível com Kubernetes e funcione bem em instâncias VPS baratas
  • O systemd resolve muitos problemas e não deve ser ignorado

    • Ele oferece vários recursos, como machinectl, nspawn, vmspawn e importctl
    • homed/homectl expande o gerenciamento de usuários, mounts faz a montagem automática de unidades, boot controla o início/parada de serviços, e timers substitui o cron
    • As unidades de serviço controlam tarefas, e é possível editar arquivos de configuração com systemctl edit
  • Opero meu homelab com podman-systemd e, toda vez que pesquiso uma nova variação de Kubernetes, não vejo vantagem adicional

    • Uso playbooks do Ansible para baixar previamente as imagens e colocar os arquivos de unidade nos locais apropriados
    • Rodo a stack da impressora 3D Voron com podman-systemd e estou pensando em migrar para mkosi e systemd-sysupdate
    • Há o incômodo de ter que converter arquivos docker-compose em unidades systemd
    • O Podman reduz a complexidade das configurações de usuário/permissão
  • Usar o Quadlet para gerenciar contêineres dentro do systemd é o próximo passo

    • Mais detalhes podem ser vistos no blog da Red Hat
  • Criei o Skate e montei um sistema com suporte a multihost e manifestos do Kubernetes

    • Internamente, ele usa podman e systemd
  • É possível usar comandos do docker compose e o Caddy para obter certificados automaticamente

    • Dá para configurar isso de forma simples com o comando docker compose up -d --pull always
    • A configuração de CI é feita com scp e ssh
    • É simples e funciona também na máquina de desenvolvimento
  • O 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

    • Ela usa arquivos YAML para descobrir repositórios e executar arquivos Docker Compose
    • Mantém todo o estado em um único diretório, facilitando o backup
    • É a ferramenta de orquestração de contêineres mais simples de que se precisa para um único servidor