🌐 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:

- 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.

-
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

- 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

- Print com a Arquitetura Final deste simples projeto:

🚀 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!