πŸš€ Pods no Kubernetes (com 2 containers no mesmo Pod):



This content originally appeared on DEV Community and was authored by DeividFerraz

☝ Resumo do artigo:

  • Cliente β†’ DNS/Host β†’ IP pΓΊblico (LB do ingress-nginx) -> Pod do ingress-nginx (Nginx) β†’ Ingress (host + path).
  • Ingress decide quem recebe (host + path) e fala com Service. -> Service (ClusterIP:port, L4) β†’ Endpoints (PodIP:targetPort).
  • Service seleciona Pods por labels e encaminha para PodIP:targetPort. -> Pod (containers compartilham o mesmo IP, portas diferentes).
  • Pod = mesmo IP para todos os containers; o que muda Γ© a porta.

🚢 O que Γ© um Pod:
Menor unidade implantΓ‘vel, pode ter 1 ou mais containers.

  • Containers do mesmo Pod compartilham:
  • Network namespace β†’ mesmo IP (o Pod IP), localhost comum
  • Volumes (se montados).

IMPORTANTE: VocΓͺ nΓ£o cria Pod β€œpuro” na produΓ§Γ£o: cria um Deployment, que cria ReplicaSet, que cria Pods.

🧭 Por que usar Namespaces?

  • Isolam nomes: api1 em dev e api1 em prod.
  • Controlam acesso (RBAC), quotas, polΓ­ticas de rede.
  • Ciclo de vida: deletar o namespace remove tudo.

🧪 Exemplo prΓ‘tico: duas APIs no mesmo Pod (api3a + api3b):
1) Deployment (um Pod com 2 containers, portas 8080 e 8081):
apiVersion: apps/v1
kind: Deployment
metadata:
name: api3
namespace: prod
spec:
replicas: 1
selector:
matchLabels: { app: api3 }
template:
metadata:
labels:
app: api3
svc-api3a: “true” # ajuda os Services a β€œenxergar” este Pod
svc-api3b: “true”
spec:
containers:

  • name: api3a image: https://suaiamgem ports: [{ name: http-api3a, containerPort: 8080 }] env: [{ name: ASPNETCORE_URLS, value: http://+:8080 }] readinessProbe: { httpGet: { path: “/”, port: 8080 }, initialDelaySeconds: 5, periodSeconds: 10 } livenessProbe: { httpGet: { path: “/”, port: 8080 }, initialDelaySeconds: 10, periodSeconds: 20 }
  • name: api3b image: https://suaimagem ports: [{ name: http-api3b, containerPort: 8081 }] env: [{ name: ASPNETCORE_URLS, value: http://+:8081 }] readinessProbe: { httpGet: { path: “/”, port: 8081 }, initialDelaySeconds: 5, periodSeconds: 10 } livenessProbe: { httpGet: { path: “/”, port: 8081 }, initialDelaySeconds: 10, periodSeconds: 20 } ⁉ – Por quΓͺ duas portas?
  • Containers do mesmo Pod compartilham IP, entΓ£o precisam portas diferentes.

CONTINUAÇÂO NO PRΓ’XIMO POST…


This content originally appeared on DEV Community and was authored by DeividFerraz