Ciência e Dados
Menu
  • Home
  • Sobre
  • Contato
Menu
Kubernetes - Pods, Nodes, Containers e Clusters

Kubernetes: Pods, Nodes, Containers e Clusters

Posted on 4 de outubro de 20224 de janeiro de 2023 by David Matos

O Kubernetes surgiu como plataforma de orquestração de containers, sendo ferramenta essencial para equipes de Engenharia de Dados. Sua importância é cada vez maior na infraestrutura de Big Data e no deploy de modelos de Machine Learning e em um próximo post vamos discutir isso em mais detalhes. Mas antes vamos compreender o que é o Kubernetes.

O Que é o Kubernetes?

Kubernetes é um sistema de código aberto que foi desenvolvido pelo Google para gerenciamento de aplicativos em containers através de múltiplos hosts de um cluster. Tem como principal objetivo facilitar a implantação de aplicativos baseados em microsserviços. Ele foi baseado na experiência do Google de muitos anos trabalhando com containers, adaptando-os para se trabalhar com Docker. Programado em Go, trata-se de um sistema cujo mais essencial objetivo é o de facilitar a implantação de aplicativos a partir da perspectiva dos microsserviços. O Kubernetes vai além de um mero instrumento de orquestração de containers: ele pode simplesmente reduzir a necessidade de monitoramento por meio de automatizações. Essa virtude explica por que Kubernetes e containers fazem tanto sucesso dentro da comunidade DevOps!

O Kubernetes tem um enorme apoio e impulso da comunidade open-source e 2018 deve marcar o ano de consolidação do Kubernetes como solução para processamento de Big Data. As organizações já estão usando o Kubernetes para uma variedade de tarefas e o processamento de Big Data será o próximo. O Kubernetes tem sido particularmente bem-sucedido com microsserviços e aplicativos modernos e descentralizados. Na verdade, se seguirmos as tendências atuais, os microsserviços containerizados em execução no Kubernetes, são o futuro.

Com o uso cada vez maior de containers, os problemas de orquestração tornaram-se mais relevantes. Nos últimos anos, vários projetos e empresas tentaram enfrentar o desafio – mas o Kubernetes surgiu como uma plataforma forte e dominante para operar containers. Atualmente, a maioria das empresas está executando (ou está planejando migrar para) o Kubernetes como uma plataforma para executar várias cargas de trabalho – sejam microsserviços sem estado, agendamentos, cargas de trabalho de estado, como bancos de dados, e deploy de modelos de Machine Learning.

Porquê o Kubernetes?

Por que o Kubernetes? Porque ele oferece algumas vantagens como plataforma, por exemplo:

  • Uma maneira consistente de empacotar um aplicativo (container) permite consistência em todo o pipeline – do seu laptop ao cluster de produção.
  • O Kubernetes é uma excelente plataforma para executar cargas de trabalho em vários nós de hardware commodity, enquanto abstrai a complexidade e o gerenciamento de nós.
  • Você pode dimensionar com base na demanda – tanto o aplicativo, como o próprio cluster.
  • O Kubernetes já é uma plataforma bem aceita para executar microsserviços e há esforços em andamento, por exemplo, para executar cargas de trabalho serverless no Kubernetes. Seria ótimo ter uma única plataforma que pudesse abstrair os recursos e tornar mais fácil para o operador gerenciar uma plataforma única.

O Kubernetes está rapidamente se tornando o novo padrão para implantar e gerenciar software na nuvem. Com todo o poder que o Kubernetes oferece, no entanto, há uma curva de aprendizado. Como recém-chegado, tentar analisar a documentação oficial pode ser esmagador. Há muitas partes diferentes que compõem o sistema e pode ser difícil dizer quais delas são relevantes para seu caso de uso. Este artigo fornecerá uma visão simplificada do Kubernetes, mas tentará fornecer uma visão geral de alto nível dos componentes mais importantes e como eles se encaixam. Primeiro, vamos ver como o hardware é representado.

Hardware

Nodes

nodes

Um nó é a menor unidade de hardware de computação no Kubernetes. É uma representação de uma única máquina no seu cluster. Na maioria dos sistemas de produção, um nó provavelmente será uma máquina física em um datacenter ou uma máquina virtual hospedada em um provedor de nuvem, como o Google Cloud Platform. Não deixe as convenções limitá-lo, no entanto; em teoria, você pode fazer um nó de quase qualquer coisa.

Pensar em uma máquina como um “nó” nos permite inserir uma camada de abstração. Agora, em vez de nos preocuparmos com as características únicas de qualquer máquina individual, podemos simplesmente ver cada máquina como um conjunto de recursos de CPU e RAM que podem ser utilizados. Desta forma, qualquer máquina pode substituir qualquer outra máquina em um cluster Kubernetes.

Cluster

cluster

Embora o trabalho com nós individuais possa ser útil, não é o modo de funcionamento do Kubernetes. Em geral, você deve pensar no cluster como um todo, em vez de se preocupar com o estado de nós individuais.

No Kubernetes, os nós agrupam seus recursos para formar uma máquina mais poderosa. Quando você implanta programas no cluster, ele manipula de forma inteligente o trabalho de distribuição para os nós individuais para você. Se algum nó for adicionado ou removido, o cluster se deslocará ao trabalho conforme necessário. Não deve importar para o programa ou o programador quais máquinas individuais estão realmente executando o código.

Se esse tipo de sistema parecido com o hivemind lembra você o Borg de Star Trek, você não está sozinho; “Borg” é o nome do projeto interno do Google no qual o Kubernetes foi baseado.

Volumes Persistentes

Como os programas em execução no seu cluster não têm garantia de serem executados em um nó específico, os dados não podem ser salvos em nenhum lugar arbitrário no sistema de arquivos. Se um programa tentar salvar dados em um arquivo para mais tarde, mas for realocado em um novo nó, o arquivo não estará mais onde o programa espera que ele esteja. Por esse motivo, o armazenamento local tradicional associado a cada nó é tratado como um cache temporário para manter os programas, mas os dados salvos localmente não podem persistir.

volumes

Para armazenar dados permanentemente, o Kubernetes usa Volumes Persistentes. Embora os recursos de CPU e RAM de todos os nós sejam efetivamente agrupados e gerenciados pelo cluster, o armazenamento de arquivos persistentes não é. Em vez disso, unidades locais ou na nuvem podem ser anexadas ao cluster como um volume persistente. Isso pode ser considerado como conectar um disco rígido externo ao cluster. Os Volumes Persistentes fornecem um sistema de arquivos que pode ser montado no cluster, sem estar associado a nenhum nó específico.

Software

Containers

containers

Os programas em execução no Kubernetes são empacotados como containers do Linux. Os containers são um padrão amplamente aceito, portanto, já existem muitas imagens pré-criadas que podem ser implantadas no Kubernetes.

Containerization permite que você crie ambientes de execução Linux independentes. Qualquer programa e todas as suas dependências podem ser agrupados em um único arquivo e, em seguida, compartilhados na Internet. Qualquer pessoa pode baixar o container e implantá-lo em sua infraestrutura com pouca configuração necessária. A criação de um container pode ser feita de forma programática, permitindo que poderosos pipelines de Data Science sejam formados.

Vários programas podem ser adicionados em um único container, mas você deve se limitar a um processo por container, se possível. É melhor ter muitos pequenos containers do que um grande. Se cada container tiver um foco preciso, as atualizações serão mais fáceis de implantar e os problemas serão mais fáceis de diagnosticar.

Pods

pods

Ao contrário de outros sistemas que você pode ter usado no passado, o Kubernetes não executa containers diretamente; em vez disso, ele envolve um ou mais containers em uma estrutura de nível mais alto chamada pod. Qualquer container no mesmo pod compartilhará os mesmos recursos e rede local. Os containers podem se comunicar facilmente com outros containers no mesmo agrupamento, como se estivessem na mesma máquina, mantendo um grau de isolamento de outros.

Os pods são usados ​​como a unidade de replicação no Kubernetes. Se seu aplicativo se tornar muito popular e uma única instância de um pod não puder carregar, o Kubernetes poderá ser configurado para implantar novas réplicas de seu pod no cluster, conforme necessário. Mesmo quando não está sob carga pesada, é padrão ter várias cópias de um pod em execução a qualquer momento em um sistema de produção para permitir o balanceamento de carga e a resistência a falhas.

Os pods podem conter vários containers, mas você deve se limitar quando possível. Como os pods são dimensionados para cima e para baixo como uma unidade, todos os containers de um pod devem ser dimensionados juntos, independentemente de suas necessidades individuais. Isso leva a recursos desperdiçados e uma conta cara. Para resolver isso, os pods devem permanecer o menor possível, geralmente contendo apenas um processo principal e seus containers auxiliares fortemente acoplados (esses containers auxiliares são geralmente chamados de “carros laterais”).

Deployment

deployment

Embora os pods sejam a unidade básica de computação no Kubernetes, eles normalmente não são lançados diretamente em um cluster. Em vez disso, os pods geralmente são gerenciados por mais uma camada de abstração: o deployment.

O objetivo principal de um deployment é declarar quantas réplicas de um pod devem estar em execução por vez. Quando uma implantação é adicionada ao cluster, ela automaticamente aumenta o número solicitado de pods e os monitora. Se um pod morre, o deployment irá recriá-lo automaticamente.

