Voltar ao blog

Como instalar e usar o Kubernetes no Ubuntu 20.04

Como instalar e usar o Kubernetes no Ubuntu 20.04

Introdução

Kubernetes é uma ferramenta de código aberto crucial na orquestração de contêineres. O Kubernetes funciona orquestrando e gerenciando clusters em escala em vários ambientes de nuvem ou até mesmo em servidores locais. Um cluster é um conjunto de hosts destinados a executar aplicativos e serviços em contêineres. Um cluster precisa de no mínimo dois nós para funcionar – um master e um worker . Tendo em mente a escalabilidade, você tem a opção de expandir o cluster com quantos nós worker forem necessários.

Um nó no Kubernetes refere-se a um servidor. Um nó master é um servidor que gerencia o estado do cluster. Os nós worker são servidores que executam as cargas de trabalho – estas são normalmente aplicativos e serviços em contêineres.

Este guia irá orientá-lo pelas etapas de instalação e implantação de um cluster Kubernetes composto por dois nós no Ubuntu 20.04. Como mencionado, ter dois nós é a configuração mais básica ao trabalhar com o Kubernetes. Você também tem a opção de adicionar mais nós worker assim que entender os fundamentos. Mostraremos ainda como interligar os dois servidores para permitir que o nó master controle o nó worker.

Para testar nossa configuração, iremos implantar um Docker container executando o servidor web Nginx no cluster. Esta é uma aplicação típica do Kubernetes na vida real. Você aprenderá mais sobre alguns componentes definidores do Kubernetes, tais como kubectl e kubeadm à medida que avançamos. Também é aconselhável familiarizar-se primeiro com o nosso tutorial sobre conhecer os conceitos básicos do conjunto de ferramentas do Kubernetes para se familiarizar com os conceitos básicos da plataforma Kubernetes.

Agora, vamos começar!

Pré-requisitos

Você precisará provisionar dois servidores, executando no Ubuntu 20.04. Para obter o melhor desempenho, os requisitos mínimos de sistema para o Kubernetes são 2 GB de RAM e 2 CPUs. Você pode seguir as etapas de 1 a 4 deste tutorial passo a passo para ajudá-lo a configurar seu servidor Ubuntu na CloudSigma. Um servidor será o nó master, o outro será o nó worker. Nomeamos apropriadamente nossos dois servidores como kubernetes-master e kubernetes-worker. Isso torna mais fácil acompanhar o tutorial. No entanto, você está livre para escolher os hostnames que preferir.

  • Certifique-se de adicionar um usuário com privilégios sudo em ambos os nós que usaremos para executar os comandos conforme descrito no tutorial acima. Siga este tutorial sobre como configurar o arquivo sudoers do Linux para obter instruções.

  • Conectividade de rede – os servidores no cluster devem ser capazes de se comunicar. Quando você implanta suas VMs a partir da CloudSigma, elas estarão conectadas à internet com um IP público por padrão. Se você estiver trabalhando a partir de uma rede local, poderá ter que editar seu arquivo /etc/hosts em cada servidor e interligá-los adequadamente.

  • Você precisará instalar e habilitar o Docker em cada um dos nós. O Kubernetes depende de um tempo de execução de contêiner para executar contêineres em pods. Embora existam outras plataformas de contêiner para escolher, usaremos o Docker neste tutorial. O Docker fornecerá o ambiente de tempo de execução necessário para o Ubuntu. Você pode seguir as etapas 1, 2 e 3 do nosso tutorial sobre instalação e operação do Docker.

Etapa 1: Instalar o Kubernetes

Nesta etapa, instalaremos o Kubernetes. Assim como você fez com o Docker nos pré-requisitos, você deve executar os comandos em ambos os nós para instalar o Kubernetes. Use ssh para fazer login em ambos os nós e prosseguir. Você começará instalando o pacote apt-transport-https que permite trabalhar com http e https nos repositórios do Ubuntu. Além disso, instale o curl pois ele será necessário para as próximas etapas. Execute o seguinte comando:

