Componentes Fundamentais do Kubernetes: Compreendendo Todos os Conceitos do K8S

  • Definição: Uma aplicação é a implementação da lógica de negócios. Embora não seja um conceito oficial do K8S, os programas que rodam dentro dos containers são normalmente considerados aplicações.
  • Relação Hierárquica: Aplicação ∈ Container. O Pod é o veículo para executar a aplicação, e geralmente há uma correspondência um-para-um entre aplicação e container, mas múltiplos containers podem formar uma aplicação complexa.

Container

  • Definição: O container é a menor unidade para executar aplicações. Ele empacota o aplicativo e todas as suas dependências, garantindo execução consistente em qualquer ambiente.
  • Relação Hierárquica: Container ∈ Pod. Um Pod pode conter um ou mais containers, que compartilham recursos como rede e armazenamento.

Pod

  • Definição: Um conjunto de um ou mais containers que compartilham um ambiante de rede (endereço IP, portas) e recursos de armazenamento. É a menor unidade de agendamento e implantação no K8S, atuando como uma abstração dos containers.
  • Funcionalidade: Facilita a comunicação e colaboração entre containers.
  • Relação Hierárquica: Normalmente, um Pod contém apenas um container (relação um-para-um). No entanto, para aplicações complexas que requerem colaboração entre múltiplos containers, um pode incluir vários.
  • Ciclo de Vida: Os Pods não são entidades estáveis; são facilmente criados ou destruídos. Em caso de falha, o K8S automaticamente substitui por um novo Pod (não repara o antigo, e o IP também é realocado).