Usando um deployment, você não precisa lidar com os pods manualmente. Você pode apenas declarar o estado desejado do sistema e ele será gerenciado automaticamente para você.

Ingress

ingress

Usando os conceitos descritos acima, você pode criar um cluster de nós e iniciar implantações de pods no cluster. Há um último problema a ser resolvido: permitir o tráfego externo para seu aplicativo.

Por padrão, o Kubernetes fornece isolamento entre os pods e o mundo externo. Se você deseja se comunicar com um serviço em execução em um pod, é necessário abrir um canal para comunicação. Isso é chamado de ingress.

Existem várias maneiras de adicionar ingresso ao seu cluster. As formas mais comuns são adicionando um controlador de ingresso ou um LoadBalancer. As compensações exatas entre essas duas opções estão fora do escopo deste post, mas você deve estar ciente de que o ingresso é algo com o qual você precisa lidar antes de experimentar o Kubernetes.

E qual o próximo passo?

O que está descrito acima é uma versão super simplificada do Kubernetes, mas deve fornecer os fundamentos necessários para começar a experimentar. Agora que você entende as peças que compõem o sistema, é hora de usá-las para implantar um aplicativo real. Os tutoriais oficiais do Kubernetes são um ótimo lugar para começar.

Para experimentar o Kubernetes localmente, o Minikube criará um cluster virtual em seu hardware pessoal. Se você está pronto para experimentar um serviço na nuvem, o Google Kubernetes Engine tem uma coleção de tutoriais bem completos.

Se você é novo no mundo dos containers e da infraestrutura da Web, sugiro ler a metodologia do 12 Factor App. Isso descreve algumas das práticas recomendadas a serem lembradas ao projetar software para execução em um ambiente como o Kubernetes.

No próximo post veremos como o Kubernetes vem sendo usado como parte integrante de uma infraestrutura de Big Data e no deploy de modelos de Machine Learning.

David Matos

Referências:

Kubernetes – Site Oficial

O Que é o Kubernetes?

Kubernetes – Parte I

Sete razões para mudar para microsserviços

Setup Kubernetes on a Raspberry Pi Cluster easily the official way!

Introducing the Resource Management Working Group

Kubernetes 101: Pods, Nodes, Containers, and Clusters

Deploy de Modelos de Machine Learning

* Imagens extraídas do excelente post de Daniel Sanche, Engenheiro de Kubernetes no Google, com a devida autorização.

Compartilhar

  • Clique para compartilhar no X(abre em nova janela) 18+
  • Clique para compartilhar no Facebook(abre em nova janela) Facebook
  • Clique para compartilhar no LinkedIn(abre em nova janela) LinkedIn
  • Clique para compartilhar no WhatsApp(abre em nova janela) WhatsApp
  • Clique para compartilhar no Telegram(abre em nova janela) Telegram
  • Clique para compartilhar no Tumblr(abre em nova janela) Tumblr
  • Clique para compartilhar no Pinterest(abre em nova janela) Pinterest

Relacionado

16 thoughts on “Kubernetes: Pods, Nodes, Containers e Clusters”

  1. Leandro Paulo disse:
    27 de julho de 2018 às 10:53 AM

    Sensacional é o que resume esse post.

    Responder
    1. David Matos disse:
      27 de julho de 2018 às 1:56 PM

      Valeu Leandro.

      Responder
  2. Alex disse:
    4 de novembro de 2018 às 10:56 AM

    Post realmente esclarecedor! Gostei muito.

    Responder
    1. David Matos disse:
      4 de novembro de 2018 às 12:10 PM

      Muito obrigado Alex.

      Responder
  3. Kaio Cesar disse:
    22 de agosto de 2019 às 9:06 AM

    Parabéns pelo trabalho, muito boas as explicações de cada ponto, já tenho um direcionamento para os meus estudos. Obrigado

    Responder
    1. David Matos disse:
      23 de agosto de 2019 às 1:00 AM

      Obrigado Kaio.

      Responder
  4. Thiago Cunha disse:
    24 de abril de 2020 às 11:27 AM

    Usualmente não comento em blogs mas MEU DEUS DO CÉU, parabéns pela ótima apresentação do conteúdo.
    Está tudo bem claro com a profundidade dos textos e o uso das imagens. Parabéns!!!!!!!!!!!

    Responder
    1. David Matos disse:
      27 de abril de 2020 às 12:04 AM

      Obrigado Thiago.

      Responder
  5. João Pedro Puccini disse:
    19 de junho de 2020 às 7:37 PM

    Conteúdo de qualidade, parabéns.

    Responder
    1. David Matos disse:
      21 de junho de 2020 às 1:06 AM

      Obrigado João.

      Responder
  6. Ismael disse:
    5 de novembro de 2020 às 12:05 PM

    Que baita post! o mais claro que encontrei na internet.
    Parabéns e muito obrigado!

    Responder
    1. Wesley Silva disse:
      18 de março de 2021 às 5:44 PM

      Muito bom este post, bem escrito, claro e enxuto. Parabéns!

      Responder
      1. David Matos disse:
        19 de março de 2021 às 12:19 AM

        Obrigado Wesley.

        Responder
  7. Pedro Orona disse:
    2 de julho de 2021 às 3:51 PM

    Cara, me parece uma tradução literal do artigo do Daniel Sanche “Kubernetes 101: Pods, Nodes, Containers, and Clusters” publicado no Medium. Recomendo fortemente que você indique no começo do seu texto que é uma tradução literal, citando o artigo original

    Responder
    1. David Matos disse:
      2 de julho de 2021 às 4:15 PM

      Olá Pedro. Todas as referências estão claramente citadas ao final do artigo. Recomendo fortemente ler os artigos até o final antes de postar mensagens.

      Responder
  8. Ernando Rodrigues disse:
    15 de dezembro de 2021 às 2:53 PM

    parabéns

    Responder

