Header Ads

Como dimensionar contêineres do Docker entre servidores usando Kubernetes

O Docker é uma plataforma de contêiner orientada ao desenvolvedor que permite empacotar aplicativos como contêineres autônomos. Eles serão executados em qualquer lugar em que um tempo de execução de contêiner compatível esteja disponível.

A popularidade do Docker o tornou quase sinônimo de contêineres, mas não é a tecnologia perfeita para todos os casos de uso. Usar o Docker no estado em que se encontra apresenta desafios na produção, pois sua CLI está equipada apenas para gerenciar contêineres individuais.

Kubernetes é uma plataforma de orquestração que gerencia pilhas de contêineres e os dimensiona em vários servidores. Você pode implantar em uma frota de máquinas físicas, melhorando a redundância e a resiliência do seu serviço. Veja como você pode iniciar seu próprio cluster para dimensionar seu “ Docker ” recipientes.

Noções básicas do Kubernetes

O reconhecimento de alguns termos-chave do Kubernetes ajudará você a entender as diferenças em comparação com o Docker. O dicionário Kubernetes descreve dezenas de recursos que você pode adicionar ao seu cluster. Apenas os componentes que controlam a programação do contêiner são relevantes para este artigo.

Em um nível superior, uma instalação do Kubernetes é um cluster de “ nós. ” Os nós são máquinas físicas independentes que hospedam suas cargas de trabalho. Um único “ mestre ” o nó é responsável por coordenar (“ orquestrar ”) as operações do cluster &’ por “ agendar ” novos contêineres para o nó de trabalho mais apropriado.

Aqui estão alguns termos críticos:

  • Mestre – O nó mestre opera o cluster. Esta é a máquina na qual você instala o Kubernetes. Ele executa o plano de controle e delega a hospedagem de aplicativos em contêineres aos nós de trabalho.
  • Plano de controle – O plano de controle é o componente de software do nó mestre. Ele incorpora vários serviços, incluindo um servidor de API, armazenamento de configuração e agendador de contêiner.
  • Nó – Um nó é uma máquina que hospeda seus contêineres. Cada trabalhador executa um componente Kubernetes chamado Kubelet. Este permanece em contato com o plano de controle, recebendo instruções de agendamento sobre as quais atua para provisionar novos contêineres.
  • Pod – Um pod é a menor unidade de computação em um cluster Kubernetes, representando um grupo de instâncias de contêiner. A abstração Pod permite interagir com vários contêineres em execução de forma agregada.
  • Conjunto de réplicas – Os conjuntos de réplicas são responsáveis ​​por escalonar os pods para garantir que um número especificado de réplicas esteja disponível. Se você solicitar três réplicas de um pod, o conjunto de réplicas garantirá que a restrição de disponibilidade seja atendida. Os pods são substituídos automaticamente se falharem, permitindo automatizar a replicação do contêiner entre os servidores.

Publicidade

A criação de um cluster escalonável requer um nó mestre, pelo menos dois nós de trabalho e uma implantação que provisiona várias réplicas. O Kubernetes poderá agendar seus pods em todos os nós disponíveis, oferecendo resiliência caso um deles sofra uma interrupção.

Criando seu cluster

O Kubernetes está disponível como uma oferta gerenciada da maioria dos principais provedores de nuvem. Eles fornecem uma maneira com um clique de criar seu plano de controle e adicionar um número variável de nós de trabalho.

Você pode executar um cluster em seu próprio hardware usando uma distribuição Kubernetes independente como MicroK8s. Você precisará de pelo menos duas máquinas físicas ou virtuais isoladas se quiser ter suporte de agendamento redundante.

Instale o MicroK8s em ambas as máquinas. Designe um nó como mestre e use o comando add-node para iniciar o processo de registro do nó:

 adicionar nodo microk8s 

Isso emitirá um comando microk8s join. Alterne para o nó secundário e execute o comando. Ele se unirá ao primeiro cluster como um novo trabalhador. Agora as duas máquinas estão prontas para hospedar suas cargas de trabalho em contêineres.

