Saltar al contenido principal

🌐 Despliegue de Aplicaciones en el Clúster Kubernetes

Esta guía muestra de forma sencilla cómo Implementar sus aplicaciones en Clúster Kubernetes en Nuvion de SaveinCloud.


🚀 1. Despliegue de Aplicación

Vamos a publicar de forma simple y funcional un Pod Apache en internet por el puerto 80 usando Ingress con Traefik en Kubernetes. La estructura será:


  • 1.Pod + Service de Apache
  • 2.Ingress usando Traefik
  • 3.Prueba de Acceso Externo

  • Crear el Pod Apache con archivo 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

  • Crear el Service para exponer el Pod con archivo apache-service.yaml
  • El Ingress no apunta directamente al Pod, él apunta al 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

  • Crear Ingress usando Traefik con archivo 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

-Ejemplo de salida:

Ingress Traefik

  • Verificar si Traefik está en ejecución:
kubectl get pods -A | grep traefik
kubectl get svc -A | grep traefik
  • En el Panel Nuvion, podemos navegar hasta la pantalla de Load Balancers y notar que se creó un Load Balancer Traefik, para los puertos TCP/80 y TCP/443 con estado Activo y 3 miembros para cada uno, también podemos validar que tiene IP privada y en el siguiente paso crearemos y asociaremos un Floating IP (IP Pública) para que con esta IP pública podamos crear un registro A en nuestra Zona DNS y apuntar a nuestro subdominio. Con el subdominio respondiendo, los usuarios ya podrán acceder a la aplicación web.

Load Balancers


  • En el Panel Nuvion navegue hasta la pantalla de Floating IPs y agregue un nuevo Floating IP para nuestro Load Balancing Traefik haciendo clic en el botón + Add Floating IP:

  • Seleccione la red public

  • Asociamos esta nueva IP a nuestro Load Balancing

  • En IP address seleccione la red Private

  • Haga clic en el botón ADD para crear

Floating IP

  • Configurar DNS - Cree un registro A apuntando a la IP del Clúster:
apache.seudominio.com -> IP_DO_NODE_TRAEFIK
  • O probar vía /etc/hosts:
IP_PUBLICO treinamento.seudominio.com
  • Probar el Acceso:
curl http://treinamento.seudominio.com
  • O abrir en el navegador (Debe aparecer la página estándar de Apache It Works!)
http://treinamento.seudominio.com

Apache works

  • Captura con la Arquitectura Final de este simple proyecto:

Arquitetura Final


🚀 1. Solución de Problemas en Kubernetes

Estos son los comandos más usados para solución de problemas en un clúster. Ayudan a investigar problemas de pods, nodos, red, almacenamiento, eventos y logs.

  • Verificar el estado general del Clúster:
kubectl cluster-info
kubectl cluster-info dump
kubectl get componentstatuses
kubectl get nodes
kubectl get namespaces
  • Resumen Completo:
kubectl get all -A
  • Debug avanzado con contenedor temporal:
kubectl debug pod/pod-name -it --image=busybox
  • Comando más usado para solución rápida de problemas:
kubectl describe pod pod-name && kubectl logs pod-name
  • Reiniciar Pods / Deployments
kubectl rollout restart deployment deployment-name
  • Ver estado del rollout:
kubectl rollout status deployment deployment-name 
  • Solución de problemas de Pods

  • Ver detalles completos del pod:

kubectl describe pod pod-name 
  • Ver logs del contenedor:
kubectl logs pod-name
  • Logs en tiempo real:
kubectl logs -f pod-name 
  • Logs del contenedor anterior (cuando reinicia):
kubectl logs pod-name --previous

🧠 ¿Dudas?

¡Hable con nuestro equipo de soporte técnico de SaveinCloud!