Instalando o k0s (distribuição Kubernetes all-inclusive)

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:

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/v0.11.1/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/v0.11.1/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/v0.11.1/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:

K0S_VERSION=v0.11.1
DEBUG=true
curl -sSLf https://get.k0s.sh | sudo sh
whereis k0s
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 default-config > $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/v0.11.1/configuration/

Após salvar as alterações, valide o conteúdo e sintaxe do arquivo com o seguinte comando:

k0s validate config --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://docs.k0sproject.io/

https://www.mirantis.com/blog/how-to-set-up-k0s-kubernetes-a-quick-and-dirty-guide/

https://medium.com/@adamparco/announcing-k0s-the-smallest-simplest-kubernetes-distribution-3626c86575d5

https://danilogo0001.medium.com/kubernetes-k0s-leve-simples-e-tudo-empacotado-com-multi-master-ha-e71b7c4a47da

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *