paint-brush
Configurando e gerenciando um cluster Kubernetes com o Kubeadmpor@humalect
2,141 leituras
2,141 leituras

Configurando e gerenciando um cluster Kubernetes com o Kubeadm

por Humalect Inc11m2023/08/09
Read on Terminal Reader

Muito longo; Para ler

Este tutorial Kubeadm aborda os fundamentos da criação e gerenciamento de clusters Kubernetes usando comandos Kubeadm. Ele explica o Kubernetes auto-hospedado, prós e contras, e então se aprofunda no propósito do Kubeadm. Ele fornece exemplos e detalha os 20 principais comandos comuns do Kubeadm, incluindo inicializar o plano de controle, unir nós de trabalho, redefinir clusters, atualizar versões e gerenciar componentes. O tutorial também descreve a criação de um cluster Kubernetes com o Kubeadm, o manuseio de componentes do cluster e enfatiza as práticas recomendadas, como o uso do Kubeadm para escalonamento automático de clusters de produção, backup regular do etcd e monitoramento eficaz dos nós.
featured image - Configurando e gerenciando um cluster Kubernetes com o Kubeadm
Humalect Inc HackerNoon profile picture
0-item
1-item

Neste tutorial do Kubeadm, exploraremos tudo o que você precisa saber sobre os comandos do Kubeadm e como usá-los para criar clusters e gerenciar componentes de cluster no Kubernetes (K8s).

Você não apenas aprenderá como criar seu próprio cluster Kubernetes usando Kubeadm, mas também dominará a arte de gerenciar componentes de cluster e descobrirá as melhores práticas do Kubeadm.


Junte-se a nós nesta emocionante jornada ao mundo do Kubeadm, onde você desbloqueará o poder de orquestrar contêineres com facilidade.


Vamos mergulhar e nos tornar especialistas Kubeadm juntos! Antes de nos aprofundarmos no kubeadm , o que exatamente é o Kubernetes auto-hospedado (K8s)?


Visão geral do conteúdo

  • O que é Kubernetes auto-hospedado? - Prós e contras
  • O que é Kubeadm?
  • Exemplos do Kubeadm
  • Os 20 comandos mais comuns do Kubeadm
  • Como criar um cluster do Kubernetes usando o Kubeadm
  • Como gerenciar componentes de cluster com o Kubeadm
  • Práticas recomendadas do Kubeadm


O que é Kubernetes auto-hospedado? - Prós e contras

Kubernetes auto-hospedado, também conhecido como implantação de Kubernetes "bare metal" ou "local", refere-se à execução de Kubernetes diretamente em máquinas físicas ou virtuais sem depender de um serviço Kubernetes gerenciado fornecido por um provedor de nuvem (como EKS da AWS ).


Aqui estão alguns prós e contras do Kubernetes auto-hospedado:


Vantagens do Kubernetes auto-hospedado

1. Controle total e personalização

Com o Kubernetes auto-hospedado, você tem controle total sobre a configuração, rede e infraestrutura do cluster. Isso permite que você personalize e otimize o cluster de acordo com seus requisitos específicos e recursos de infraestrutura.

2. Eficiência de custo

O Kubernetes auto-hospedado pode ser mais econômico, especialmente para implantações de longo prazo, em comparação com o uso de serviços gerenciados do Kubernetes, que geralmente incorrem em taxas adicionais. A auto-hospedagem permite que você aproveite os recursos de hardware existentes e evite os custos indiretos dos serviços gerenciados. (e economize uma tonelada de dinheiro)

3. Segurança e Conformidade

A auto-hospedagem do Kubernetes oferece controle direto sobre as medidas de segurança, como políticas de rede, criptografia, controles de acesso e requisitos de conformidade. Isso permite que você implemente as melhores práticas de segurança do Kubernetes específicas para as necessidades e padrões regulamentares de sua organização. (log4j, toca algum sino?)

4. Alocação de recursos

