Como usar o K3s para executar um cluster Kubernetes em sua máquina de desenvolvimento

0
53


O K3s é uma distribuição leve do Kubernetes, ideal para uso em desenvolvimento. Agora faz parte da Cloud Native Computing Foundation (CNCF), mas foi originalmente desenvolvido pela Rancher.

O K3s é fornecido como um único binário com um tamanho de arquivo inferior a 50 MB. Apesar de sua aparência minúscula, o K3s inclui tudo o que você precisa para executar um cluster Kubernetes pronto para produção. O projeto se concentra em hardware com recursos limitados, onde a confiabilidade e a capacidade de manutenção são as principais preocupações. Embora o K3s agora seja comumente encontrado na borda dos dispositivos IoT, essas qualidades também o tornam um bom candidato para uso local pelos desenvolvedores.

Introdução ao K3

A execução do binário K3s iniciará um cluster Kubernetes na máquina host. O processo principal do K3s inicia e gerencia todos os componentes do Kubernetes, incluindo o servidor de API do plano de controle, uma instância de trabalho do Kubelet e o tempo de execução do contêiner containerd.

Na prática, você normalmente desejará que os K3s iniciem automaticamente como um serviço. É recomendável que você use o script de instalação oficial para que o K3 seja executado rapidamente em seu sistema. Isso fará o download do binário, o moverá para o seu caminho e registrará um serviço systemd ou openrc conforme apropriado para o seu sistema. O K3s será configurado para reiniciar automaticamente depois que seu processo travar ou seu host reinicializar.

$ curl -sfL https://get.k3s.io | sh -

Imagem de instalação do K3s

Confirme se a instalação foi bem-sucedida verificando o status do k3s Serviço:

$ sudo service k3s status

Você está pronto para começar a usar seu cluster se active (running) é exibido em verde.

Interagindo com seu cluster

O K3s inclui o Kubectl se você o instalar usando o script fornecido. Está aninhado sob o k3s domínio:

$ k3s kubectl get pods
No resources found in default namespace.

Você pode receber um erro semelhante a este:

$ k3s kubectl get pods
WARN[0000] Unable to read /etc/rancher/k3s/k3s.yaml, please start server with --write-kubeconfig-mode to modify kube config permissions 
error: error loading config file "/etc/rancher/k3s/k3s.yaml": open /etc/rancher/k3s/k3s.yaml: permission denied

Você pode corrigir isso ajustando as permissões de arquivo do caminho referenciado:

$ sudo chmod 644 /etc/rancher/k3s/k3s.yaml

Agora você deve ser capaz de executar comandos Kubectl sem usar sudo.

Você ainda pode usar uma instalação autônoma do Kubectl se não quiser confiar na versão integrada do K3s. Use o KUBECONFIG variável de ambiente ou --kubeconfig sinalizador para fazer referência ao arquivo de configuração do K3s ao executar bare kubectl domínio:

$ export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
$ kubectl get pods
No resources found in default namespace.

Uma carga de trabalho de exemplo

Você pode testar seu cluster adicionando uma implementação simples:

$ k3s kubectl create deployment nginx --image=nginx:latest
deployment.apps/nginx created
$ k3s kubectl expose deployment nginx --type=LoadBalancer --port=80
service/nginx exposed

Use Kubectl para descobrir o endereço IP do serviço que foi criado:

$ k3s kubectl get services
NAME         TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP      10.43.0.1     <none>        443/TCP        35m
nginx        LoadBalancer   10.43.49.20   <pending>     80:30968/TCP   17s

Neste exemplo, o serviço NGINX pode ser acessado em 10.43.49.20. Visite este URL em seu navegador da Web para ver a página de destino NGINX padrão.

imagem da página padrão do NGINX em execução no K3s

Configurando as opções do Kubernetes

Você pode definir argumentos personalizados para componentes individuais do Kubernetes ao executar o K3. Os valores devem ser fornecidos como sinalizadores de linha de comando para o binário K3s. As variáveis ​​de ambiente também são suportadas, mas a conversão do sinalizador para o nome da variável nem sempre é consistente.

Aqui estão alguns sinalizadores comumente usados ​​para configurar sua instalação:

Há muitas outras opções disponíveis para personalizar como o K3s e seu cluster Kubernetes funcionam. Isso inclui funções para desabilitar componentes integrados, como o controlador Traefik Ingress (--disable traefik) para que você possa substituí-los por implementações alternativas.

Além de sinalizadores e variáveis, o K3s também suporta um arquivo de configuração YAML que é muito mais fácil de manter. Deposite isso em /etc/rancher/k3s/config.yaml para que o K3s o use automaticamente toda vez que for iniciado. Os nomes dos campos devem ser argumentos CLI despojados de seus -- prefixo.

node-name: first-worker
bind-address: 1.2.3.4

Clusters de vários nós

O K3s tem suporte completo para clusters de vários nós. Você pode adicionar nós ao seu cluster definindo o K3S_URL S K3S_TOKEN variáveis ​​de ambiente antes de executar o script de instalação.

$ curl -sfL https://get.k3s.io | K3S_URL=https://192.168.0.1:6443 K3S_TOKEN=token sh -

Este script instalará o K3s e o configurará como um nó de trabalho conectando-se ao endereço IP 192.168.0.1. Para encontrar seu token, copie o valor do /var/lib/rancher/k3s/server/node-token arquivo da máquina que está executando o servidor K3s.

Uso de imagens em registros privados

O K3s possui um bom suporte integrado para imagens em registros privados. Você pode fornecer um arquivo de configuração especial para injetar credenciais de login em seu cluster. Essas credenciais serão lidas quando o servidor K3s for iniciado. Ele os compartilhará automaticamente com seus nós do trabalhador.

Crie um /etc/rancher/k3s/registries.yaml arquivo com o seguinte conteúdo:

mirrors:
  example-registry.com:
    endpoint:
      - "https://example-registry.com:5000"

Isso permitirá que seu cluster extraia imagens como example-registry.com/example-image:latest do servidor em example-registry.com:5000. Você pode especificar vários URLs no endpoint campo; eles serão usados ​​como alternativas na ordem escrita até que ocorra uma extração bem-sucedida.

Forneça as credenciais do usuário para seus logs usando a seguinte sintaxe:

mirrors:
  example-registry.com:
    endpoint:
      - "https://example-registry.com:5000"
configs:
  "example-registry.com:5000":
    auth:
      username: <username>
      password: <password>

As credenciais são definidas por endpoint. Registros definidos com vários terminais precisam de entradas individuais no config campo para cada um.

Os endpoints que usam SSL também devem receber uma configuração TLS:

configs:
  "example-registry.com:5000":
    auth:
      username: <username>
      password: <password
    tls:
      cert_file: /tls/cert
      key_file: /tls/key
      ca_file: /tls/ca

Selecione os cert_file, key_fileS ca_file campos para fazer referência aos arquivos de certificado corretos para seu registro.

Atualizando seu cluster

Você pode atualizar para novas versões do K3s executando a versão mais recente do script de instalação. Isso detectará automaticamente seu cluster existente e o migrará para a nova versão.

$ curl -sfL https://get.k3s.io | sh -

Se você personalizou seu cluster definindo variáveis ​​de ambiente do instalador, repita-as ao executar o comando upgrade:

$ curl -sfL https://get.k3s.io | INSTALL_K3S_BIN_DIR=/usr/bin sh -

Os clusters de vários nós são atualizados usando o mesmo procedimento. Você deve fazer upgrade de cada nó do trabalhador individualmente, depois que o servidor executar a nova versão.

Você pode instalar uma versão específica do Kubernetes configurando o INSTALL_K3S_VERSION variável antes de executar o script:

$ curl -sFL https://get.k3s.io | INSTALL_K3S_VERSION=v1.23.0 sh -

a INSTALL_K3S_CHANNEL version pode selecionar versões instáveis ​​e versões de visualização:

$ curl -sFL https://get.k3s.io | INSTALL_K3S_CHANNEL=latest sh -

O K3s usará como padrão a execução da versão estável mais recente do Kubernetes quando essas variáveis ​​não estiverem definidas.

Desinstalar K3

Como o K3s é empacotado como um binário independente, é fácil limpá-lo se você quiser parar de usá-lo. O processo de instalação fornece um script de desinstalação que removerá os serviços do sistema, removerá o binário e apagará todos os dados criados por seu cluster.

$ /usr/local/bin/k3s-uninstall.sh

Você deve usar o script em /usr/local/bin/k3s-agent-uninstall.sh em vez disso, ao encerrar um nó do trabalhador K3s.

conclusão

O K3s é uma distribuição binária única do Kubernetes que consome poucos recursos do sistema e é fácil de manter. Isso não prejudica os recursos: o K3s é anunciado como pronto para produção e tem suporte total para objetos de API do Kubernetes, armazenamento persistente e rede com balanceamento de carga.

K3s é uma boa alternativa para outras versões do Kubernetes orientadas para desenvolvedores, como Minikube e MicroK8s. Você não precisa executar máquinas virtuais, instalar outro software ou fazer qualquer configuração avançada para configurar seu cluster. É particularmente adequado quando você já está executando o K3 em produção, permitindo eliminar disparidades entre seus ambientes.