Em seguida, adicione a chave de assinatura do Kubernetes a ambos os nós executando o comando:

Em seguida, adicionamos o repositório do Kubernetes como uma fonte de pacotes em ambos os nós usando o seguinte comando:

Depois disso, atualize os nós:

  • Instalar ferramentas do Kubernetes

Assim que a atualização for concluída, instalaremos o Kubernetes. Isso envolve a instalação das várias ferramentas que compõem o Kubernetes: kubeadm, kubelet, kubectl, e kubernetes-cni. Essas ferramentas são instaladas em ambos os nós. Definimos cada ferramenta abaixo:

  • kubelet – um agente que roda em cada nó e lida com a comunicação com o nó mestre para iniciar cargas de trabalho no runtime do contêiner. Insira o seguinte comando para instalar o kubelet:

  • kubeadm – parte do projeto Kubernetes e ajuda a inicializar um cluster Kubernetes. Insira o seguinte comando para instalar o kubeadm:

  • kubectl – a ferramenta de linha de comando do Kubernetes que permite executar comandos dentro dos clusters Kubernetes. Execute o seguinte comando para instalar o kubectl:

  • kubernetes-cni – permite a rede dentro dos contêineres, garantindo que os contêineres possam se comunicar e trocar dados. Execute o seguinte comando para instalar:

Opcionalmente, você pode instalar todos os quatro em um único comando:

Passo 2: Desativando a Memória Swap

O Kubernetes não funciona em um sistema que está usando swap memória. Portanto, ela deve ser desativada no nó mestre e em todos os nós de trabalho. Execute o seguinte comando para desativar a memória swap:

Este comando desativa a memória swap até que o sistema seja reiniciado. Devemos garantir que ela permaneça desativada mesmo após as reinicializações. Isso deve ser feito no nó mestre e em todos os nós de trabalho. Podemos fazer isso editando o arquivo fstab file e comentando a linha /swapfile com um #. Abra o arquivo com o editor de texto nano inserindo o seguinte comando:

Dentro do arquivo, comente a linha swapfile como mostrado na captura de tela abaixo:

install Kubernetes fstab swap disable

Se você não vir a linha swapfile, apenas ignore-a. Salve e feche o arquivo quando terminar de editar. Siga o mesmo processo para ambos os nós. Agora, as configurações de memória swap permanecerão desativadas, mesmo após a reinicialização do servidor.

Passo 3: Definindo Hostnames Únicos

Seus nós devem ter hostnames únicos para facilitar a identificação. Se você estiver implantando um cluster com muitos nós, poderá defini-los para identificar nomes para seus nós de trabalho, como node-1, node-2, etc. Como mencionamos anteriormente, nomeamos nossos nós como kubernetes-master e kubernetes-worker. Nós os definimos no momento da criação do servidor. No entanto, você pode ajustar ou definir os seus, caso ainda não o tenha feito a partir da linha de comando. Para ajustar o hostname no nó mestre, execute o seguinte comando:

No nó de trabalho, execute o seguinte comando:

Você pode fechar a sessão atual do terminal e fazer ssh de volta ao servidor para ver as alterações.

Passo 4: Permitindo que o Iptables Veja o Tráfego em Ponte

Para que os nós mestre e de trabalho vejam corretamente o tráfego em ponte, você deve garantir que net.bridge.bridge-nf-call-iptables esteja definido como 1 na sua configuração. Primeiro, garanta que o módulo br_netfilter esteja carregado. Você pode confirmar isso emitindo o comando:

Opcionalmente, você pode carregá-lo explicitamente com o comando:

Agora, você pode executar este comando para definir o valor como 1:

Passo 5: Alterando o Driver Cgroup do Docker