O Kubernetes auto-hospedado permite que você aloque recursos exclusivamente para seu cluster sem compartilhá-los com outros locatários. Isso permite uma melhor utilização de recursos e evita possíveis problemas de desempenho que podem surgir da contenção de recursos em um ambiente compartilhado.


Contras do Kubernetes auto-hospedado

1. Gerenciamento de Infraestrutura

O Kubernetes auto-hospedado requer experiência em gerenciamento e manutenção da infraestrutura subjacente.


Você é responsável por provisionar, configurar e monitorar os servidores, rede, armazenamento e outros componentes do cluster. Isso pode ser demorado e exigir recursos dedicados e contratação adicional.

2. Escalabilidade e Elasticidade

O dimensionamento de clusters Kubernetes auto-hospedados pode ser mais complexo em comparação com os serviços gerenciados que oferecem recursos de dimensionamento automatizados.


Você precisa planejar e provisionar recursos com antecedência para lidar com cargas de pico, e adicionar ou remover nós pode exigir intervenção manual.

3. Complexidade operacional

O Kubernetes auto-hospedado apresenta complexidades operacionais adicionais, como gerenciamento de atualizações, patches, backups e alta disponibilidade. Essas tarefas exigem planejamento, teste e coordenação cuidadosos para garantir o mínimo de interrupção no cluster e nos aplicativos ou um aumento no tempo de inatividade da produção.


O que é Kubeadm?

O Kubeadm é uma ferramenta de linha de comando que simplifica o processo de configuração e gerenciamento de um cluster Kubernetes, tornando mais fácil para os membros da comunidade técnica mergulhar no mundo da orquestração de contêineres.


Pense no kubeadm como seu assistente de confiança que cuida dos mínimos detalhes da configuração do cluster , permitindo que você se concentre no quadro geral.


Ele automatiza tarefas complexas, como configurar componentes essenciais, gerar certificados e garantir que seu cluster siga as práticas recomendadas.


Exemplos do Kubeadm

Vamos dar uma olhada em alguns exemplos e comandos para entender melhor como kubeadm funciona.

1. Inicializando o plano de controle

Comando de exemplo nº 1: ` kubeadm init `

Veja como usar o comando acima.

kubeadm init --pod-network-cidr=192.168.0.0/16


Este comando inicializa o plano de controle no nó mestre. Ele gera os certificados necessários, configura o servidor API, etcd e outros componentes vitais.


O sinalizador ` --pod-network-cidr ` especifica o intervalo de endereço IP para a rede pod no cluster.

2. Unindo nós de trabalho

Comando de exemplo nº 2: ` kubeadm join `


kubeadm join <master-node-ip>:<master-node-port> --token <token> --discovery-token-ca-cert-hash <hash>


Esse comando une um nó do trabalhador ao cluster. Você precisa fornecer o IP e a porta do nó mestre, junto com um hash de certificado de CA de token e de descoberta, que pode ser obtido durante a inicialização do plano de controle.

3. Redefinindo um cluster

Comando: ` kubeadm reset `


kubeadm reset --force


Este comando redefine um cluster, removendo todos os componentes instalados e retornando o nó ao seu estado pré-Kubernetes. O sinalizador ` --force ` garante uma redefinição completa.

4. Atualização da versão do Kubernetes

Comando: ` kubeadm upgrade `


Veja como usar o comando kubeadm acima.

kubeadm upgrade plan


Este comando ajuda você a atualizar sua versão do Kubernetes. Ele verifica as atualizações disponíveis e fornece um plano para atualizar os componentes do plano de controle.


Os 20 comandos mais comuns do Kubeadm

Aqui está uma lista de comandos kubeadm comumente usados, seguidos por um exemplo relevante.

1. kubeadm init

kubeadm init --pod-network-cidr=192.168.0.0/16


No exemplo acima, o comando inicializa o plano de controle no nó mestre, gerando certificados e configurando componentes essenciais. O sinalizador ` --pod-network-cidr ` especifica o intervalo de endereços IP da rede do pod.

2. Kubeadm join

kubeadm join <master-node-ip>:<master-node-port> --token <token> --discovery-token-ca-cert-hash <hash>


O comando acima associa um nó do trabalhador ao cluster conectando-se ao nó mestre especificado usando um token e hash de certificado de CA de token de descoberta.

3. redefinição do kubeadm

kubeadm reset --force


O comando acima redefine um nó, removendo todos os componentes do Kubernetes instalados e retornando-o ao seu estado pré-Kubernetes. O sinalizador ` --force ` garante uma redefinição completa.

4. atualização do kubeadm

kubeadm upgrade plan


O comando acima fornece um plano de atualização, verificando as atualizações disponíveis para os componentes do plano de controle.

5. token kubeadm

kubeadm token create


Este comando kubeadm gerencia tokens de autenticação usados para unir nós ao cluster. Este exemplo gera um novo token.

6. configuração do kubeadm

kubeadm config print init-defaults


O comando acima gerencia os arquivos de configuração kubeadm. Este exemplo imprime a configuração padrão para inicialização do cluster.

7. versão kubeadm

kubeadm version


O comando acima imprime a versão do kubeadm.

8. imagens de configuração do kubeadm

kubeadm config images list


Use o comando acima para imprimir uma lista de imagens necessárias para a versão atual do Kubernetes.

Esse comando ajuda a determinar as imagens de contêiner necessárias para o gerenciamento manual de imagens de contêiner. Substitua ` list ` por ` pull ` para obter imagens de configuração.

9. criação do token kubeadm

kubeadm token create --print-join-command


O comando acima gera um novo token que pode ser usado para unir nós ao cluster. O sinalizador ` --print-join-command ` exibe o comando de junção a ser executado nos nós de trabalho.

10. lista de tokens kubeadm

kubeadm token list


O comando acima lista os tokens ativos junto com seu tempo de criação e expiração associados.

11. exclusão do token kubeadm

kubeadm token delete <token_value>


Use o comando acima para excluir um token específico, tornando-o inutilizável para junções de nós.

12. migração de configuração do kubeadm

kubeadm config migrate --old-config kubeadm.conf --new-config kubeadm.yaml


O comando acima migra um arquivo de configuração de uma versão antiga para uma nova versão, permitindo atualizações suaves da configuração.

13. certificados kubeadm


kubeadm certs check-expirationkubeadm certs certificate-key


Os comandos acima verificam o status de expiração dos certificados usados pelos componentes do plano de controle e fornecem avisos para certificados prestes a expirar. O segundo comando gera a chave.

14. fase inicial do kubeadm

kubeadm init phase kubelet-start --config config.yaml


A partir de um arquivo InitConfiguration, o comando acima cria um arquivo de ambiente dinâmico com sinalizadores kubelet.

15. fase de junção do kubeadm

kubeadm join phase control-plane-prepare


O comando acima executa uma fase específica durante a junção de um nó de trabalho ao plano de controle. Este exemplo executa a fase ` preparação do plano de controle `, que prepara o nó de trabalho para se tornar um nó do plano de controle.

16. kubeadm kubeconfig

kubeadm kubeconfig user --client-name=foo --config=bar

Use o comando acima para gerar um arquivo kubeconfig para um usuário adicional chamado foo usando uma barra de arquivo de configuração kubeadm.

17. fase de redefinição do kubeadm

kubeadm reset phase preflight


O comando acima executa uma fase específica durante o processo de reinicialização de um nó. Este exemplo executa a fase ` preflight `, que executa verificações de pré-redefinição antes de remover os componentes do Kubernetes.

18. plano de atualização kubeadm

kubeadm upgrade plan


O comando acima exibe um plano de atualização para os componentes do plano de controle, mostrando as versões disponíveis e quaisquer ações necessárias para a atualização.

19. atualização do kubeadm aplicável

kubeadm upgrade apply v1.22.2


Use o comando acima para aplicar uma versão específica do Kubernetes ao plano de controle, atualizando seus componentes para a versão especificada.

20. nó de atualização kubeadm

kubeadm upgrade node


Esse comando atualiza o kubelet e o kube-proxy em um nó do trabalhador para corresponder à versão do plano de controle.


Como criar um cluster do Kubernetes usando o Kubeadm

Para criar um cluster Kubernetes usando kubeadm , você precisa garantir que seu ambiente atenda aos pré-requisitos necessários.

Aqui está um guia passo a passo sobre como criar um cluster Kubernetes usando kubeadm , incluindo os pré-requisitos, instruções detalhadas, exemplos e comandos.

Pré-requisitos

  1. Duas ou mais máquinas executando uma distribuição Linux compatível (por exemplo, Ubuntu, CentOS ou Red Hat Enterprise Linux) com o Docker instalado.

  2. Recomenda-se 2 GiB ou mais de RAM por máquina; qualquer coisa menos deixa espaço limitado para o seu software.

  3. Desative o espaço de troca em todas as máquinas.

  4. Configure um nome de host exclusivo, endereço MAC e product_uuid para cada máquina.

  5. Todas as máquinas no cluster têm conectividade de rede completa. Você pode se conectar a uma rede pública ou privada.

  6. Abra as portas necessárias (por exemplo, 6443, 2379-2380, 10250, 10251, 10252) em seu firewall.


Etapa 1: instalar as ferramentas Docker e Kubernetes

Em todas as máquinas, instale o Docker usando o guia do Docker para sua distribuição Linux.

Instale ` kubeadm `, ` kubelet ` e ` kubectl ` usando os seguintes comandos em todas as máquinas:


sudo apt-get update && sudo apt-get install -y apt-transport-https curlcurl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.listsudo apt-get updatesudo apt-get install -y kubelet kubeadm kubectlsudo apt-mark hold kubelet kubeadm kubectl


Etapa 2: inicializar o plano de controle do Kubernetes

No nó do plano de controle desejado, inicialize o cluster usando o comando ` kubeadm init `:

sudo kubeadm init --pod-network-cidr=192.168.0.0/16


Nota: Ajuste o sinalizador ` --pod-network-cidr ` se você planeja usar uma rede pod diferente.

Após a conclusão da inicialização, o comando produzirá um comando ` kubeadm join ` com um token e um hash. Certifique-se de copiar este comando, pois ele será usado para unir os nós do trabalhador ao cluster posteriormente.


Etapa 3: definir a configuração de cluster para kubectl

No nó do plano de controle, crie o diretório necessário e copie o arquivo kubeconfig :


mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config


Etapa 4: implantar um complemento de rede de pods

No nó do plano de controle, implante um complemento de rede de pod. Por exemplo, você pode usar Calico:

kubectl apply -f https://docs.projectcalico.org/v3.21/manifests/calico.yaml


Etapa 5: unir nós de trabalho no cluster

Em cada nó do trabalhador, execute o comando ` kubeadm join ` que foi gerado durante a inicialização do plano de controle (da Etapa 2). Este comando normalmente se parece com isto:

sudo kubeadm join <control_plane_IP>:6443 --token <token> --discovery-token-ca-cert-hash <hash>


Etapa 6: verificar o cluster

No nó do plano de controle, verifique o status do cluster usando ` kubectl `:

kubectl get nodes


Parabéns! Você criou com sucesso um cluster Kubernetes usando ` kubeadm `. Agora você pode implantar e gerenciar seus aplicativos no cluster.


Como gerenciar componentes de cluster com kubeadm

Para gerenciar componentes de cluster com kubeadm , você pode usar vários comandos para executar tarefas como atualizar o cluster, adicionar ou remover nós e gerenciar o plano de controle.

Aqui está um guia passo a passo sobre como gerenciar componentes de cluster com kubeadm , incluindo comandos detalhados com comentários de código.