Deixe um comentário Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Buscar

Tags Mais Comuns nos Posts

Agentes de IA Analytics Análise de Negócios Apache Spark AWS Big Data Blockchain Business Intelligence ChatGPT Cientista de Dados Cientistas de Dados Ciência de Dados Cloud Computing Data Lake Data Mesh Data Science Data Scientist Data Warehouse Deep Learning Deploy Engenharia de Dados Estatística GPU GraphRAG Hadoop IA Generativa Inteligência Artificial Internet of Things Linguagem Python Linguagem R LLM LLMs Machine Learning MCP (Model Context Protocol) Metadados Normalização NVIDIA Oracle Pipeline de Dados Predictive Analytics Probabilidade PySpark Python RAG Storytelling

Histórico de Posts

  • maio 2025 (6)
  • abril 2025 (2)
  • março 2025 (4)
  • fevereiro 2025 (8)
  • janeiro 2025 (5)
  • dezembro 2024 (4)
  • novembro 2024 (1)
  • outubro 2024 (1)
  • setembro 2024 (1)
  • agosto 2024 (1)
  • julho 2024 (3)
  • junho 2024 (1)
  • maio 2024 (1)
  • abril 2024 (2)
  • março 2024 (1)
  • fevereiro 2024 (1)
  • janeiro 2024 (1)
  • dezembro 2023 (1)
  • outubro 2023 (2)
  • setembro 2023 (1)
  • agosto 2023 (4)
  • julho 2023 (2)
  • junho 2023 (4)
  • maio 2023 (2)
  • abril 2023 (2)
  • março 2023 (3)
  • fevereiro 2023 (3)
  • janeiro 2023 (3)
  • dezembro 2022 (7)
  • novembro 2022 (6)
  • outubro 2022 (2)
  • setembro 2022 (3)
  • agosto 2022 (2)
  • julho 2022 (2)
  • junho 2022 (3)
  • maio 2022 (1)
  • abril 2022 (3)
  • março 2022 (1)
  • fevereiro 2022 (3)
  • janeiro 2022 (2)
  • dezembro 2021 (1)
  • novembro 2021 (5)
  • outubro 2021 (2)
  • setembro 2021 (3)
  • agosto 2021 (1)
  • junho 2021 (1)
  • fevereiro 2021 (2)
  • janeiro 2021 (1)
  • dezembro 2020 (1)
  • novembro 2020 (1)
  • outubro 2020 (2)
  • agosto 2020 (1)
  • abril 2020 (1)
  • março 2020 (1)
  • fevereiro 2020 (2)
  • agosto 2019 (1)
  • abril 2019 (1)
  • setembro 2018 (2)
  • julho 2018 (1)
  • junho 2018 (3)
  • abril 2018 (1)
  • março 2018 (1)
  • fevereiro 2018 (2)
  • janeiro 2018 (1)
  • dezembro 2017 (1)
  • novembro 2017 (1)
  • outubro 2017 (1)
  • setembro 2017 (1)
  • julho 2017 (1)
  • junho 2017 (1)
  • maio 2017 (2)
  • abril 2017 (1)
  • janeiro 2017 (1)
  • novembro 2016 (1)
  • outubro 2016 (1)
  • setembro 2016 (1)
  • julho 2016 (1)
  • junho 2016 (1)
  • maio 2016 (1)
  • abril 2016 (1)
  • fevereiro 2016 (1)
  • janeiro 2016 (3)
  • dezembro 2015 (4)
  • novembro 2015 (6)
  • outubro 2015 (9)
  • setembro 2015 (9)
  • agosto 2015 (9)
©2025 Ciência e Dados
 

Carregando comentários...