Introducción a Kubernetes

1

¿Qué es Kubernetes y por qué es importante?

2

Configura un clúster local con Minikube o Kind

3

Arquitectura de Kubernetes: nodos, pods, servicios y componentes clave

4

Introducción a la API de Kubernetes y kubectl

5

Diferencias entre enfoques declarativos e imperativos

Quiz: Introducción a Kubernetes

Objetos y Recursos de Kubernetes

6

Pods, ReplicaSets y Deployments

7

Servicios e Ingress: Exposición de aplicaciones

8

ConfigMaps y Secrets: Gestión de configuraciones y datos sensibles

Quiz: Objetos y Recursos de Kubernetes

Redes y Almacenamiento en Kubernetes

9

Modelo de red de Kubernetes: Comunicación entre pods y servicios

10

Tipos de servicios: ClusterIP, NodePort, LoadBalancer y ExternalName

11

Volúmenes persistentes (PV) y reclamaciones (PVC)

12

DaemonSets y StatefulSets

Quiz: Redes y Almacenamiento en Kubernetes

Cargas de Trabajo y Escalado

13

Despliegue de una aplicación multi-tier en Local

14

Jobs y CronJobs: Tareas únicas y programadas

15

Escalado de aplicaciones: HPA y VPA

16

Escalado de aplicaciones en Kubernetes

Quiz: Cargas de Trabajo y Escalado

Kubernetes en la Nube

17

Introducción a EKS, AKS y GKE

18

Configuración de Kubernetes en EKS (AWS)

19

Configuración de Kubernetes en AKS (Azure) y GKE (Google Cloud)

20

Despliegue del Proyecto en la nube de AWS (EKS)

Quiz: Kubernetes en la Nube

Troubleshooting, Casos de uso y Certificaciones K8s

21

Troubleshooting en Kubernetes

22

Otros casos de uso de Kubernetes

23

Certificaciones profesionales en K8s

24

Despliegue en Kubernetes Finalizado

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Kubernetes

Curso de Kubernetes

Jaggy Castaño

Jaggy Castaño

Despliegue del Proyecto en la nube de AWS (EKS)

20/24
Recursos

¿Cómo podemos desplegar una aplicación en un clúster de Kubernetes en la nube?

Desplegar una aplicación en un clúster de Kubernetes (K8s) en la nube es un proceso que requerirá varios pasos para asegurar que todos los componentes estén alineados y en operación. A continuación, exploramos el proceso, las configuraciones necesarias y buenas prácticas para lograr una implementación exitosa.

¿Qué prerrequisitos son esenciales?

Para comenzar, asegúrate de cumplir con ciertos prerrequisitos básicos necesarios para el despliegue:

  • Clúster EKS en AWS: debes haber creado previamente un clúster de Elastic Kubernetes Service dentro de tu cuenta de AWS.
  • Base de datos RDS: debes contar con una instancia de base de datos Amazon RDS configurada para que los pods puedan interactuar con esta base de datos.
  • Registries de Docker: tener configurados los registries de Docker necesarios para tus aplicaciones backend y frontend.

Con estos elementos en marcha, estarás listo para proceder al despliegue.

¿Cómo organizamos los recursos en namespaces?

Una práctica común en Kubernetes es segmentar recursos en namespaces, los cuales permiten un orden lógico y organizacional:

  • Namespace para backend: alojando todos los componentes relacionados con la parte del servidor.
  • Namespace para frontend: que incluye todos los componentes de la interfaz de usuario.
  • Namespace para storage: para gestionar la capa de persistencia, como el almacenamiento y bases de datos. Aquí se puede crear un servicio de tipo ExternalName que conecta con la base de datos RDS.

Crear namespaces específicos no solo organiza tus recursos, sino que también ayuda en la configuración de accesos y políticas.

kubectl create namespace backend
kubectl create namespace frontend
kubectl create namespace storage

¿Cómo configuramos la conexión con servicios externos?

Para conectar con una base de datos RDS, puedes usar un servicio ExternalName que apuntará a la base de datos:

apiVersion: v1
kind: Service
metadata:
  name: mysql
  namespace: storage
spec:
  type: ExternalName
  externalName: tu-endpoint-rds.amazonaws.com

¿Cómo gestionamos información sensible en Kubernetes?

La gestión de datos sensibles en Kubernetes debe manejarse con sumo cuidado. Usar secretos para valores como contraseñas es una buena práctica:

kubectl create secret generic mysql-secret \
  --from-literal=username=admin \
  --from-literal=password=k8s \
  --from-literal=host=tu-endpoint-rds.amazonaws.com \
  -n backend

Para asegurar la confidencialidad, Kubernetes cifra los secretos en almacenamiento, haciéndolos seguros y protegidos.

¿Cómo inicializamos nuestra base de datos?

Inicializar la base de datos puede involucrar la creación de tablas y otros procesos iniciales, definidos a través de scripts. Estos scripts se ejecutan mediante un Job de Kubernetes.

apiVersion: batch/v1
kind: Job
metadata:
  name: init-db
  namespace: backend
spec:
  template:
    spec:
      containers:
        - name: db-init
          image: image-usada-para-initializar
          volumeMounts:
            - name: config-volume
              mountPath: /init-scripts
          envFrom:
            - secretRef:
                name: mysql-secret
      volumes:
        - name: config-volume
          configMap:
            name: db-scripts
      restartPolicy: OnFailure

¿Cómo compilar imágenes para diferentes arquitecturas?

Cuando se trabaja con Docker para diferentes arquitecturas, como en máquinas ARM y clústeres AMD, Buildx se vuelve esencial para la compilación multi-plataforma:

docker buildx build --platform=linux/amd64 -t mi-registry/mi-app:tag .
docker push mi-registry/mi-app:tag

¿Cómo configuramos y desplegamos nuestra aplicación?

Después de compilar, es crucial validar las configuraciones de tu archivo de despliegue:

  1. Validar Deployment YAML: comprueba que la referencia a las imágenes y configuraciones son correctas.

  2. Health Checks: utiliza readiness y liveliness probes para asegurar que el servicio esté disponible y funcionando como se espera.

  3. External Access: configura servicios tipo LoadBalancer para facilitar el acceso exterior a la aplicación.

    apiVersion: apps/v1 kind: Deployment metadata: name: mi-app namespace: backend spec: replicas: 1 selector: matchLabels: app: mi-app template: metadata: labels: app: mi-app spec: containers: - name: mi-app image: mi-registry/mi-app:tag ports: - containerPort: 5001 envFrom: - secretRef: name: mysql-secret

Al asegurar cada uno de estos pasos, podrás desplegar aplicaciones robustas y flexibles en Kubernetes, apoyando a cualquier negocio a alcanzar la escala y eficiencia deseadas. Sigue explorando y adaptando nuevas prácticas para continuar mejorando.

Aportes 1

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

La URL que se pone en requests.js lo puse como variable de entorno y se setea al iniciar el contendor.