Etapa 1: atualizar o cluster

Verifique a versão atual do Kubernetes no nó do plano de controle:

kubectl version --short


Atualize ` kubeadm `, ` kubelet ` e ` kubectl ` em todos os nós para corresponder à versão desejada do Kubernetes:

# Upgrade kubeadmsudo apt-get updatesudo apt-get install -y kubeadm=<desired_version># Upgrade kubelet and kubectlsudo apt-get updatesudo apt-get install -y kubelet=<desired_version> kubectl=<desired_version># Hold the packages to prevent automatic upgradessudo apt-mark hold kubeadm kubelet kubectl


No nó do plano de controle, inicie o processo de atualização:

sudo kubeadm upgrade plansudo kubeadm upgrade apply <desired_version>

Upgrade the kubelet configuration on all nodes:

sudo kubeadm upgrade node


Verifique o status da atualização:

kubectl get nodeskubectl version --short


Etapa 2: adicionar nós de trabalho

No nó do plano de controle, gere um novo comando kubeadm join :

sudo kubeadm token create --print-join-command


No(s) nó(s) do trabalhador, execute o comando kubeadm join para uni-los ao cluster:

sudo kubeadm join <control_plane_IP>:6443 --token <token> --discovery-token-ca-cert-hash <hash>


Verifique o status dos novos nós de trabalho:

kubectl get nodes


Etapa 3: removendo nós

Drene o nó que deseja remover:

kubectl drain <node_name> --ignore-daemonsets


No nó do plano de controle, remova o nó:

sudo kubeadm reset


No nó do plano de controle, exclua o nó do cluster:

kubectl delete node <node_name>


Etapa 4: Gerenciando os componentes do plano de controle

Atualize os componentes do plano de controle no nó do plano de controle:

sudo apt-get update sudo apt-get install -y kubeadm=<desired_version> kubelet=<desired_version> kubectl=<desired_version> sudo kubeadm upgrade plan sudo kubeadm upgrade apply <desired_version> sudo systemctl restart kubelet


Verifique o status da atualização:

kubectl get nodes kubectl version --short

Drain the control plane node you want to remove:

kubectl drain <control_plane_node> --ignore-daemonsets


No nó do plano de controle, remova os componentes do plano de controle usando o seguinte comando kubeadm .

sudo kubeadm reset


No nó do plano de controle, exclua o nó do plano de controle do cluster:

kubectl delete node <control_plane_node>


Observação: gerenciar componentes de cluster com kubeadm requer cautela, pois pode afetar a estabilidade e a disponibilidade do cluster. Certifique-se de ter um plano de backup e siga a documentação oficial do Kubernetes para obter instruções detalhadas específicas para sua configuração e requisitos.


Práticas recomendadas do Kubeadm

Quando usado para os fins a que se destina, o Kubeadm é uma excelente ferramenta. Aqui estão três práticas recomendadas a serem lembradas para usar a ferramenta adequada para o trabalho e aproveitar ao máximo o kubeadm.


Use o kubeadm apenas para clusters de produção que precisam de escalonamento automático

Em geral, o kubeadm não deve ser utilizado para clusters de produção porque não possui capacidade de escalonamento automático de nó e cluster. Isso se deve ao fato de que o dimensionamento automático de nós exige o controle da infraestrutura e do hardware subjacentes, que o kubeadm delegou a outras ferramentas.


Faça backup do etcd regularmente

O Kubeadm não possui um cluster multi-etcd por padrão para armazenar o estado do cluster. Faça backups regulares do etcd caso algo dê errado.


Acompanhe as máquinas/nós

Kubeadm não pode desligar máquinas que não estão em uso.

Portanto, para otimizar o custo no cluster do Kubernetes usando kubeadm , você precisará usar uma solução externa para rastrear nós de trabalho e sua utilização de recursos.




Também publicado aqui.


A imagem principal deste artigo foi gerada peloAI Image Generator do HackerNoon por meio do prompt "containers"