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)?
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:
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.
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)
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?)
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.
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.
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.
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 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.
Vamos dar uma olhada em alguns exemplos e comandos para entender melhor como kubeadm
funciona.
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.
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.
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.
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.
Aqui está uma lista de comandos kubeadm comumente usados, seguidos por um exemplo relevante.
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.
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.
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.
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.
kubeadm token create
Este comando kubeadm gerencia tokens de autenticação usados para unir nós ao cluster. Este exemplo gera um novo token.
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.
kubeadm version
O comando acima imprime a versã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.
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.
kubeadm token list
O comando acima lista os tokens ativos junto com seu tempo de criação e expiração associados.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Recomenda-se 2 GiB ou mais de RAM por máquina; qualquer coisa menos deixa espaço limitado para o seu software.
Desative o espaço de troca em todas as máquinas.
Configure um nome de host exclusivo, endereço MAC e product_uuid para cada máquina.
Todas as máquinas no cluster têm conectividade de rede completa. Você pode se conectar a uma rede pública ou privada.
Abra as portas necessárias (por exemplo, 6443, 2379-2380, 10250, 10251, 10252) em seu firewall.
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
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.
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
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
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>
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.
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.
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
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
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>
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.
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.
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.
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.
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"