Atualizado em: 25 de julho de 2022
k0s é uma distribuição do Kubernetes com todos os recursos necessários para funcionar em um único e pequeno binário desenvolvido em Go, que proporciona uma simplicidade na instalação e manutenção do cluster. A pronúncia é correta é kay-zero-ess e tem por objetivo reduzir o esforço técnico e desgaste na instalação de um cluster Kubernetes, por isso o seu nome faz alusão a “Zero Friction“.
Essa distribuição é recomendada para uso em produção em ambientes on-premisse, computação em nuvem pública, privada, híbrida, computação de borda (do inglês edge computing), servidores bare-metal e/ou virtualizados.
O código fonte está disponível no Github (https://github.com/k0sproject/k0s) e o download é gratuito.
O k0s é mantido pelo time da Mirantis, a mesma empresa que comprou a parte enterprise do Docker e que também comprou e mantém o desenvolvimento e uso gratuito do Lens. O Lens é uma IDE que facilita o gerenciamento do Kubernetes).
Segundo a documentação oficial, as principais característica são:
- Empacotado como um único binário estático;
- Control Plane isolado e auto-hospedado;
- Variedade de backends de armazenamento: etcd, SQLite, MySQL e PostgreSQL;
- Control Plane elástico;
- Vanilla upstream Kubernetes;
- Utiliza como container runtimes padrão o containerd, mas permitindo outros como o Docker;
- Suporte a diversos Container Network Interface (CNI) (por padrão dá suporte ao Calico);
- Suporta as arquiteturas de computadores x86_64 e arm64.
Requisitos de Hardware e Software
As informações de hardware e software mínimos para executar o k0s (sem contar com os requisitos dos pods, aplicações e serviços que serão adicionados) estão disponíveis na página a seguir.
https://docs.k0sproject.io/latest/system-requirements/
Portas Utilizadas
A lista de portas envolvidas na comunicação entre os nodes está disponível no final da página: https://docs.k0sproject.io/latest/networking/
Instalação e Configuração do k0s
Na criação deste tutorial foram criadas duas máquinas virtuais utilizando o Ubuntu Server LTS 20.04 64 bits conforme a topologia mostrada na figura a seguir:

Nomes e endereços IPs das máquinas virtuais usadas neste tutorial:
- master/controller: 192.168.56.80/24
- worker: 192.168.56.81/24
OBS.: Neste tutorial o control plane (nodes master) e o data plane (nodes worker) do Kubernetes está sendo executado em uma única VM para fins de teste. Isso não é adequado para ambientes de produção por não oferecer alta disponibilidade, mas o k0s dá suporte a múltiplos nodes master e worker.
Mais informações estão disponíveis na página: https://docs.k0sproject.io/latest/high-availability/
Em ambas as VMS
No master e no worker execute os seguintes comandos para instalar o k0s, verificar a localização do binário e obter a ajuda do comando:
curl -sSLf https://get.k0s.sh | sudo sh whereis k0s k0s version k0s --help
Apenas na VM master
Execute o seguinte comando para exportar a configuração padrão de criação de um cluster k0s para um arquivo YAML.
k0s config create > $HOME/k0s.yaml
No arquivo recém criado altere as seguintes linhas. Em ambas, informe o valor o endereço IP do master (192.168.56.80):
spec.api.address spec.storage.etcd.peerAddress
OBS.: Outras opções de configurações estão explicadas na página: https://docs.k0sproject.io/latest/configuration/
Após salvar as alterações, valide o conteúdo e sintaxe do arquivo com o seguinte comando:
k0s config validate --config $HOME/k0s.yaml
Agora crie o nó master/controller do k0s com os seguintes comandos:
sudo k0s install controller --config $HOME/k0s.yaml
sudo systemctl start k0scontroller
sudo systemctl status k0scontroller
sudo k0s status
Instale o kubectl com os seguintes comandos (se já tiver instalado, pode pular esta parte):
curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl chmod +x ./kubectl sudo mv ./kubectl /usr/local/bin/kubectl kubectl version --client
Configure o autocomplete do kubectl conforme as instruções nessa doc do badtuxx/Descomplicando o Kubernetes.
Obtenha as credenciais de acesso ao cluster para com o seguinte comando:
sudo cat /var/lib/k0s/pki/admin.conf > $HOME/admin.conf
No arquivo recém criado altere a seguinte linha:
Antes:
server: https://localhost:6443
Depois:
server: https://192.168.56.80:6443
Adicione o acesso ao cluster ao arquivo do kubeconfig com os seguintes comandos.
mkdir -p $HOME/.kube
cat $HOME/admin.conf >> ~/.kube/config
Agora você pode tentar acessar os nodes do cluster e os pod com os seguintes comandos:
kubectl get nodes
kubectl get pods --all-namespaces
Ou:
sudo k0s kubectl get nodes
sudo k0s kubectl get pods --all-namespaces
OBS.: O node master/controller não será exibido na lista de nodes, isso é uma especificidade do k0s que por padrão só exibe os nodes workers, porque são os que realmente podem executar cargas de trabalho do usuário.
Para adicionar um node worker, criar um arquivo com o token e envie para a VM a ser adicionada ao cluster. Para isso utilize os seguintes comandos:
sudo k0s token create --config $HOME/k0s.yaml --role=worker > $HOME/token-file scp token-file NOME_USUARIO@192.168.56.81:
Visualize a lista de tokens com o seguinte comando:
sudo k0s token list --debugListenOn 192.168.56.80
Apenas na VM worker
Após ter instalado o k0s no node worker (instruções mostradas no início deste tutorial), execute o seguinte comando para instalar o k0s como worker nesta VM e adicioná-la ao cluster Kubernetes.
sudo k0s install worker --token-file $HOME/token-file sudo systemctl start k0sworker sudo systemctl status k0sworker sudo k0s status
De volta a VM master
Agora que o node foi adicionado ao cluster, execute os seguintes comandos para listar os nodes.
kubectl get nodes -o wide
Removendo o k0s (em caso de necessidade)
Execute os seguintes comandos de acordo com a VM para remover o k0s.
Na VM master:
sudo systemctl stop k0scontroller
sudo k0s reset
Na VM worker:
sudo systemctl stop k0sworker
sudo k0s reset
Mais informações podem ser encontradas no links a seguir:
https://www.mirantis.com/blog/how-to-set-up-k0s-kubernetes-a-quick-and-dirty-guide/
1 comentário em “Instalando o k0s (distribuição Kubernetes all-inclusive)”