Por padrão, o Docker é instalado com cgroupfs como o driver cgroup. O Kubernetes recomenda que o Docker deve executar com systemd como o driver. Se você pular esta etapa e tentar inicializar o kubeadm na próxima etapa, receberá o seguinte aviso no seu terminal:

Tanto nos nós master quanto nos nós worker, atualize o cgroupdriver com os seguintes comandos:

Em seguida, execute os seguintes comandos para reiniciar e habilitar o Docker na inicialização do sistema:

Uma vez configurado, podemos prosseguir para a parte divertida, implantar o cluster Kubernetes!

Passo 6: Inicializando o Nó Master do Kubernetes

O primeiro passo na implantação de um cluster Kubernetes é iniciar o nó master. No terminal do seu nó master, execute o seguinte comando para inicializar o kubernetes-master:

Se você executar o comando acima e seu sistema não atender aos requisitos esperados, como RAM ou CPU mínima, conforme explicado na seção de Pré-requisitos, você receberá um aviso e o cluster não será iniciado:

install Kubernetes InitError

Nota: Se você estiver construindo para produção, é uma boa ideia sempre atender aos requisitos mínimos para que o Kubernetes funcione sem problemas. No entanto, se você estiver fazendo este tutorial para fins de aprendizado, poderá adicionar a seguinte flag ao comando kubeadm init para ignorar os avisos de erro:
sudo kubeadm init --ignore-preflight-errors=NumCPU,Mem --pod-network-cidr=10.244.0.0/16

A captura de tela abaixo mostra que a inicialização foi bem-sucedida. Também adicionamos uma flag para especificar a rede de pods com o IP 10.244.0.0. É o IP padrão que o kube-flannel usa. Discutiremos mais sobre a rede de pods na próxima etapa.

install Kubernetes Kubeadm Init

Na saída, você pode ver o comando kubeadm join (ocultamos nosso endereço IP) e um token exclusivo que você executará no nó worker e em todos os outros nós worker que deseja associar a este cluster. Em seguida, copie e cole este comando, pois você o usará mais tarde no nó worker.

Na saída, o Kubernetes também exibe alguns comandos adicionais que você deve executar como um usuário comum no nó master antes de começar a usar o cluster. Vamos executar esses comandos:

Agora inicializamos o nó master. No entanto, também temos que configurar a rede de pods no nó master antes de juntar os nós worker.

Passo 7: Implantando uma Rede de Pods

Uma rede de pods facilita a comunicação entre servidores e é necessária para o funcionamento adequado do cluster Kubernetes. Você pode ler mais sobre Rede de Cluster do Kubernetes nos documentos oficiais. Estaremos usando a rede de pods Flannel para este tutorial. O Flannel é uma rede overlay simples que atende aos requisitos do Kubernetes.

Antes de implantarmos a rede de pods, precisamos verificar o status do firewall. Se você ativou o firewall após seguir a etapa 5 do tutorial sobre como configurar seu servidor Ubuntu, você deve primeiro adicionar uma regra de firewall para criar exceções para a porta 6443 (a porta padrão para o Kubernetes). Execute os seguintes ufw comandos nos nós master e worker:

Depois disso, você pode executar os dois comandos a seguir para implantar a rede de pods no nó master:

Isso pode levar de alguns segundos a um minuto, dependendo do seu ambiente, para carregar a rede flannel. Execute o seguinte comando para confirmar que tudo está funcionando:

A saída do comando deve mostrar o status de todos os serviços como em execução se tudo tiver sido bem-sucedido:

install Kubernetes Pod Status

Você também pode visualizar o estado de saúde dos componentes usando o comando get component status:

install Kubernetes Component Status

Este comando tem uma forma curta cs:

Component Status Short

Se você vir o status unhealthy, modifique os seguintes arquivos e exclua a linha em (spec->containers->command) contendo esta frase - --port=0 :

Faça o mesmo para este arquivo:

Por fim, reinicie o serviço do Kubernetes:

Etapa 8: Unindo os Nós Worker ao Cluster Kubernetes

