
No outro dia, um engenheiro americano Andrew Rynhard
apresentou um projeto interessante: uma distribuição compacta do Linux projetada especificamente para executar clusters Kubernetes. Ele recebeu o nome da mitologia grega antiga -
Talos .
O projeto apareceu inspirado
no tweet de Kelsey Hightower em 2015, no qual ele disse que tínhamos que esperar o aparecimento do KubeOS condicional (após o qual a vida em ambientes nublados será finalmente maravilhosa):
A propósito, com o advento do Talos, essa história continuou : alguém respondeu a um tweet histórico de que esse sistema já havia aparecido e o autor do Talos disse que ficaria feliz se Kelsey visse o projeto. A reação deste último, no entanto, ainda não foi seguida.Aparentemente, o desenvolvimento do Talos foi feito por uma pessoa
(representando-se em toda a empresa - Autonomy ) - levou mais de um ano. E agora, quando o status de disponibilidade mínima for atingido, o autor espera que outros representantes da comunidade nativa do Kubernetes / cloud se juntem a ele. Então, qual é a essência do projeto?
Princípios e recursos do Talos
O Talos está posicionado como uma distribuição Linux moderna criada especificamente (e exclusivamente!) Para o Kubernetes. Para atingir o objetivo em sua implementação, siga as seguintes abordagens:
Minimalismo
O minimalismo onipresente é uma das pedras angulares da arquitetura do Talos. Um dos exemplos impressionantes aqui é
o serviço de inicialização usado, que (ao contrário das tendências modernas nessa área) segue a filosofia do UNIX de que “todo programa faz uma coisa, mas é bom”:
Queríamos que o init se concentrasse em uma única tarefa - lançar o Kubernetes. Simplesmente não possui mecanismos para outras ações.
Os desenvolvedores foram além e privaram seu sistema operacional de acesso de usuário ao host, familiar aos administradores de sistema: o
Talos não possui shells de comando, nem um daemon SSH, nem a capacidade de iniciar seus próprios processos no host. E realmente: por que tudo isso se você precisa executar o Kubernetes e mais? Quase todos os processos no Talos operam em contêineres.
No entanto, como o mundo não é tão perfeito (para o sistema operacional funcionar totalmente "sozinho"), ainda existem ferramentas para operar o sistema operacional:
- osd daemon, implementado com o princípio de fornecer os privilégios mínimos necessários (Princípio do Menor Privilégio) e oferecer uma API (baseada no gRPC) para gerenciar nós;
- O utilitário osctl CLI permite que você se comunique com o serviço osd, que é executado em cada nó.
Portanto, um conjunto de recursos operacionais básicos foi implementado: serviços de reinicialização e nós do cluster, recebimento de logs do kernel (dmesg) e de contêineres, inserção de dados nos arquivos de configuração do nó etc.
Todos esses componentes (init, osd, osctl ...), assim como
alguns outros no kit de distribuição,
estão escritos em Go . A propósito, todo o código-fonte é distribuído sob os termos da licença Open Source Mozilla Public License 2.0.
Segurança
A abordagem minimalista descrita acima (tudo o que é necessário
apenas para iniciar o Kubernetes) + o princípio de emitir apenas privilégios mínimos por si só reduz a superfície potencial de ataque. Também em Talos:
- o kernel incluído é configurado de acordo com as recomendações do Kernel Self Protection Project ( KSSP ), que se concentra na capacidade do kernel de se proteger independentemente contra possíveis bugs e vulnerabilidades (em vez de usar os utilitários de espaço do usuário para os mesmos fins);
- o sistema de arquivos raiz é montado em somente leitura, o que - combinado com a ausência de shells / SSH - torna o sistema imutável;
- usa TLS bidirecional (mTLS) para interagir com a API;
- As definições e configurações do Kubernetes são aplicadas de acordo com as diretrizes do CIS (Center for Internet Security).
Uma vantagem adicional decorrente do minimalismo e focada no imutável é a
previsibilidade do sistema no comportamento (uma vez que o número de fatores que afetam o ambiente diminui).
Relevância
Os autores prometem basear o Talos no penúltimo lançamento upstream do Kubernetes (no entanto, o K8s 1.13.3 é
suportado no momento) e no último lançamento do kernel do LTS Linux disponível (agora usando 4.19.10).
Componentes do sistema
Os principais componentes da distribuição (além do kernel e dos utilitários "proprietários") são:
- musl-libc - como uma biblioteca C padrão;
- golang - para
init
e suas outras ferramentas; - gRPC - para a API;
- Containerd - para iniciar os serviços do sistema em contêineres (usados com o plug-in CRI do Kubernetes);
- kubeadm - para implantar clusters.
Trabalhar com o Talos
Os exemplos de implantação do Talos para implantações da AWS, KVM e Xen são fornecidos na
documentação do
projeto . Para ilustrar rapidamente como isso fica, aqui está o algoritmo de instalação das máquinas virtuais KVM Linux:
1. Instalando o nó principal no host:
docker run --rm --privileged --volume /dev:/dev \ autonomy/talos:latest image -b /dev/sdb -f -p bare-metal \ -u http://${IP}:8080/master.yaml
2. Criando uma VM:
virt-install -n master --description "Kubernetes master node." \ --os-type=Linux --os-variant=generic --virt-type=kvm --cpu=host \ --vcpus=2 --ram=4096 --disk path=/dev/sdb \ --network bridge=br0,model=e1000,mac=52:54:00:A8:4C:E1 \ --graphics none --boot hd --rng /dev/random
3. Ações semelhantes para criar um nó de trabalho:
docker run --rm --privileged --volume /dev:/dev \ autonomy/talos:latest image -b /dev/sdc -f -p bare-metal \ -u http://${IP}:8080/worker.yaml virt-install -n master --description "Kubernetes worker node." \ --os-type=Linux --os-variant=generic --virt-type=kvm --cpu=host \ --vcpus=2 --ram=4096 --disk path=/dev/sdc \ --network bridge=br0,model=e1000,mac=52:54:00:B9:5D:F2 \ --graphics none --boot hd --rng /dev/random
A configuração da interação entre osd e osctl basicamente se resume à geração de chaves para sua autenticação (já mencionada mTLS) e é descrita
aqui .
Trabalhos
osctl reboot
com eles se
osctl reboot
a comandos como
osctl reboot
,
osctl stats
e
osctl logs
. Demonstração da saída de contêineres no espaço
k8s.io
nome
k8s.io
:
$ osctl ps -k NAMESPACE ID IMAGE PID STATUS k8s.io 0ca1… sha256:da86… 2341 RUNNING k8s.io 356f… sha256:da86… 2342 RUNNING … k8s.io e42e… sha256:4ff8… 2508 RUNNING k8s.io kubelet k8s.gcr.io/… 2068 RUNNING
O processo de configuração de um cluster Kubernetes com o Talos está disponível
aqui (nós de materiais) e
aqui (trabalhadores).
Status e Perspectivas
O projeto está no estágio da versão alfa (a versão mais recente é a
v0.1.0-alpha.18 ) e, é claro, nesse estágio parece mais um experimento interessante do que qualquer coisa realmente próxima da produção.
No entanto, a onda de interesse no Talos após seu recente anúncio (já com mais de 600 estrelas no GitHub) e a chamada do único autor para a criatividade conjunta pode servir como um excelente incentivo para seu desenvolvimento.
Atividade do projeto Talos nos últimos diasNo mínimo, a distribuição contém as idéias nativas da nuvem relevantes para o mundo, cuja implementação de qualidade é uma questão de tempo.
PS
Leia também em nosso blog: