Tutorial de nível babá! Use o k3d para obter alta disponibilidade de K3s!

Você já quis experimentar o modo de alta disponibilidade do K3s? Mas sofre por não ter 3 "nós sobressalentes" ou o tempo necessário para configurar o mesmo número de máquinas virtuais? Então você pode precisar muito da solução k3d!

Se você ainda não conhece o k3d, seu nome pode fornecer um ponto de entrada para entendê-lo: K3s no Docker. k3d é um programa de empacotamento leve para executar k3s no Docker. Com o k3d, os clusters k3s de um ou vários nós podem ser facilmente criados no Docker para desenvolvimento local no Kubernetes.

O K3d permite que você inicie um cluster k3s em um curto espaço de tempo. Além disso, você pode aprender rapidamente seus poucos, mas muito úteis comandos. O K3d é executado dentro do Docker, o que significa que você pode expandir ou reduzir o número de nós sem configurações desnecessárias. Neste artigo, apresentaremos como usar o k3d para configurar um cluster K3s de nó único e como usar o k3d para configurar o k3s no modo de alta disponibilidade.

Os dois objetivos principais deste artigo são apresentar o k3d como uma ferramenta para implantar clusters K3s e mostrar como a alta disponibilidade do K3s resiste à "degradação dos nós". Além disso, também aprenderemos quais componentes o K3s implementa no cluster por padrão.

Preparação preliminar

Site da Fanli https://www.cpa5.cn/

Em termos de sistemas operacionais (Linux, MacOS, Windows), cada um tem suas próprias preferências. Portanto, antes de verificarmos as configurações usadas neste artigo, existem apenas dois requisitos necessários: Docker e shell do Linux.

Se você estiver usando MacOS ou Windows, Docker Desktop é a solução preferida da Dcoker. Para Linux, você pode obter o mecanismo Docker e CLIs, os detalhes são os seguintes:

https://www.docker.com/products/docker-desktop

Shell do Linux, MacOS e Linux estarão todos envolvidos. Para sistemas Windows, a solução mais fácil e rápida é WSL2, também a usaremos na demonstração.

Aqui estão as configurações que usaremos:

  • SO : Windows 10 versão 2004 (build : 19041)

  • Componentes do sistema operacional: plataforma de máquina virtualizada e subsistema Linux do Windows

  • etapas de instalação:

  • https://docs.microsoft.com/en-us/windows/wsl/install-win10

  • Versão de lançamento do WLS2: Ubuntu

  • Endereço da loja do Windows:

  • https://www.microsoft.com/en-us/p/ubuntu/9nblggh4msv6#activetab=pivot:overviewtab

  • [Opcional] Console usado: Terminal Windows

  • Endereço da loja do Windows:

  • https://www.microsoft.com/en-us/p/windows-terminal/9n0dx20hk701

Passo 1: Comece pela instalação

Visite o link abaixo para saber como instalar o k3d:

https://k3d.io/#installation

Neste artigo, iremos instalá-lo por curl.

Observação: Existem sérios problemas de segurança na execução de scripts diretamente de URLs. Portanto, antes de executar qualquer script, certifique-se de que o código-fonte seja o site do projeto ou o repositório git online.

A seguir estão as etapas de instalação:

Visite: https://k3d.io/#installation

Copie o comando de instalação "curl" e execute-o em seu terminal:

curl -s https://raw.githubusercontent.com/rancher/k3d/main/install.sh | bash

1.png

Observação: esta captura de tela mostra dois comandos:

  • versão k3d : fornece a versão instalada do k3d

  • k3d -help : Lista os comandos disponíveis para k3d

Agora o k3d está instalado e pronto para uso.

Etapa 2: comece com um cluster de nó único

Antes de criar um cluster HA, vamos começar com um cluster de nó único para entender o comando ("gramática") e ver o que o k3d implementa por padrão.

Primeiro, a gramática. Na V3, o k3d fez grandes mudanças na maneira como os comandos são usados. Não vamos nos aprofundar em como os comandos anteriores foram feitos, vamos usar a sintaxe da V3.

O K3s segue a sintaxe "substantivo + verbo". Primeiro especifique o que queremos usar (cluster ou nó) e, em seguida, especifique a operação que queremos aplicar (criar, excluir, iniciar, parar).

Crie um cluster de nó único

Usaremos k3d para criar um cluster de nó único com valores padrão:

** criação de cluster k3d
**

2.png

Observação: a saída do comando k3d cluster create sugere a execução de outro comando para verificar se o cluster está em execução e acessível: kubectl cluster-info

O cluster agora está instalado e funcionando!

Espreitar dentro

Também podemos ver o que foi implantado de diferentes ângulos.

Vamos começar do início e ver o que há no cluster K3s (pods, serviços, implantação, etc.):

kubectl get all --all-namespaces

3.webp
Podemos ver que, além do serviço Kubernetes, quando usamos os valores padrão, o K3s também implanta serviços DNS, métricas e entrada (traefik).

Agora, vamos examinar os nós de uma perspectiva diferente.

Primeiro, verificamos da perspectiva do cluster:

kubectl get nodes --output wide

4.png
Como esperávamos, apenas um nó foi visto. Agora, vamos olhar para isso da perspectiva do k3d:

lista de nós k3d

5.png
Agora temos dois nós. Uma implementação mais inteligente aqui é que quando o cluster está sendo executado em seu nó k3d-k3s-default-server-0 , há outro "nó" como balanceador de carga. Embora isso possa não ter muito efeito em um cluster de nó único, nos economizará muita energia em nosso cluster HA.

Por fim, vemos dois nós do Docker: docker ps

6.png

Limpe os recursos

Nosso cluster de nó único pode nos ajudar a entender os mecanismos e comandos do k3d. Agora, precisamos limpar os recursos antes de implantar o cluster HA: k3d cluster delete

7.webp
Observação : para fins de demonstração, adicionamos os seguintes comandos à captura de tela acima:

  • lista aglomerado k3d : Lista aglomerados k3d ativa

  • kubectl cluster-info : verifique a conexão do cluster

  • docker ps : Verifique se há contêineres ativos

Agora, usamos o k3d para criar, inspecionar e excluir um cluster de nó único. Em seguida, começamos a experimentar o HA.

Passo 3: Bem-vindo ao mundo do HA

Antes de ativarmos a linha de comando, vamos ter uma compreensão básica do que estamos prestes a implantar e entender alguns outros requisitos adicionais.

Primeiro, há duas configurações possíveis para Kubernetes HA: banco de dados integrado ou externo. Usaremos as configurações do banco de dados embutido.

Em segundo lugar, o K3s tem duas tecnologias diferentes para HA de bancos de dados embutidos: uma é baseada em dqlite (K3s v1.18) e a outra é baseada em etcd (K3s v1.19 +).

Isso significa que o etcd é a versão padrão na versão estável atual do K3s e também é a versão que será usada neste artigo. O Dqlite foi descontinuado.

No momento em que este artigo foi escrito, o k3d usa o k3s v1.18.9-k3s1 por padrão. Você pode verificar pela versão k3d:

8.png
Então, isso significa que precisamos reinstalar o k3d, que oferece suporte ao K3s v1.19? Claro que não!

Podemos usar a versão atualmente instalada do k3d e ainda oferecer suporte ao K3s v1.19, porque:

  • k3d nos permite especificar uma imagem docker k3s específica para usar

  • Todas as versões do k3s são lançadas na forma de imagens de contêiner

Com base nos motivos acima, podemos supor que um K3s v1.19 seja armazenado como uma imagem de contêiner no Docker Hub:

https://hub.docker.com/r/rancher/k3s/tags?page=1&name=v1.19

Agora, vamos usar o k3d para criar o primeiro cluster HA do K3s.

Três aviões de controle

De acordo com a prática recomendada de HA do Kubernetes, devemos usar pelo menos 3 planos de controle para criar um cluster de HA.

No k3d, podemos usar o seguinte comando:

criação de cluster k3d --servers 3 --image rancher / k3s: v1.19.3-k3s2

9.webp
Entenda o comando:

Comando básico: k3d cluster create

Opções:

  • servidor 3 : Solicite a criação de três nós com um servidor de função.

  • image rancher / k3s: v1.19.3-k3s2 : Especifique a imagem K3S a ser usada

Agora podemos verificar o cluster que criamos de diferentes ângulos

kubectl get nodes --output wide

11.png
Como você pode ver, verificamos de diferentes aspectos para garantir que nossos nós estão funcionando corretamente.

Se percebermos que o componente foi implantado, nosso daemonset agora tem 3 cópias em vez de uma:

kubectl get all --all-namespaces

12.webp
A última verificação é para ver em qual nó os pods estão sendo executados:

kubectl get podes --all-namespaces --output wide

13.png

Agora temos a base do cluster HA. Vamos adicionar nós de plano de controle adicionais e destruí-los deliberadamente para ver como o cluster funciona.

Expanda o cluster

Devido ao fato de que k3d e nosso cluster estão sendo executados no contêiner superior, podemos simular rapidamente a adição de outro nó de plano de controle ao cluster HA:

k3d node create extraCPnode --role = server --image = rancher / k3s: v1.19.3-k3s2

14.webp
Entenda o comando:

Comando básico: k3d node create

Opções:

extraCPnode : O nome base usado pelo k3d para criar o nome do nó final.

role = server : Defina a função do nó como o plano de controle.

image rancher / k3s: v1.19.3-k3s2 : Especifique a imagem K3s a ser usada.

Isso pode ser visto que verificamos de diferentes ângulos para garantir a operação normal do novo nó do plano de controle.

Depois de adicionar este nó adicional, podemos prosseguir para o teste final: Lower node0!

HA: Veículo blindado anticolisão pesado

node0 é geralmente o nó ao qual nosso KUBECONFIG se refere (representado por IP ou nome de host), portanto, nosso aplicativo kubectl tenta se conectar a ele para executar comandos diferentes.

Como estamos usando contêineres, a melhor maneira de "destruir" um nó é parar o contêiner diretamente.

docker stop k3d-k3s-default-server-0

16.png

Observação: os comandos Docker e k3d mostrarão imediatamente as mudanças de status. No entanto, leva um pouco de tempo para que o cluster do Kubernetes veja a mudança de status para NotReady.

Além disso, nosso cluster ainda usa Kubectl para responder aos nossos comandos.

Agora é a hora de nos referirmos novamente ao tempo gasto pelo balanceador de carga k3d e sua importância para continuarmos acessando o cluster K3s.

Da perspectiva das conexões externas, embora o balanceador de carga alterne internamente para o próximo nó disponível, ainda usamos o mesmo IP / host. Essa abstração nos poupa muitos gerentes, e esse é um dos recursos mais úteis do k3d.

Vamos dar uma olhada no status do cluster:

kubectl get all --all-namespaces

17.png
Tudo parece normal. Se observarmos os pods em detalhes, descobriremos que o K3s se recupera automaticamente, recriando os pods em execução no nó com falha em outros nós:

kubectl get pods --all-namespaces --output wide

18.png
Finalmente, para mostrar o poder do HA e como o k3s o gerencia, vamos reiniciar o node0, e então veremos que ele é reincorporado ao cluster, como se nada tivesse acontecido.

docker start k3d-k3s-default-server-0

19.png
Nosso cluster está estável e todos os nós estão operando normalmente novamente.

Limpe os recursos novamente

Agora podemos excluir o cluster HA local porque ele concluiu sua missão. Além disso, sabemos que podemos criar facilmente um novo cluster.

Use o seguinte comando para limpar nosso cluster HA:

exclusão de cluster k3d

20.png

Resumindo

Embora tenhamos criado um único nó e cluster HA localmente e no contêiner, ainda podemos ver o desempenho dos K3s no novo banco de dados incorporado do etcd. Se implantarmos K3s em um bare metal ou máquina virtual, a função é a mesma.

Em outras palavras, o k3d ajuda muito no gerenciamento. Ele cria um balanceador de carga por padrão, permite a conexão permanente com o cluster K3s e abstrai todas as tarefas. Se for implantado fora do contêiner, precisamos concluir esta etapa manualmente.

Neste artigo, vimos como é fácil configurar um cluster K3s de alta disponibilidade usando o k3d. Se você ainda não experimentou, é altamente recomendável que pratique de acordo com este tutorial, eles são todos de código aberto e fáceis de usar.

Acho que você gosta

Origin blog.csdn.net/weixin_48967543/article/details/115253519
Recomendado
Clasificación