Pular para o conteúdo principal

🌐 Deploy de Aplicações no Cluster Kubernetes

Este guia mostra de forma simples como Implementar suas aplicações em Cluster Kubernetes no Nuvion da SaveinCloud.


🚀 1. Deploy de Aplicação

Iremos publicar de forma simples e funcional um Pod Apache na internet pela porta 80 usando Ingress com Traefik no Kubernetes. A estrutura será:


  • 1.Pod + Service do Apache
  • 2.Ingress usando Traefik
  • 3.Teste de Acesso Externo

  • Criar o Pod Apache com arquivo apache-pod.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: apache
spec:
replicas: 3
selector:
matchLabels:
app: apache
template:
metadata:
labels:
app: apache
spec:
terminationGracePeriodSeconds: 0
tolerations:
- effect: NoExecute
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 2
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
tolerationSeconds: 2
containers:
- image: httpd
imagePullPolicy: IfNotPresent
name: apache
ports:
- containerPort: 80
protocol: TCP

-Aplicar:

kubectl apply -f apache-pod.yaml

-Verificar:

kubectl get pods
kubectl get pods -o wide

  • Criar o Service para expor o Pod com arquivo apache-service.yaml
  • O Ingress não aponta diretamente para Pod, ele aponta para o Service.
apiVersion: v1
kind: Service
metadata:
name: apache-service
spec:
selector:
app: apache
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP

-Aplicar:

kubectl apply -f apache-service.yaml

-Verificar:

kubectl get svc

  • Criar Ingress usando o Traefik com arquivo apache-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: apache-ingress
annotations:
kubernetes.io/ingress.class: traefik
spec:
rules:
- host: treinamento.seudominio.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: apache-service
port:
number: 80

-Aplicar:

kubectl apply -f apache-ingress.yaml

-Verificar:

kubectl get ingress

-Exemplo de saída:

Ingress Traefik

  • Verificar se o Traefik está em execução:
kubectl get pods -A | grep traefik
kubectl get svc -A | grep traefik
  • No Painel Nuvion, podemos navegar até a tela de Load Balancers e note que foi criado um Load Balancer Traefik, para as portas TCP/80 e TCP/443 com status Active e 3 membros para cada, podemos validar também que ele tem IP privado e também na proxima etapa iremos criar e associar um Floating IP(IP Publico) para que com este IP publico possamos criar um registro A em nossa Zona de DNS e apontar para nosso subdominio, Com o subdominio obtendo resposta, os usuarios ja irão conseguir acessar a aplicação web.

Load Balancers


  • No Painel Nuvion navegue até a tela de Floating IPs e adicione um novo Floating IP para nosso Load Balancing Traefik clicando no botão de + Add Floating IP:

  • Selecione a rede public

  • Iremos associar este novo IP ao nosso Load Balancing

  • Em IP address selecione a rede Private

  • Clique no botão ADD para criação

Floating IP

  • Configurar DNS - Crie um registro A apontando para o IP do Cluster:
apache.seudominio.com -> IP_DO_NODE_TRAEFIK
  • Ou Testar via /etc/hosts:
IP_PUBLICO treinamento.seudominio.com
  • Testar o Acesso:
curl http://treinamento.seudominio.com
  • Ou abrir no navegador(Deve aparecer a página padrão do Apache it Works!)
http://treinamento.seudominio.com

Apache works

  • Print com a Arquitetura Final deste simples projeto:

Arquitetura Final


🚀 1. Troubleshooting no Kubernetes

Estes são os comandos mais usados para troubleshooting em um cluster. Eles ajudam a investigar problemas de pods, nodes, rede, storage, eventos e logs.

  • Verificar o estado geral do Cluster:
kubectl cluster-info
kubectl cluster-info dump
kubectl get componentstatuses
kubectl get nodes
kubectl get namespaces
  • Resumo Completo:
kubectl get all -A
  • Debug avançado com container temporário:
kubectl debug pod/pod-name -it --image=busybox
  • Comando mais usado para Troubleshooting rápido:
kubectl describe pod pod-name && kubectl logs pod-name
  • Reiniciar Pods / Deployments
kubectl rollout restart deployment deployment-name
  • Ver Status do rollout:
kubectl rollout status deployment deployment-name 
  • Troubleshooting de Pods

  • Ver detalhes completos do pod:

kubectl describe pod pod-name 
  • Ver logs do container:
kubectl logs pod-name
  • Logs em tempo real:
kubectl logs -f pod-name 
  • Logs do container anterior (quando reinicia):
kubectl logs pod-name --previous

🧠 Dúvidas?

Fale com nosso time de suporte técnico da SaveinCloud!