Service (Serviço)

  • Definição: Um Service é uma abstração de serviço que encapsula um grupo de Pods, fornecendo um ponto de acesso unificado.
  • Funcionalidade:
    1. Resolve a instabilidade dos IPs dos Pods: oferece uma forma estável de acesso (como um endereço IP fixo ou nome DNS).
    2. Permite que aplicações usem nomes DNS em vez de IPs diretos, proporcionando descoberta de serviços e balanceamento de carga.
  • Relação Hierárquica: Um Service gerencia múltiplos Pods, e um Node pode hospedar múltiplos Services.
  • Classificação:
    1. Serviços Externos: Acessíveis por clientes externos ou dentro do cluster, com uma interface estável (IP e porta do Service não mudam com os Pods).
    2. Serviços Internos: Restritos ao cluster, não expostos externamente.
  • Tipos Principais:
    • ClusterIP: Tipo padrão, expõe o serviço apenas internamente no cluster.
    • NodePort: Tipo comum, expõe o serviço em uma porta específica em cada Node, permitindo acesso externo.
    • LoadBalancer: Cria um balanceador de carga externo em ambientes de nuvem suportados e roteia tráfego para o serviço.
    • ExternalName: Mapeia o serviço para um nome DNS externo.
    • Headless: Tipo sem cabeça, usado principalmente para resolução DNS e descoberta de serviços.
  • Exemplo:
    1. Objetivo: Expor uma aplicação (MeuApp) via um serviço NodePort para acesso externo, permitindo que usuários acessem através do IP do nó e porta (30080).

    2. Fluxo de Trabalho:

      1. O serviço meu-app-service é exposto na porta 30080 para acesso externo.
      2. O Kube Proxy escuta requisições na porta 30080 e as encaminha para a porta 80 do meu-app-service.
      3. O Service seleciona Pods com o label app=MeuApp e aplica balanceamento de carga para escolher um Pod.
      4. A requisição é encaminhada para a porta do Pod de backend (porta-alvo: 8080).
      5. O Pod processa a requisição e retorna a resposta ao Service.
      6. O Service retorna a resposta ao Kube Proxy.
      7. O Kube Proxy devolve a resposta ao usuário.
    3. Implementação de Código: ``` apiVersion: v1 # Versão da API para interação com o API Server kind: Service # Tipo de recurso como Service metadata: # Metadados do serviço nome: meu-app-service # Nome do serviço para referência interna e externa spec: # Especificações de configuração do recurso tipo: NodePort # Tipo do serviço exposto externamente seletor: # Seletor para escolher Pods com base em labels app: MeuApp # Seleciona Pods com label app=MeuApp portas: - protocolo: TCP # Protocolo usado pelo serviço porta: 80 # Porta do serviço exposta internamente no cluster porta-alvo: 8080 # Porta do Pod de backend porta-no: 30080 # Porta exposta externamente, deve estar entre 30000-32767

      
      

Node (Nó)

  • Definição: Uma máquina física ou virtual em um cluster Kubernetes, que serve como unidade de trabalho para executar Pods.
  • Componentes Principais:
    • kubelet: Comunica-se com o plano de controle e gerencia o ciclo de vida dos containers e Pods no nó.
    • Runtime do container (ex.: Docker, containerd): Responsável pela execução e gerenciamento real dos containers.
    • kube-proxy: Mantém regras de rede no nó, implementando proxy de rede e balanceamento de carga para Services.
  • Relação Hierárquica: Pod ∈ Service ∈ Node. Os recursos do nó (CPU, memória) são alocados para os Pods que rodam nele.

Cluster

  • Definição: Um conjunto de múltiplos Nodes, formando a infraestrutura base para o Kubernetes gerenciar e agendar aplicações containerizadas.
  • Relação Hierárquica: Node ∈ Cluster. O plano de controle do Kubernetes agencia tarefas em diferentes nós.

Ingress

  • Definição: Um objeto de API que atua como ponto de entrada para acesso externo a serviços dentro do cluster, geranciando rotas HTTP e HTTPS.

  • Funcionalidade: Oferece diversos métodos de roteamento:

    1. Roteamento Baseado em Caminho: Encaminha tráfego com base no caminho da URL.
    2. Roteamento Baseado em Domínio: Roteia com base no cabeçalho do host (domínio).
    3. Balanceamento de Carga: Distribui requisições entre diferentes Services e seus Pods.
    4. Suporte a TLS: Configura terminação SSL/TLS para acesso HTTPS seguro.
  • Componentes:

    1. Recurso Ingress: Objeto de configuração que define regras de roteamento (domínio, caminho, serviço de backend).
    2. Regras de Ingress: Conjunto de regras para rotear requisições externas, baseadas em host ou caminho URL.
    3. Controlador Ingress: Implementa a funcionalidade do Ingress, monitorando recursos e aplicando regras (ex.: Nginx Ingress Controller, Traefik).
  • Exemplo de Configuração:

    1. Objetivo: Redirecionar tráfego de meu-app.example.com para meu-service na porta 80.
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      nome: exemplo-ingress
    spec:
      regras:
      - host: meu-app.example.com
        http:
          caminhos:
          - caminho: /
            tipo-caminho: Prefixo
            backend:
              servico:
                nome: meu-servico
                porta:
                  numero: 80
    
    

ConfigMap

  • Funcionalidade: Armazena configurações públicas para desacoplar dados de configuração dos Pods.
  • Observação: As informações no ConfigMap são armazenadas em texto claro; evite usá-lo para dados sensíveis.

Secret

  • Definição: Usado para encapsular informações sensíveis, codificando-as em Base64 (embora não seja totalmente seguro, pois Base64 é facilmente decodificável).

Volume

  • Definição: Uma interface abstrata de armazenamento que fornece capacidade de armazenamento persistente para containers, garantindo que os dados sobrevivam a reinicializações ou migrações de Pods.
  • Funcionalidade: Permite montar recursos que precisam de armazenamento persistente em discos locais do cluster ou em armazenamento remoto externo (ex.: OSS).

Deployement (Implantação)

  • Definição: Um objeto de gerenciamento declarativo para aplicações sem estado, controlando réplicas de Pods, estratégias de atualização e métodos de implantação.
  • Funcionalidade:
    1. Auto-escalonamento: Ajusta automaticamente o número de réplicas de Pods com base na configuração, garantindo alta disponibilidade.
    2. Atualização Gradual: Atualiza a aplicação de forma incremental para evitar interrupções no serviço.
    3. Controle de Réplicas: Mantém o número desejado de réplicas de Pods, criando novas automaticamente em caso de falha. Por exemplo, com 3 réplicas configuradas, o sistema sempre garante 3 Pods saudáveis.

StatefulSet

  • Definição: Componente para gerenciar serviços com estado, como bancos de dados, caches e filas de mensagens, onde a ordem e a persistência são críticas.
  • Funcionalidade:
    1. Auto-escalonamento: Expande e contrai em ordem fixa para garantir consistência de dados e disponibilidade.
    2. Controle de Réplicas: Mantém um identificador fixo para cada Pod, preservando sua identidade de rede e armazenamento mesmo após reagendamento.
    3. Armazenamento de Estado: Cada réplica possui um identificador de rede estável (via Headless Service) e armazenamento persistente (via PVC).
    4. Implantação Ordenada: Cria Pods em ordem numérica (0,1,2...), garantindo que um esteja totalmente pronto antes de iniciar o próximo.

Namespace

  • Definição: Um mecanismo lógico de isolamento de recursos para criar múltiplos ambientes virtuais dentro de um mesmo cluster físico.
  • Funcionalidade: Divide os recursos do cluster em clusters virtuais distintos, cada um com cotas de recursos e políticas de acesso independentes.

Tags: kubernetes Docker pod Service Deployment

Publicado em 6-10 06:34 por Thomas