Orquestração de Containers (INTRODUÇÃO)
Kubernetes é uma plataforma de código aberto projetada para automatizar a implantação, o dimensionamento e o gerenciamento de aplicativos em contêineres em grande escala.
Com o Kubernetes, você pode encapsular seus aplicativos em contêineres e implantá-los em um cluster de máquinas físicas e/ou virtuais, garantindo que seus aplicativos estejam sempre disponíveis e possam ser escalados conforme necessário. Ele faz isso através de um conjunto de recursos como balanceamento de carga, automação de implantação e recuperação automática de falhas.
O Kubernetes é altamente flexível e pode ser usado para executar uma ampla variedade de aplicativos, desde aplicativos da web simples até aplicativos empresariais complexos.
ARQUITETURA KUBERNETES
A arquitetura do Kubernetes é baseada em um cluster que consiste em duas partes principais: o plano de controle e as máquinas de computação (ou nós). O plano de controle é responsável por gerenciar o estado geral do cluster e inclui componentes como o kube-apiserver, que expõe a API do Kubernetes; o kube-scheduler, que programa os pods nos nós apropriados; e o kube-controller-manager, que ajuda a garantir que o cluster esteja funcionando corretamente e de acordo com as especificações do usuário.
O Kubernetes (K8s) é composto por uma série de componentes, cada um com um propósito diferente.
As máquinas de um cluster são separadas em três tipos: node, etcd e master.
Node
O papel de um Node é executar os contêineres que encapsulam as aplicações sendo gerenciadas pelo K8s. Quando você faz o deploy de uma aplicação em um cluster, essa aplicação vai ser executada em um dos Nodes do cluster. O conjunto de Nodes forma o que é chamado de Workers.
etcd
O etcd é, na verdade, o nome da base de dados distribuída que é utilizada para armazenar tudo o que está acontecendo dentro do cluster, incluindo o estado da aplicação. Em ambientes de produção, um bom gerenciamento desses nós é essencial para garantir que o cluster esteja sempre disponível.
Master
Finalmente, o último tipo de nó é o que chamamos de Master. É nesse tipo de nó que os principais componentes do Kubernetes são executados, como o Scheduler, o qual tem a responsabilidade de controlar a alocação de recursos no cluster. O conjunto de nós Master forma o que pode ser considerado o cérebro de um cluster Kubernetes: o Control Plane.
Recomendados pelo LinkedIn
Control Plane
Ele é responsável por gerenciar os principais componentes do sistema e garantir que tudo está funcionando de acordo com o estado desejado da aplicação. Para facilitar a representação desse estado, o K8s trabalha com uma abstração chamada de Object. Um Object representa parte do estado da aplicação e quando o seu estado atual não é o estado desejado, mudanças são aplicadas para que os dois estados se igualem novamente.
Existem diversos tipos de Objects em um ambiente Kubernetes, mas alguns deles são essenciais para entender como um cluster funciona.
Pod
Na seção sobre aplicações cloud-native, uma das principais características é que essas aplicações utilizam contêineres para encapsular seus microsserviços. No entanto, quando se fala sobre aplicações sendo executadas em um cluster, não se fala sobre contêineres diretamente, mas sim sobre Pods.
Pods são a unidade básica de um um cluster. Elas encapsulam um ou mais contêineres de uma aplicação e representam um processo dentro do cluster. Quando o deploy de uma aplicação no K8s é realizado, cria-se um ou mais Pods.
No entanto, Pods são efêmeros, ou seja, eles são criados e destruídos de acordo com as necessidades do cluster.
Para garantir que o acesso a um microsserviço esteja sempre disponível, existe um Object chamado Service que encapsula uma ou mais Pods e é capaz de encontrá-las dinamicamente em qualquer Node do cluster.
Deployment
Esse tipo de Object gerencia um conjunto de réplicas de pods idênticos, oferecendo uma série de funcionalidades que automatizam todos aqueles passos de um cenário típico de desenvolvimento de software, com deploys manuais ou semi-automatizados de uma aplicação.
Utilizando Deployments, é possível descrever qual o estado desejado da nossa aplicação e um Deployment controller vai se encarregar de transformar o estado atual no estado desejado, caso eles sejam diferentes.
Além desses componentes principais, a arquitetura do Kubernetes também inclui outros Objects importantes como:
Pods e Deployments e outros Objects são utilizados pelo K8s para representar diferentes aspectos do estado de uma aplicação. Esse estado pode ser alterado de duas formas: imperativa ou declarativa. A forma declarativa é considerada a mais ideal e utiliza arquivos no formato YAML que são enviados para a API.
A API do Kubernetes é a porta de entrada de um cluster, sendo utilizada tanto pela ferramenta de linha de comando kubectl, quanto pela interface web (Dashboard do Kubernetes).