Definindo uma implantação com escala horizontal

Um aplicativo executado em vários servidores é descrito como “ dimensionado horizontalmente. ” Ele está se espalhando por vários ambientes distintos. O dimensionamento vertical de um sistema envolve a adição de recursos a um ambiente existente.

Publicidade

A maneira mais simples de definir uma carga de trabalho do Kubernetes é com uma implantação. Este tipo de recurso cria pods a partir de uma imagem de contêiner e configura rotas de rede pública por meio de um serviço. As implantações são padronizadas para uma única instância de pod, mas podem ser configuradas com várias réplicas.

Aqui está um manifesto de implantação simples:

apiVersion: apps / v1 kind: Metadados de implantação: nome: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers : - nome: imagem nginx: nginx: portas mais recentes: - containerPort: 80

Aplique o manifesto ao seu cluster usando Kubectl:

 microk8s kubectl apply -f ./manifest. yaml

O Kubernetes criará três pods, cada um hospedando um servidor da web NGINX criado a partir do nginx: imagem mais recente. A porta 80 é exposta como uma porta de contêiner para permitir o tráfego de entrada.

Os pods serão distribuídos automaticamente entre os nós do seu cluster. Um nó estará qualificado para hospedar um pod se puder fornecer recursos suficientes.

Você pode atualizar o número de réplicas a qualquer momento. Altere o campo de réplicas em seu manifesto e reaplique-o ao cluster. O programador Kubernetes tomará medidas para provisionar novos pods ou encerrar os antigos conforme necessário. Se você dimensionar as réplicas para 0, poderá colocar seu aplicativo offline sem realmente excluir a implantação ou seus recursos associados.

Adicionando nós dinamicamente

Atualizar a contagem de réplicas permite que você utilize os recursos existentes em seu cluster. Eventualmente, você pode esgotar totalmente a capacidade do nó combinado, evitando que novos pods sejam programados. O Kubernetes oferece um recurso de escalonamento automático de cluster que pode criar e destruir nós, alterando efetivamente o número de pods que podem ser programados.

Configurar o escalonamento automático é relativamente complicado. O processo exato depende do ambiente de hospedagem do seu cluster. Ele requer integração com um autoescalador de cluster capaz de se conectar ao seu host para detectar mudanças na demanda. A documentação oficial está disponível para o Google Cloud; soluções também estão disponíveis no Amazon EKS e Microsoft AKS.

Publicidade

O escalonamento automático funciona mantendo uma verificação constante de pods que não podem ser programados devido à capacidade insuficiente do cluster. Ele também avalia se os pods programados com êxito podem realmente ser colocados com uma contagem de nós reduzida. O escalonador automático então utiliza a API do seu provedor de nuvem para adicionar e remover instâncias de computação, ajustando dinamicamente os recursos do seu cluster. Isso pode afetar sua fatura, pois a criação de uma nova instância geralmente é uma operação exigível.

Resumo

O Kubernetes facilita a distribuição de instâncias de contêiner em vários servidores. Registre suas máquinas como nós ou use um cluster de nuvem gerenciado e, em seguida, crie implantações que têm o conjunto de campos de réplicas. Você pode dimensionar sua carga de trabalho atualizando a contagem de réplicas solicitadas.

Quando mudanças severas na demanda são esperadas, use o escalonamento automático para expandir a capacidade dinamicamente. Este recurso permite que você crie novos nós rapidamente, adicionando recursos extras para que você possa continuar aumentando sua contagem de réplicas.

Ao redimensionar pods, você precisa se lembrar de que também é necessária alguma forma de distribuição de tráfego de entrada. Se você estiver expondo a porta 80, o Kubernetes precisará mapear as solicitações para a porta 80 em qualquer um dos nós. Isso funciona automaticamente com implantações e serviços. O Kubernetes cria um balanceador de carga que monitora continuamente os pods para descobrir para onde o tráfego pode ser direcionado.

Nenhum comentário