Com o nó kubernetes-master ativo e a rede de pods pronta, podemos unir nossos nós worker ao cluster. Neste tutorial, temos apenas um nó worker, então trabalharemos com ele. Se você tiver mais nós worker, poderá sempre seguir as mesmas etapas explicadas abaixo para se unir ao cluster.

Primeiro, faça login no seu nó worker em uma sessão de terminal separada. Você usará o seu comando kubeadm join que foi exibido no seu terminal quando inicializamos o nó master na Etapa 6. Execute o comando:

Você deve ver uma saída semelhante à captura de tela abaixo quando a união ao cluster for concluída:

Worker Join

Assim que o processo de união for concluído, mude para o terminal do nó master e execute o seguinte comando para confirmar que o seu nó worker se uniu ao cluster:

Na captura de tela da saída do comando acima, podemos ver que o nó worker se uniu ao cluster:

install Kubernetes K8S Node Status

Etapa 9: Implantando uma Aplicação no Cluster Kubernetes

Neste ponto, você configurou com sucesso um cluster Kubernetes. Vamos tornar o cluster utilizável implantando um serviço nele. O Nginx é um servidor web popular que ostenta velocidades incríveis mesmo com milhares de conexões. Implantaremos o servidor web Nginx no cluster para provar que você pode usar essa configuração em uma aplicação real.

Execute o seguinte comando no nó master para criar um deployment do Kubernetes para o Nginx:

Você pode visualizar o deployment criado usando o comando describe deployment:

Nginx Deployment

To make the nginx service accessible via the internet, run the following command:

NodePort Svc Create

The command above will create a public-facing service for the Nginx deployment. This being a nodeport, o Kubernetes atribui ao serviço uma porta no intervalo de 32000+.

Você pode obter os serviços atuais emitindo o comando:

NodePort Svc Status

Você pode ver que a nossa porta atribuída é 32264. Anote a porta exibida no seu terminal para usar na próxima etapa.

Para verificar se a implantação do serviço Nginx foi bem-sucedida, emita uma curl chamada para o nó worker a partir do master. Substitua o IP do seu nó worker e a porta que você obteve do comando acima:

Você deve ver a saída do Nginx padrão index.html:

Curl Nginx Svc

Opcionalmente, você pode visitar a combinação de endereço IP e porta do nó worker no seu navegador e visualizar a página index padrão do Nginx:

install Kubernetes Nginx Webpage

Você pode excluir uma implantação especificando o nome da implantação. Por exemplo, este comando excluirá nossa implantação:

Agora testamos com sucesso o nosso cluster!

Conclusão

Neste tutorial, você aprendeu como instalar um cluster Kubernetes no Ubuntu 20.04. Você configurou um cluster composto por um nó master e um nó worker. Você conseguiu instalar o conjunto de ferramentas do Kubernetes, criou uma rede de pods e juntou o nó worker ao nó master. Também testamos nosso conceito fazendo uma implantação básica de um servidor web Nginx no cluster. Isso deve funcionar como base para trabalhar com clusters Kubernetes no Ubuntu.

Embora tenhamos usado apenas um nó worker, você pode estender seu cluster com quantos nós desejar. Se você quiser se aprofundar em DevOps com ferramentas de automação como o Ansible, temos um tutorial que se aprofunda no provisionamento de implantações de cluster Kubernetes com Ansible e Kubeadm, confira. Se você quiser aprender como implantar uma aplicação PHP em um cluster Kubernetes, confira este tutorial.

Boa computação!

author

Pranay Kapgate

Autor · CloudSigma

Preslav Dobrev é um designer criativo na CloudSigma, focado na construção de uma identidade empresarial consistente por meio de canais de marketing tradicionais e inovadores. Ele é hábil em combinar a visão artística com o marketing estratégico para criar narrativas de marca impactantes.

Comentários

Nenhum comentário ainda. Seja o primeiro.