Introdução
Este glossário reúne uma vasta gama de termos essenciais do universo Kubernetes, uma plataforma de código aberto amplamente adotada para a orquestração de contêineres. O Kubernetes facilita a automação de diversos processos em ambientes distribuídos, oferecendo escalabilidade, flexibilidade e controle sobre aplicações conteinerizadas. Com a expansão contínua de seu uso, é crucial entender a terminologia que sustenta essa tecnologia. Através de definições concisas, este glossário busca esclarecer conceitos centrais e fornecer uma referência útil para profissionais que atuam na administração de clusters, automação de processos e desenvolvimento de aplicações na nuvem.
Glossário
Annotations – São pares de chave-valor usados para anexar metadados não identificáveis a objetos do Kubernetes. Eles são comumente utilizados para armazenar informações operacionais, como detalhes sobre a configuração de um serviço que não influenciam diretamente na lógica do Kubernetes.
Affinity – Permite que administradores definam regras de afinidade para Pods, de modo que eles sejam preferencialmente agendados em Nodes que possuam determinados labels. Isso ajuda a otimizar a colocação de Pods de acordo com a localização de recursos específicos ou políticas de balanceamento de carga.
Anti Affinity – Funciona como o inverso do Affinity. Uma regra de anti-affinity informa ao scheduler que deve evitar colocar um novo Pod em um Node específico se o label do novo Pod corresponder ao label de outro Pod já existente nesse Node. Isso é útil para garantir a alta disponibilidade, evitando que múltiplos Pods críticos sejam alocados no mesmo Node.
Aggregation Layer – Uma camada de agregação que permite estender o Kubernetes instalando APIs adicionais. Isso é feito através da adição de servidores de API que se integram com o Kubernetes API Server, permitindo a implementação de novas funcionalidades ou a integração com sistemas externos.
Controller – Um Controller é responsável por garantir que o estado atual de uma aplicação corresponda ao estado desejado. Ele monitora continuamente os recursos do Kubernetes e faz as mudanças necessárias para manter o estado especificado pelo usuário, como a quantidade de réplicas de um Pod.
Cloud Controller Manager – Um componente que conecta o cluster Kubernetes à API do provedor de nuvem. Ele é responsável por gerenciar componentes que dependem da infraestrutura de nuvem, como load balancers, volumes de armazenamento e endereços IP.
Cluster – É a base do Kubernetes, onde todas as aplicações conteinerizadas são executadas. Um cluster é composto por um control plane (que gerencia o estado do cluster) e os worker nodes (onde as aplicações realmente rodam).
CronJob – Um CronJob cria Jobs em uma agenda especificada, permitindo a execução de tarefas automatizadas em horários predefinidos. Eles são úteis para tarefas de manutenção, backup, ou qualquer tarefa repetitiva que precise ser executada em intervalos regulares.
ConfigMap – Um ConfigMap armazena dados de configuração para objetos usarem. Ele permite armazenar dados não confidenciais em pares de chave-valor, tornando fácil a separação da configuração da imagem contêiner.
ClusterIP – Um ClusterIP expõe o serviço apenas em um IP interno, tornando o serviço acessível apenas de dentro do cluster. É o tipo de serviço padrão no Kubernetes.
ClusterRole – Um ClusterRole contém regras que representam um conjunto de permissões. Ele é semelhante a um Role, mas enquanto um Role opera dentro de um namespace específico, um ClusterRole pode ser aplicado em todo o cluster.
ClusterRoleBinding – Um RoleBinding concede permissões dentro de um namespace específico, enquanto um ClusterRoleBinding concede esse acesso em todo o cluster. Ele conecta um ClusterRole a usuários, grupos ou ServiceAccounts, efetivamente dando a eles as permissões definidas no ClusterRole.
cAdvisor – O cAdvisor é um agente de código aberto integrado ao binário kubelet que monitora o uso de recursos e analisa o desempenho dos contêineres. Ele coleta estatísticas sobre o uso de CPU, memória, arquivos e rede para todos os contêineres em execução em um determinado node.
Cluster-admin – Este “superusuário” do Kubernetes pode executar qualquer ação em qualquer recurso em um cluster. O cluster-admin tem permissões amplas e deve ser utilizado com cuidado, preferencialmente em operações administrativas essenciais.
Container Network Interface (CNI) – A CNI fornece uma interface padrão entre provedores de rede e a rede do Kubernetes. Ela permite que diferentes plugins de rede integrem-se de forma consistente com o Kubernetes, garantindo conectividade para os Pods dentro do cluster.
Containers – Um container é uma estrutura padronizada que pode armazenar e executar qualquer aplicação. No Kubernetes, containers são a unidade fundamental de computação, agrupados em Pods.
Control Plane – O control plane hospeda os componentes usados para gerenciar o cluster Kubernetes, incluindo o API server, controller manager, scheduler e o banco de dados etcd. Ele é responsável por tomar decisões sobre o estado do cluster.
Deployment – Um Deployment é responsável por criar e atualizar instâncias de aplicação, fornecendo atualizações declarativas para aplicações usando arquivos yaml. Ele gerencia a replicação e a escalabilidade de Pods, além de permitir rollbacks para versões anteriores.
Desired State – O desired state é o estado declarado que você deseja para seu sistema no Kubernetes. Ele indica quantas réplicas são necessárias para executar um sistema saudável, e o controller trabalha continuamente para ajustar o estado atual para corresponder ao estado desejado.
Daemon Set – Um DaemonSet gerencia grupos de Pods replicados. Todos os nodes do Kubernetes executam uma cópia de um Pod, o que permite que um daemon específico seja executado em cada node do cluster.
Data Plane – O data plane é a camada de dados do cluster Kubernetes, onde os dados são armazenados e gerenciados. Isso inclui os dados de estado dos Pods e outros objetos do Kubernetes.
etcd Cluster – O etcd é o banco de dados chave/valor que armazena o estado do cluster Kubernetes. Ele é crítico para a operação do cluster, armazenando informações sobre nodes, Pods, ConfigMaps, secrets e outros objetos do Kubernetes.
ExternalName – O ExternalName atua como um proxy, permitindo redirecionar solicitações para um serviço fora (ou dentro) do cluster. Ele usa um nome DNS como destino, em vez de expor um IP diretamente.
Helm – Helm é um gerenciador de pacotes de aplicações que roda em cima do Kubernetes. Ele permite que você defina, instale e atualize aplicações Kubernetes usando charts, que são pacotes de pré-configurações do Helm.
Heapster – O Heapster é um projeto do Kubernetes que fornece uma solução robusta de monitoramento para clusters Kubernetes. Ele coleta métricas de performance e eventos dos Pods e nodes em tempo real, permitindo que administradores monitorem a saúde do cluster.
HorizontalPodAutoscaler – O HorizontalPodAutoscaler altera a forma da carga de trabalho do Kubernetes aumentando ou diminuindo automaticamente o número de Pods em resposta à carga de trabalho. Ele monitora as métricas, como uso de CPU, para determinar quando escalar ou desescalar Pods.
Ingress – Um Ingress é um objeto API que gerencia o acesso externo aos serviços em um cluster, tipicamente usando HTTP/HTTPS. Ele pode fornecer balanceamento de carga, terminação SSL e hospedagem virtual baseada em nome, facilitando o gerenciamento do tráfego externo.
Job – Um Job cria um ou mais Pods e espera que eles terminem com sucesso. Ele é usado para tarefas que precisam ser executadas até a conclusão, como processamento de dados ou tarefas de manutenção.
Kube API Server – O Kube API server é responsável por orquestrar todas as operações no cluster. Ele atua como o gateway para o cluster, e é acessível por clientes de fora do cluster, integrando com a CLI e GUI do Kubernetes.
Kube Controller Manager – O Kube Controller Manager é o motor que executa os loops de controle principais, criando Pods e monitorando o estado do cluster. Ele gerencia os controllers do Kubernetes, como o ReplicationController e o Job Controller.
Kubelet – O Kubelet conecta o Master Node ao Worker Node e garante que Pods e seus containers estejam saudáveis e em execução no estado desejado. Ele é responsável por aplicar as instruções do control plane no node.
Kube Proxy – O Kube Proxy é usado para subnetting e expor serviços para o mundo externo. Ele garante que o tráfego de rede seja roteado corretamente para os Pods dentro do cluster e entre os nodes.
Kubectl – O kubectl é uma ferramenta de linha de comando que interage com o kube-apiserver e envia comandos para o master node. Cada comando é convertido em uma chamada API, permitindo o gerenciamento de recursos Kubernetes através da CLI.
Kubernetes API – A Kubernetes API é o núcleo de funcionamento do Kubernetes. Ela permite que todos os componentes do Kubernetes e aplicações externas interajam com o cluster, armazenando informações sobre o estado do cluster e permitindo a criação, atualização e deleção de objetos.
Kubeadm – O Kubeadm inicializa um cluster Kubernetes. Ele foi projetado para ser uma maneira simples para novos usuários criarem clusters, automatizando grande parte do processo de configuração inicial.
Label – Labels são pares de chave/valor que são anexados a objetos do Kubernetes. Eles são usados para organizar e selecionar subconjuntos de objetos, como Pods ou Nodes, permitindo operações baseadas em grupos de recursos.
Liveness Probe – A liveness probe determina se as aplicações em execução dentro dos containers estão operacionais. Se a liveness probe falhar, o Kubelet reiniciará o container para restaurar sua funcionalidade.
LoadBalancer – Um LoadBalancer expõe o serviço com um balanceador de carga do provedor de nuvem, distribuindo o tráfego de entrada entre os Pods associados ao serviço.
Minikube – O Minikube é uma versão leve do Kubernetes, muito mais fácil de usar localmente. Ele permite que desenvolvedores experimentem e desenvolvam em um ambiente Kubernetes em uma máquina local.
Manifest – Um manifest é um arquivo de configuração JSON ou YAML que descreve os objetos do Kubernetes e suas versões. Ele é usado para definir e configurar os recursos que serão criados no cluster.
Master Node/control plane – O master node ou control plane coordena o cluster. Ele cria o cluster e hospeda todos os componentes e serviços que gerenciam, planejam, agendam e monitoram todos os worker nodes.
Node Controller – O Node Controller gerencia vários aspectos dos nodes em um cluster Kubernetes. Ele é responsável por detectar a saúde dos nodes, garantindo que estejam funcionando corretamente, e por tomar ações corretivas se um node ficar indisponível.
Node – Um node pode ser uma máquina virtual ou física que faz parte de um cluster Kubernetes. Ele hospeda Pods e executa as aplicações, conectando-se ao control plane para receber instruções.
Node-Proxy – O Node-Proxy é um serviço de proxy que é executado em cada worker node. Ele lida com o subnetting individual do host e expõe serviços para o mundo externo, facilitando a comunicação de rede dentro e fora do cluster.
Namespace – Um namespace é uma forma de organizar clusters em sub-clusters virtuais, logicamente separados uns dos outros. Namespaces permitem que recursos sejam isolados entre equipes ou projetos, enquanto ainda permitem a comunicação controlada entre eles.
Network Policy – Uma network policy é uma especificação de como grupos de Pods podem se comunicar entre si e com outros pontos finais da rede. Ela define regras de entrada e saída para Pods, ajudando a controlar o tráfego dentro de um cluster.
NodePort – Um NodePort expõe o serviço no IP de cada node em uma porta específica. Ele permite o acesso ao serviço a partir de fora do cluster, direcionando o tráfego para os Pods associados ao serviço.
Operators – Operators são implantados em um cluster Kubernetes e permitem escrever uma aplicação para gerenciar completamente outra. Eles automatizam a operação de aplicações complexas, capturando o conhecimento de como instalá-las, configurá-las, atualizá-las e repará-las.
Pod – O Pod é o menor e mais básico objeto executável no Kubernetes. Um Pod é um grupo de um ou mais containers de aplicação, que compartilham recursos como volumes, endereço IP, containers init e sidecars.
Persistent Volume – Um Persistent Volume é o volume “físico” na máquina host que armazena dados persistentes. Ele existe independentemente dos Pods que o utilizam, e pode ser montado em diferentes Pods ao longo do tempo.
Persistent Volume Claim – Um Persistent Volume Claim (PVC) é uma solicitação de armazenamento feita por um usuário. Ele é semelhante a um Pod, mas em vez de definir um contêiner, ele define o armazenamento que precisa ser alocado a um Pod.
PodDisruptionBudget – O PodDisruptionBudget permite limitar o número de Pods que são interrompidos durante atualizações ou outros eventos planejados. Isso garante maior disponibilidade, ao mesmo tempo em que permite que o administrador do cluster gerencie os nodes do cluster.
Pod Preset – Um PodPreset é um objeto API que automatiza a adição de informações aos Pods à medida que são criados. Ele pode ser usado para injetar configurações, segredos ou volumes em Pods, sem precisar alterar os manifests originais.
Role – Um Role é um conjunto de permissões dentro de um namespace específico. Quando você cria um Role, você deve especificar o namespace ao qual ele pertence, limitando suas permissões a esse escopo.
Replica Set – O Replica Set é usado para manter um conjunto estável de Pods replicados em execução dentro de um cluster a qualquer momento. Ele garante que um número especificado de Pods esteja sempre em execução, com base no modelo fornecido.
RoleBinding – O RoleBinding concede as permissões definidas em um Role a algum grupo de Users ou ServiceAccounts. Ele contém uma lista de sujeitos (Users, Groups ou ServiceAccounts), e uma referência ao Role sendo concedido.
Replication Controller – O Replication Controller garante que o número especificado de réplicas de Pod esteja em execução a qualquer momento. Ele monitora os Pods existentes e cria novos se necessário para manter o número desejado de réplicas.
RBAC – O RBAC (Role-Based Access Control) permite que os administradores do Kubernetes configurem políticas de acesso através da API. Ele permite atribuir diferentes funções aos usuários, o que lhes dá permissões variadas dentro do cluster.
Readiness Probe – O Kubelet usa readiness probes para saber quando um container está pronto para começar a aceitar tráfego. Ele ajuda a evitar que o tráfego seja direcionado a containers que ainda estão iniciando ou que não estão prontos para lidar com solicitações.
Service – Um Service permite acessar dinamicamente um grupo de Pods réplicas via IP e Porta da nossa rede, e definir um nome para o serviço. Ele abstrai o acesso aos Pods, oferecendo um único ponto de entrada, independentemente de quantos Pods existam.
StatefulSet – Um StatefulSet é adaptado para gerenciar Pods que devem persistir ou manter estado. Diferentemente de um ReplicaSet, ele garante que os Pods sejam criados e excluídos em ordem específica, mantendo uma identidade estável.
Secret – Kubernetes Secrets podem armazenar informações sensíveis, como senhas, chaves SSH, e chaves API. Esses segredos são acessíveis a partir de qualquer Pod no mesmo cluster, mas de forma segura e controlada.
Selector – O selector permite selecionar recursos do Kubernetes com base no valor dos labels. Ele é usado em objetos como ReplicaSets e Services para definir quais Pods devem ser gerenciados ou acessados.
Storage Class – As storage classes são usadas para definir os diferentes tipos de armazenamento disponíveis no cluster. Elas permitem a criação dinâmica de volumes com diferentes características de desempenho e durabilidade.
Startup Probe – A startup probe verifica se a aplicação dentro de um container foi iniciada corretamente. Se um container falhar na startup probe, ele é encerrado e segue a restartPolicy do Pod.
ServiceAccount – Uma ServiceAccount fornece uma identidade para processos que são executados em um Pod. Isso permite que esses processos acessem a API do Kubernetes e outros serviços com um conjunto específico de permissões.
Scheduler (kube-scheduler) – O kube-scheduler identifica o node certo para colocar um container com base em limitações de recursos. Ele é responsável por alocar os Pods aos nodes do cluster.
Taints – Taints são usados para garantir que os Pods não sejam agendados em determinados nodes a menos que tenham uma tolerância específica. Eles ajudam a isolar nodes que não devem ser utilizados para workloads comuns.
Tolerations – Tolerations permitem que os Pods sejam agendados em nodes que têm taints. Eles neutralizam os taints em um node, permitindo que um Pod específico seja alocado ali, mesmo que o node seja marcado como indisponível para outros Pods.
Volume – Um Volume é um diretório acessível pelos containers em um Pod. Ele pode persistir dados que sobrevivem ao ciclo de vida de um container e pode ser montado em vários containers simultaneamente.
VerticalPodAutoscaler – O VerticalPodAutoscaler ajusta automaticamente os recursos solicitados (CPU e memória) de um Pod com base no uso observado, sem a necessidade de reiniciar o Pod.
Workloads – Workloads referem-se às aplicações que estão sendo executadas em Pods. No Kubernetes, os objetos de workload incluem Deployments, ReplicaSets, StatefulSets, DaemonSets, e Jobs, cada um com seu próprio comportamento de gerenciamento e replicação.
Workloads Controller – O Workloads Controller gerencia a implantação de Pods dentro do Kubernetes. Ele garante que o número correto de Pods esteja sempre em execução e que eles estejam corretamente distribuídos entre os nodes do cluster.
YAML – YAML é uma linguagem de serialização de dados frequentemente usada para definir configurações no Kubernetes. Arquivos YAML são legíveis por humanos e podem ser usados para descrever objetos como Pods, Services, e Deployments no Kubernetes.
Conclusão
O Kubernetes se destaca como uma ferramenta poderosa para a automação de aplicações conteinerizadas, e a compreensão de sua terminologia é essencial para o uso eficaz da plataforma. Este glossário proporciona uma visão abrangente dos principais conceitos e funcionalidades que permitem a flexibilidade, o controle e a escalabilidade dos ambientes Kubernetes. Dominar esses termos facilita o desenvolvimento e a operação de soluções baseadas em contêineres, promovendo a integração contínua e a entrega ágil de software. Com este conhecimento, os profissionais podem navegar com mais confiança e eficácia no ecossistema Kubernetes, aproveitando ao máximo suas funcionalidades.