Close Menu
    Facebook X (Twitter) Instagram
    JPAndrade
    X (Twitter) LinkedIn
    JPAndrade
    Home»Kubernetes»O que é Pod no Kubernetes?
    Kubernetes

    O que é Pod no Kubernetes?

    Joao Paulo de AndradeBy Joao Paulo de AndradeJanuary 11, 2025Updated:January 14, 2025No Comments5 Mins Read
    Facebook Twitter Pinterest LinkedIn Tumblr Email
    Share
    Facebook Twitter LinkedIn Pinterest Email

    Pod é a menor unidade que você pode criar no Kubernetes.

    Um Pod pode conter um ou um grupo de containers, compartilhando os recursos de volume, conexão, namespace e etc. Todos os containers em um mesmo Pod nunca são hospedados em servidores diferentes, todos ficando sempre na mesma máquina devido a mesma utilização de namespace e quando existir uma comunicação entre diferentes Pods, a comunicação será feita via IP.

    Existem duas formas de se utilizar Pods em um Cluster Kubernetes:

    1. Single Container (um único container) – Utilizando apenas um único container por Pod, conhecido como “one-container-per-Pod”, eh o mais comum no Kubernetes, neste caso o Kubernetes gerencia o Pod em vez de gerenciar o container diretamente.

    2. Pods com Multi Containers – Um pod pode encapsular uma aplicação composta por múltiplos container, compartilhando o mesmo recurso. A utilização de múltiplos containers no mesmo Pod passa ser um cenário mais avançado e requer análise, arquitetura e configurações para obter um ambiente mais resiliente.

    Não é necessário rodar vários containers para prover replicação de resiliência ou capacidade, nestes casos é utilizado réplicas para garantir alta disponibilidade no ambiente.

    Criando um Pod

    Temos duas formas de se criar um Pod:

    1. Comando no Terminal
    2. Através de um arquivo .yaml

    A forma mais rapida e facil de se trabalhar com o Pod e através da linha de comando, via linha de comando e mais fácil para criarmos, testarmos e analisar o ambiente, porém traz uma série de desvantagem quando estamos falando de ambientes que possuem automação, pipeline e Deploys uma vez que precisamos padronizar e garantir o que está no repositório e o que ativo no ambiente.


    Criando um Pod via linha de Comando

    SYNTAX

    Copy
    kubectl run <NOME_DO_POD> --image <IMAGEM_DO_CONTAINER> --port=<PORTA>

    Para exemplo, irei subir um pod com o Nginx expondo a porta 80:

    Copy
    kubectl run webserver --image nginx --port=80

    OUTPUT

    Copy
    pod/webserver created

    Podemos ver o pod criado através do comando `kubectl get pods`

    Copy
    kubectl get pods

    OUTPUT

    Copy
    NAME        READY   STATUS    RESTARTS   AGE
    webserver   1/1     Running   0          27s

    Para deletar o Pod, execute o comando kubectl delete pod

    SYNTAX

    Copy
    kubectl delete pod <NOME_DO_POD>
    Copy
    kubectl delete pod nginx

    OUTPUT

    Copy
    pod "nginx" deleted

    Criando um Pod utilizando um arquivo de manifesto .yaml

    Um arquivo de manifesto .yaml é muito utilizado para manter padronização dos deploys, possibilitando armazenar em um repositório e criar um fluxo de CI/CD para provisionamento de aplicação. O manifesto para criação de um Pod possui a seguinte estrutura básica:

    apiVersion: Versão da API que será utilizada no Kubernetes para criar o objeto , atualmente na v1.

    kind: O tipo de objeto que pretendemos criar.

    metadata: Metadados que ajudam a identificar de forma única o objeto como por exemplo nome, UID, namespace, tags.

    Spec: Que estado deseja para o objeto, neste caso estamos criando um container com o nome de nginx utilizando a imagem do nginx.

    Copy
    apiVersion: v1
    kind: Pod
    metadata:
      name: webserver 
    spec:
      containers:
      - image: nginx
        name: nginx
        ports:
        - containerPort: 80

    Apos criado o arquivo, você deverá fazer um deploy utilizando o comando kubectl apply.

    SYNTAX

    Copy
    kubectl apply -f <ARQUIVO.yaml>
    Copy
    kubectl apply -f pod.yaml 

    OUTPUT

    Copy
    pod/webserver created

    Para destruir o Pod, utilize o comando kubectl delete.

    SYNTAX

    Copy
    kubectl delete -f <ARQUIVO.yaml>
    Copy
    kubectl delete -f pod.yaml 

    OUTPUT

    Copy
    pod "webserver" deleted

    Dry-run

    Guardar toda a estrutura de um arquivo de manifesto do Kubernetes e extremamente dificil pois variam de acordo com cada servico que voce vai utilizar. Nao estarei entrando em muitos detalhes neste post e em breve estarei fazendo um post dedicado ao tema. Existe uma maneira mais rapida e facil de se criar arquivos utilizando o parametro –dry-run.

    SYNTAX

    Copy
    kubectl run <NOME_DO_POD> --image <IMAGEM_DO_CONTAINER> --dry-run=client

    OUTPUT

    Copy
    pod/nginx created (dry run)

    Perceba que na saída do comando ele retornou que o pod foi criado (dry run), se realizarmos um get nos pods, não iremos ver o pod que criamos em execução.

    Copy
    kubectl get pods
    No resources found in default namespace.

    Não existe nada de errado, pois o Dry-run simula a criação do Pod e não encaminha para a API realizar a criação do Pod no servidor.

    Vamos fazer com que a saida do dry-run passe a ser na formatacao .yaml utilizando o parametro -o yaml

    Copy
    kubectl run nginx --image=nginx --port=80 --dry-run=client -o yaml
    

    OUTPUT

    Copy
    apiVersion: v1
    kind: Pod
    metadata:
      creationTimestamp: null
      labels:
        run: nginx
      name: nginx
    spec:
      containers:
      - image: nginx
        name: nginx
        ports:
        - containerPort: 80
        resources: {}
      dnsPolicy: ClusterFirst
      restartPolicy: Always
    status: {}

    Perceba que ele retornou toda a estrutura de manifesto, neste caso pode conter algumas informações que não iremos utilizar, porém já fez todo o trabalho de criação de estrutura do manifesto que precisamos.

    Até este momento ainda não temos o nosso pod em execução, vamos fazer com que a saída do comando seja em um arquivo:

    Copy
    kubectl run nginx --image=nginx --port=80 --dry-run=client -o yaml > nginx.yaml

    Com o nosso arquivo criado, vamos realizar o deploy.

    Copy
    kubectl apply -f nginx.yaml

    OUTPUT

    Copy
    pod/nginx created

    A partir deste momento já estamos nosso pod criado:

    Copy
    kubectl get pods

    OUTPUT

    Copy
    NAME    READY   STATUS    RESTARTS   AGE
    nginx   1/1     Running   0          10s

    Referências

    https://kubernetes.io/docs/concepts/workloads/pods
    https://kubernetes.io/pt-br/docs/concepts/overview/working-with-objects/kubernetes-objects/

    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
    Joao Paulo de Andrade
    • Website

    Leave A Reply Cancel Reply

    • Twitter
    • LinkedIn
    Top Posts

    Configurando IP estático utilizando o Netplan

    May 24, 2024136 Views

    O que é Pod no Kubernetes?

    January 11, 202518 Views
    X (Twitter) LinkedIn
    2025 JPAndrade - My Personal blog

    Type above and press Enter to search. Press Esc to cancel.