Kubernetes: resumo de conceitos básicos
Tags: kubernetes
Published: 2023-06-05 14:04:36

---
title: Kubernetes: resumo de conceitos básicos 
published: true
description: Principais conceitos do Kubernetes, o que é, para que serve, o que são nodes, pods, clusters, control plane, workloads, entre outros  
tags: #kubernetes
cover_image: https://dev-to-uploads.s3.amazonaws.com/uploads/articles/609qq9na28kicfesbqvx.png
---

Se você está procurando um conteúdo enxuto e direto ao ponto sobre o básico de Kubernetes, este é o lugar. Todos os conceitos apresentados aqui foram tirados diretamente da documentação do Kubernetes. Irei responder as seguintes perguntas:

- [O que é Kubernetes?](#1)
- [Para que serve o Kubernetes?](#2)
- [Quais os componentes básicos do Kubernetes?](#3)
- [O que é um cluster?](#4)
- [O que são nodes?](#5)
- [O que são pods?](#6)
- [O que é o control plane?](#7)
- [O que é kubectl?](#8)

## <a name="1"></a>O que é Kubernetes?

O Kubernetes é uma **plataforma** open source portável, extensível, para **gerenciar workloads e serviços containerizados**, que facilita **configuração declarativa** e **automação**. Um workload é uma aplicação rodando no Kubernetes, e um serviço containerizado é quando usamos, por exemplo, o Docker para criar containers.

## <a name="2"></a>Para que serve o Kubernetes?

Além de gerenciar workloads e serviços containerizados, o Kubernetes provê:

- **Service discovery e load balancing**: ele expõe um container usando o nome DNS ou IP e, se o tráfego estiver alto, ele pode balancear e distribuir pela network. Service discovery é o processo de detectar automaticamente devices e serviços numa rede de computadores
- **Orquestração de armazenamento**: ele te permite montar um sistema de armazenamento a sua escolha, como local storage e cloud providers públicos
- **Rollouts e rollbacks automáticos**: você pode descrever o estado desejado para o container deployado e o Kubernetes consegue controlar o estado de acordo com o que você descreveu
- **Bin packing automático**: você diz o quanto de CPU e RAM cada container precisa e o Kubernetes lida com os recursos descritos da melhor forma
- **Self-healing**: o Kubernetes reinicia containers que falharam, substitui containers, mata containers que não respondem ao health-check definido e não expõe o container para clientes até que eles estejam prontos
- **Gerenciamento de configuração e secrets**: ele também te deixa guardar e gerenciar informações sensíveis como senhas, OAuth tokens, SSH keys, etc

## <a name="3"></a>Quais os componentes básicos do Kubernetes?

Os componentes básicos do Kubernetes são:

- Cluster
- Node
- Pod
- Control plane
- Complementos: DNS, [dashboard do Kubernetes](https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/), cluster-level logging, entre outros

Quando fazemos deploy do Kubernetes nós temos um **cluster**. Para ter um cluster Kubernetes funcionando precisamos desses componentes:

![kubernetes components](https://d33wubrfki0l68.cloudfront.net/2475489eaf20163ec0f54ddc1d92aa8d4c87c96b/e7c81/images/docs/components-of-kubernetes.svg)

## <a name="4"></a>O que é um cluster?

Um cluster é um **conjunto de worker machines**, que são chamadas de **nodes**. Cada cluster tem pelo menos um worker node. 

## <a name="5"></a>O que são nodes?

Nodes **rodam aplicações containerizadas no Kubernetes**, e as worker nodes são hosts para **pods**. Os nodes têm os seguintes componentes:

- **kubelet**: um agente que roda em cada node do cluster, verificando se containers estão rodando num pod
- **kube-proxy**: é uma network proxy, ou seja, uma aplicação que atua como intermediário entre um cliente e um servidor, que roda em cada node do cluster, implementando uma parte do conceito de service do Kubernetes. O kube-proxy mantém regras de network nos nodes, e essas regras permitem comunicações de rede para seus pods de sessions dentro ou fora do cluster 
- **Container runtime**: é o software que é responsável por rodar os containers, como o containerd e o CRI-O 

## <a name="6"></a>O que são pods?

Um pod é um **conjunto de containers rodando no cluster Kubernetes**. 

## <a name="7"></a>O que é o control plane?

O control plane **gerencia os worker nodes e os pods no cluster**. Em ambientes de produção ele geralmente roda em vários computadores e um cluster geralmente roda vários nodes. Os componentes do control plane tomam decisões globais sobre o cluster, detectando e respondendo a eventos do cluster como, por exemplo, startar um pod.

O control plane é composto de:

- **kube-apiserver**: expõe a API do Kubernetes, como se fosse o frontend para o Kubernetes control plane
- **etcd**: armazenamento de chave/valor para todos os dados do cluster
- **kube-scheduler**: é o componente que verifica novos pods criados que estão sem node definido, selecionando um node onde eles possam rodar  
- **kube-controller-manager**: componente que roda processos do controller. Cada controller, como o node controller, job controller e o ServiceAccount controller, é um processo separado, entretanto, são todos compilados em um único binário e rodados como um único processo
- **cloud-controller-manager**: componente que tem lógica de controle específica do provedor de cloud, permitindo que você link seu cluster com a API do provedor

## <a name="8"></a>O que é kubectl?

É a **ferramenta de linha de comando do Kubernetes para se comunicar com o control plane do cluster**, usando a API do Kubernetes. Sintaxe do `kubectl`:

```bash
kubectl [command] [TYPE] [NAME] [flags]
```
 
Exemplo de comando para listar todos os pods dentro de um namespace (um namespace é uma forma de isolar um grupo de recursos):

```bash
kubectl get pods
```

---
_Fontes_:
[Documentação do Kubernetes](https://kubernetes.io/docs/concepts)
[Service discovery na Wikipedia](https://en.wikipedia.org/wiki/Service_discovery)
[Proxy server na Wikipedia](https://en.wikipedia.org/wiki/Proxy_server)

---
_Esse texto não tem intenção de esgotar o tema. Acrescente nos comentários, e também aponte erros quando os identificar._