curso
Kubernetes Tutorial: Guía para principiantes sobre el despliegue de aplicaciones
Cuando empecé a trabajar como Ingeniero de Aprendizaje Automático, enseguida me di cuenta de que construir modelos no era el mayor reto. Desplegarlos de forma fiable y escalable sí lo era.
Fue entonces cuando conocí Kubernetes, la herramienta de orquestación de contenedores de la que todo el mundo parecía hablar en el sector.
Al principio, me costó entender su compleja arquitectura. Intenté aprender más leyendo documentación y guías sobre Kubernetes que explicaban sus fundamentos. Pero aun así, me costaba entenderlo.
Pero todo eso cambió cuando empecé a poner en práctica los conceptos por mí mismo. Montando mi propio clúster de Kubernetes, experimentando con distintas configuraciones y desplegando pequeñas aplicaciones, empecé poco a poco a atar cabos. La experiencia práctica me ayudó a ganar confianza, y por fin comprendí cómo Kubernetes podía simplificar la gestión de aplicaciones a escala.
Este tutorial está diseñado para proporcionarte la misma experiencia práctica. Tanto si eres principiante como si quieres reforzar los fundamentos, esta guía te guiará a través de la configuración de un clúster local de Kubernetes, el despliegue de aplicaciones y la gestión eficiente de los recursos.
Al final, tendrás una sólida comprensión de los fundamentos de Kubernetes y estarás preparado para aplicar estos conocimientos a aplicaciones del mundo real.
Antes de empezar
Repasemos algunos requisitos previos y herramientas que necesitarás para seguir esta guía.
Requisitos previos
- Conocimientos básicos de línea de comandos: Debes tener conocimientos básicos de los comandos Linux fundamentales para navegar por directorios, ejecutar comandos y editar archivos, ya que Kubernetes se basa en interacciones de línea de comandos. Por ejemplo, comandos como
cd
yls
y edición básica de texto con nano o vim. - Comprender los contenedores: Comprender los conceptos de contenedorización y herramientas como Docker. Aprende más sobre Docker en los cursos Introducción a Docker y Docker Intermedio.
- YAML: Necesitas estar familiarizado con los archivos YAML y su sintaxis. Esto es esencial, ya que en Kubernetes todo se gestiona mediante archivos YAML.
- (Opcional) Entornos en la nube: Conocimiento de plataformas de nube pública como AWS, Azure o GCP y sus servicios Kubernetes gestionados (por ejemplo, EKS, AKS, GKE). Te ayudará cuando más adelante quieras pasar de una configuración local a una basada en la nube.
Herramientas
- minikube: Herramienta para ejecutar localmente un clúster Kubernetes de un solo nodo (lo instalaremos).
- kubectl: La herramienta de línea de comandos de Kubernetes para interactuar con los clústeres (la instalaremos).
- Editor de texto: Cualquier editor para crear y editar archivos YAML. Como recomendación, use una herramienta que permita extensiones basadas en YAML para facilitarte la vida (por ejemplo, VSCode).
Medio ambiente
- Hardware: Al menos 2 CPU, 2 GB de memoria libre y 20 GB de espacio libre en disco.
- Gestor de contenedores: Para gestionar imágenes de contenedores (por ejemplo, Docker, Podman).
¿Quieres saber cómo se comparan Kubernetes y Docker? Echa un vistazo a este en profundidad Kubernetes vs. Kubernetes. Comparación de Docker para comprender sus funciones en los entornos de contenedores.
Configurar tu clúster local de Kubernetes
¡Ahora vamos a concretar y a configurar tu clúster local de Kubernetes!
Pero, ¿qué es un clúster Kubernetes? Un clúster Kubernetes es una colección de nodos que trabajan juntos para ejecutar tus aplicaciones. Consta de dos componentes:
- Plano de control: Gestiona el clúster, encargándose de tareas como programar aplicaciones, mantener el estado deseado y escalar tus aplicaciones al estado deseado.
- Nodos trabajadores: Máquinas que ejecutan tus aplicaciones dentro de Pods, las unidades más pequeñas de Kubernetes (más sobre esto más adelante).
Componentes básicos de Kubernetes. Imagen de Kubernetes.io
Instalar minikube
Minikube se puede instalar en Windows, Linux y MacOS. Sigue las instrucciones de la sección "Primeros pasos " de la documentación oficial de Minikube.
Trabajo en Windows pero utilizo WSL2 porque prefiero la interfaz de Linux. Si quieres configurar WSL2 para tu máquina Windows, lee la guía de instalación de Microsoft.
Instalación de kubectl
kubectl es la interfaz de línea de comandos para tus recursos Kubernetes. Puedes instalarlo siguiendo la documentación oficial de Kubernetes o utilizando la instalación integrada en minikube.
Te recomiendo que lo instales utilizando la documentación oficial de Kubernetes, que te permite utilizar kubectl
como comando independiente. Con minikube, debes ejecutar comandos con el prefijo minikube
.
Iniciar un clúster minikube
Así que ahora que hemos instalado minikube, podemos iniciar un clúster desde un terminal con acceso de administrador utilizando el siguiente comando:
minikube start
Este comando extraerá automáticamente los binarios de Kubernetes necesarios e iniciará un clúster de un solo nodo por ti.
Verificar el clúster
Ahora podemos verificar el estado del clúster para comprobar si todo funciona como se espera:
minikube status
Debería devolver algo como esto
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
Ahora podemos dar un paso más y utilizar kubectl para recuperar todos los nodos de nuestro clúster, que debería ser sólo uno:
kubectl get nodes
El comando anterior debería devolver algo similar a lo siguiente:
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane 10m v1.32.0
Detener el clúster
En caso de que quieras detener el clúster para liberar algunos recursos si el clúster no es necesario, puedes ejecutar
bash
minikube stop
Sólo tienes que volver a iniciarlo la próxima vez que quieras seguir trabajando con Kubernetes.
Eliminar el clúster
En caso de que quieras eliminar completamente tu clúster minikube y todos los recursos añadidos a él, puedes ejecutar
minikube delete
Domina Docker y Kubernetes
Conceptos básicos de Kubernetes: Pods, despliegues, servicios y espacios de nombres
Así que, ahora que hemos configurado un clúster y comprobado que todo funciona, es hora de crear nuestra primera aplicación.
Pero antes de crear la primera aplicación, es esencial comprender los fundamentos de Kubernetes. Si quieres una introducción más profunda a Kubernetes, te recomiendo que consultes el curso Introducción a Kubernetes.
Los conceptos más básicos de Kubernetes son Pods, Despliegues y Servicios. Conocer estos tres tipos de recursos puede ayudarte a crear aplicaciones potentes. Por tanto, vamos a profundizar en ellas.
¿Qué son los Pods?
Un Pod es la unidad desplegable más pequeña de Kubernetes. Ejecuta uno o más contenedores estrechamente acoplados con el mismo almacenamiento, red y espacio de nombres. Un Pod siempre se programa en un nodo de Kubernetes.
Puedes definir cuántos recursos debe obtener tu Pod (por ejemplo, CPU y memoria).
Un ejemplo de aplicación con dos contenedores podría ser el contenedor de tu aplicación y un contenedor ayudante que agregue los registros y los envíe a algún sitio.
Características de una cápsula:
- Instancia única: Cada Pod ejecuta una única instancia de tu aplicación.
- Efímero por naturaleza: Los módulos están diseñados para ser temporales y se sustituyen si fallan o se actualizan.
Ejemplo de YAML para crear un Pod:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: nginx-container
image: nginx:1.21
ports:
- containerPort: 80
A continuación, puedes instalar el Pod utilizando kubectl:
kubectl apply -f pod.yaml
Esto iniciaría un Pod llamado my-pod
, que ejecutaría un servidor web nginx por ti.
¿Qué son las implantaciones?
Un Despliegue es un objeto Kubernetes de nivel superior que se utiliza para gestionar el ciclo de vida de los Pods. Garantiza que se ejecuta el número deseado de réplicas Pod y gestiona las actualizaciones y retrocesos.
Características de un despliegue:
- Gestión de réplicas: Garantiza que el número deseado de vainas esté siempre en funcionamiento.
- Autocuración: Sustituye automáticamente los Pods insanos.
- Actualizaciones continuas: Actualiza la versión de la aplicación paso a paso sin tiempo de inactividad (si está configurado).
Veamos cómo sería un archivo YAML de despliegue que crea de nuevo un servidor web nginx, pero esta vez con tres réplicas:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.21
ports:
- containerPort: 80
Puedes instalar ese Despliegue con kubectl:
kubectl apply -f deployment.yaml
Lo anterior crearía un Despliegue llamado nginx-deployment
que crearía tres Pods, cada uno ejecutando el contenedor nginx.
¿Qué son los Servicios?
Ahora vamos a la última parte: Los servicios.
Un Servicio es una abstracción que proporciona un acceso de red estable a los Pods, aunque cambien sus direcciones IP. Actúa como puente entre tus aplicaciones y los clientes externos.
Pero, ¿por qué es necesario? Cada Pod tiene su dirección IP. Entonces, ¿por qué no podemos utilizar directamente esa dirección IP?
¡Podemos hacerlo! Pero no deberíamos. ¿Por qué?
Como un Pod es efímero, el Despliegue lo mata, y se escala un nuevo Pod siempre que tu Pod no esté sano. Este nuevo Pod tiene entonces una dirección IP diferente. Esto significaría que el cliente que quiera utilizar tu aplicación tendría que alterar permanentemente la dirección IP cada vez que un Pod se bloquee, lo que puede ocurrir a menudo.
Aquí es donde entra en juego un Servicio: busca todos los Pods que coincidan con una etiqueta determinada y dirige automáticamente el tráfico hacia ellos. Si un Pod deja de estar sano, el Servicio deja de enviar tráfico a ese Pod. Y si aparece un nuevo Pod, empezará a enviar tráfico al nuevo Pod.
El Servicio también distribuye el tráfico entre todas las réplicas de tu Implementación, lo que es fantástico, ya que significa que puedes crear más instancias de tu aplicación para distribuir el tráfico sin tener que gestionarlo a través de la lógica de tu aplicación.
Tipos de servicios:
- ClusterIP (por defecto): Expone el Servicio dentro del clúster.
- PuertoNodo: Expone el Servicio en un puerto accesible fuera del clúster.
- LoadBalancer: Se integra con los proveedores de la nube para exponer el Servicio a través de un equilibrador de carga.
Ejemplo de YAML para exponer nuestro servidor web nginx al exterior del clúster:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePort
Puedes volver a crear ese servicio utilizando kubectl:
kubectl apply -f service.yaml
Este Servicio distribuiría ahora el tráfico entrante a todos los Pods con la etiqueta app=nginx
en el Puerto 80.
Si ejecutas un comando describe
en tu Servicio recién creado, deberías ver que ahora hay tres puntos finales, donde cada punto final representa la dirección IP del Pod que se está ejecutando en ese momento:
kubectl describe service nginx-service
El comando anterior debería devolver algo similar a
Name: nginx-service
Namespace: default
Labels: <none>
Annotations: <none>
Selector: app=nginx
Type: NodePort
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.104.53.131
IPs: 10.104.53.131
Port: <unset> 80/TCP
TargetPort: 80/TCP
NodePort: <unset> 32256/TCP
Endpoints: 10.244.0.5:80,10.244.0.6:80,10.244.0.7:80
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
Relaciones entre Pods, Despliegues y Servicios
Así que, para resumir rápidamente:
- Vainas: Representan instancias de aplicación individuales.
- Despliegues: Gestiona el ciclo de vida de los Pods y asegúrate de que están sanos.
- Servicios: Proporciona un acceso estable a los Pods y permite la comunicación externa o interna.
¿Qué son los espacios de nombres?
Los espacios de nombres en Kubernetes te permiten organizar y aislar recursos dentro de un clúster. Puedes pensar en ellos como clusters virtuales dentro del mismo cluster físico.
Ventajas de utilizar espacios de nombres:
- Separación de preocupaciones: Los distintos equipos o aplicaciones pueden operar dentro de su propio espacio de nombres sin afectar a los demás.
- Gestión de recursos: Puedes establecer cuotas y límites de recursos para diferentes espacios de nombres.
- Seguridad y control de acceso: Las políticas pueden aplicarse a nivel de espacio de nombres.
Por defecto, Kubernetes viene con unos cuantos espacios de nombres incorporados:
- por defecto: Los espacios de nombres por defecto donde se crean los recursos, a menos que se especifique lo contrario
- sistema-kube: Se utiliza para componentes internos de Kubernetes (por ejemplo, servidor API, programador, etc.).
- kube-public: Un espacio de nombres de lectura pública.
- kube-node-lease: Se utiliza para seguir los latidos de los nodos.
Puedes crear un espacio de nombres utilizando un archivo YAML:
apiVersion: v1
kind: Namespace
metadata:
name: my-namespace
Guárdalo en un archivo llamado namespace.yaml
y aplícalo utilizando:
kubectl apply -f namespace.yaml
Al ejecutar el comando siguiente, deberías ver una lista de todos los espacios de nombres predeterminados listados y del recién creado:
kubectl get namespaces
A continuación, puedes crear recursos en ese espacio de nombres simplemente estableciendo el espacio de nombres en la sección de metadatos de tu recurso.
Nuestro Despliegue nginx tendría el siguiente aspecto si queremos crearlo en tu espacio de nombres recién creado:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: my-namespace
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.21
ports:
- containerPort: 80
Ahora, tienes que indicar explícitamente que quieres recuperar recursos de tu espacio de nombres recién creado utilizando elargumento -n
:
kubectl get deployment -n my-namespace
Gestionar tu primera aplicación con Kubernetes
Bien, ahora que ya conoces los conceptos básicos de Kubernetes, es hora de desplegar nuestra primera aplicación web en Kubernetes e intentar acceder a ella.
En este capítulo, crearemos un servidor web nginx, expondremos ese servidor web mediante un Servicio al mundo exterior, escalaremos esa aplicación para simular un comportamiento de alto tráfico y actualizaremos la aplicación mediante una actualización continua a una versión más reciente.
Así que, ¡empecemos a hacer cosas divertidas!
Crear un despliegue de aplicación web sencillo
El primer paso es crear un Despliegue para nuestro servidor web que cree un contenedor utilizando la imagen Nginx.
Copia el código siguiente y guárdalo en un archivo llamado nginx-deployment.yaml
.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
A continuación, aplica esa Implementación a tu clúster utilizando el siguiente comando:
kubectl apply -f nginx-deployment.yaml
A continuación, puedes comprobar que el Pod está funcionando:
kubectl get pods
Exponer la aplicación con un servicio
Debemos exponer el servidor web nginx mediante un Servicio al mundo exterior. Para ello, vamos a crear un Servicio de tipo NodePort, ya que queremos acceder al servidor web nginx desde nuestra máquina local fuera del clúster Kubernetes.
Así que crea un archivo llamado nginx-service.yaml
y añade el siguiente contenido:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePort
A continuación, puedes aplicar el Servicio con el comando siguiente:
kubectl apply -f nginx-service.yaml
Por último, puedes utilizar minikube para obtener la URL de tu servidor web nginx:
minikube service nginx-service --url
Abre esa URL en tu navegador, y deberías ver la página de bienvenida de tu servidor web nginx.
Captura de pantalla de la página de bienvenida de un servidor web nginx en un navegador local.
Escalar la aplicación
Por lo tanto, tenemos un Pod en funcionamiento. Pero puede haber una carga masiva de usuarios visitando nuestra página web. Por eso, en Kubernetes, puedes escalar rápidamente tu aplicación para tener más Pods en funcionamiento.
El Servicio detectará automáticamente todos los Pods pertenecientes a ese Despliegue y, a continuación, equilibrará la carga de las peticiones entrantes en todos los Pods que ejecuten el servidor web nginx. Esto ayuda a mejorar el rendimiento general de nuestra página web en caso de que entre mucho tráfico.
Por lo tanto, vamos a escalar nuestra aplicación a 3 réplicas utilizando el siguiente comando:
kubectl scale deployment nginx-deployment --replicas=3
Ahora puedes conseguir de nuevo todos los Pods en funcionamiento, que deberían ser tres:
kubectl get pods
También puedes utilizar el siguiente comando para obtener todos los puntos finales a los que está conectado nuestro nginx-service
. Esto debería devolver tres puntos finales, siendo cada punto final su propia dirección IP interna del clúster:
kubectl get endpoints nginx-service
Actualizaciones continuas
Ahora, tenemos otra ventaja importante de utilizar Kubernetes: Actualizaciones continuas.
Una actualización continua tiene como objetivo evitar cualquier tiempo de inactividad de tu aplicación web. Imagínate las pérdidas económicas que sufrirían empresas como Amazon si su página web no funcionara cada vez que Amazon lanzara una nueva versión.
Mediante una actualización continua, Kubernetes escala un Pod nuevo, comprueba si está en buen estado y luego reduce el antiguo.
Por defecto, Kubernetes garantiza que al menos el 75% del número deseado de Pods esté en funcionamiento, con un 25% como número máximo no disponible. Esto significa que, en nuestro caso, en el que tenemos tres réplicas en funcionamiento, Kubernetes sólo añadirá un nuevo Pod cada vez, comprobará si está en buen estado y, en caso afirmativo, reducirá otro Pod. Repetirá el proceso hasta que todos los Pods estén actualizados a la nueva versión.
Así que vamos a hacerlo ahora cambiando la versión de nuestra imagen nginx de latest
a 1.23
:
kubectl set image deployment/nginx-deployment nginx=nginx:1.23
A continuación, puedes controlar el estado del despliegue utilizando:
kubectl rollout status deployment/nginx-deployment
El resultado debería ser similar a
Waiting for deployment "nginx-deployment" rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "nginx-deployment" rollout to finish: 1 old replicas are pending termination...
deployment "nginx-deployment" successfully rolled out
Y mientras dure el despliegue, ¡tu página web estará accesible todo el tiempo sin ningún tiempo de inactividad!
¿No es estupendo?
Gestionar los recursos de Kubernetes
Kubernetes proporciona potentes herramientas para inspeccionar, modificar y eliminar recursos de todo tipo. Comprender cómo gestionar los recursos de forma eficaz garantiza una mejor resolución de problemas, asignación de recursos y mantenimiento general del clúster.
En esta sección, nos sumergiremos en otros comandos esenciales que te ayudarán a gestionar tus recursos con eficacia y a solucionar problemas en caso de incidencias.
Ver los recursos del clúster
Antes de cambiar cualquier recurso, es esencial ver e inspeccionar los recursos que se están ejecutando actualmente en tu clúster.
Puedes, por ejemplo, listar todos los Pods, Servicios e Implementaciones en ejecución para ver qué está pasando en tu clúster:
# list running Pods
kubectl get pods
# list running Services
kubectl get services
# list running Deployments
kubectl get deployments
Si quieres profundizar en un recurso concreto, puedes utilizar elcomando describe
:
kubectl describe deployment nginx-deployment
Esto mostrará más información, incluyendo actualizaciones continuas, escalado o eventos de extracción de imágenes. Este es el primer punto al que puedes dirigirte si algo va mal.
También puedes comprobar los logs de un Pod en ejecución para ver qué está pasando dentro de ese Pod utilizando el siguiente comando:
kubectl logs <pod-name>
Borrar recursos
También es esencial limpiar los recursos en caso de que ya no se utilicen para liberar recursos del clúster para nuevas aplicaciones.
Puedes eliminar un Pod utilizando:
kubectl delete pod <pod-name>
Podemos hacer esto para uno de nuestros pods nginx. Sin embargo, un nuevo Pod debe escalarse al instante, ya que se gestionan mediante un Despliegue, que siempre intenta tener tres réplicas en funcionamiento.
Así que aquí tendríamos que borrar el nginx-deployment
:
kubectl delete deployment nginx-deployment
Después de ejecutar este comando, todos los Pods nginx en ejecución deberían eliminarse.
También podemos eliminar todos los recursos de un Espacio de Nombres. El siguiente comando eliminaría todos nuestros recursos, que se crearon en el espacio de nombres default
, por defecto:
kubectl delete all --all
Conclusión
¡Enhorabuena! Has llegado al final y has dado con éxito tus primeros pasos en Kubernetes.
Siguiendo este tutorial, habrás aprendido a:
- Configura un clúster local de Kubernetes utilizando minikube.
- Trabaja con Pods, Despliegues, Servicios y Namespaces (los bloques de construcción esenciales de Kubernetes).
- Despliega y gestiona una aplicación web sencilla dentro de Kubernetes.
- Escala las aplicaciones dinámicamente y realiza actualizaciones continuas sin tiempo de inactividad.
- Gestiona los recursos de Kubernetes enumerándolos, describiéndolos y eliminándolos.
Al principio, Kubernetes puede parecer complejo (al menos a mí me lo pareció). Pero desglosarlo en conceptos fundamentales lo hace más accesible.
Sigue experimentando y despliega más aplicaciones.
La mejor forma de aprender Kubernetes es haciendo, así que ¡empieza a construir!
Para mejorar aún más tus conocimientos sobre Kubernetes, considera la posibilidad de explorar:
- Trabajar con ConfigMaps y Secretos: Almacena y gestiona los ajustes de configuración de forma segura.
- Volúmenes persistentes: Aprende a almacenar datos que sobrevivan a los reinicios de Pod utilizando volúmenes persistentes.
- Red y controladores de entrada: Configura el enrutamiento basado en dominios y gestiona el tráfico externo.
- Timón: Utiliza los gráficos de Helm para empaquetar y desplegar aplicaciones complejas con eficacia.
- Kubernetes en la nube: Experimenta con servicios gestionados de Kubernetes como AWS EKS, Azure AKS o Google GKE.
Por último, el tema Containerization and Virtualization with Docker and Kubernetes en DataCamp es un recurso excelente para practicar tanto con Docker como con Kubernetes.
Domina Docker y Kubernetes
Preguntas frecuentes
¿Cómo persisto los datos en Kubernetes a través de los reinicios de Pod?
Los Pods de Kubernetes son efímeros, lo que significa que sus datos se pierden cuando se reinician. Para persistir los datos, puedes utilizar Volúmenes Persistentes (VP) y Reclamaciones de Volumen Persistentes (PVC). Permiten almacenar datos independientemente del ciclo de vida de un Pod. Puedes definir un Volumen Persistente en YAML y montarlo en un Pod, de forma que aunque el Pod se borre y se vuelva a crear, los datos permanezcan.
¿Cómo puedo exponer mi aplicación Kubernetes a Internet con un nombre de dominio?
Para exponer tu aplicación a la Internet pública con un dominio personalizado, necesitas utilizar un Controlador de Entrada. La entrada te permite definir reglas para dirigir el tráfico externo a tus servicios. Normalmente requiere un LoadBalancer externo y un DNS configurado que apunte a tu clúster. NGINX Ingress Controller es una opción popular para gestionar el tráfico en Kubernetes.
¿Cómo protejo mi clúster Kubernetes de accesos no autorizados?
La seguridad es crucial en Kubernetes. He aquí algunos pasos clave para asegurar tu clúster:
- Utiliza el Control de Acceso Basado en Roles (RBAC) para restringir el acceso en función de los roles de los usuarios.
- Activa las políticas de red para limitar el tráfico entre Pods.
- Actualiza regularmente Kubernetes y sus dependencias para parchear las vulnerabilidades de seguridad.
- Restringe el acceso a la API mediante mecanismos de autenticación y autorización.
- Utiliza Secretos para gestionar de forma segura datos sensibles como claves y credenciales API.
¿Cómo puedo controlar el rendimiento de mi clúster Kubernetes?
Puedes supervisar tu clúster utilizando herramientas como:
- Prometheus y Grafana - Recopila y visualiza métricas.
- Panel de control de Kubernetes - Una interfaz web para la gestión de clústeres.
- kubectl top - Proporciona el uso de CPU y memoria de Nodos y Pods.
- Soluciones de registro como Fluentd o Loki: centraliza los registros para solucionar problemas.
¿Cómo despliego una aplicación Kubernetes en un entorno de producción?
En producción, debes
- Utiliza un servicio gestionado de Kubernetes como AWS EKS, Azure AKS o Google GKE.
- Implementa el autoescalado con Horizontal Pod Autoscaler (HPA) y Cluster Autoscaler.
- Utiliza canalizaciones CI/CD (por ejemplo, GitHub Actions, ArgoCD o Jenkins) para despliegues automatizados.
- Protege tu clúster con buenas prácticas como RBAC, políticas de red y escaneado de imágenes.
- Monitoriza el clúster utilizando Prometheus, Loki o una solución de monitorización nativa de la nube.
Soy un Ingeniero de la Nube con una sólida base de Ingeniería Eléctrica, aprendizaje automático y programación. Mi carrera comenzó en visión por ordenador, centrándome en la clasificación de imágenes, antes de pasar a MLOps y DataOps. Me especializo en la creación de plataformas MLOps, el apoyo a los científicos de datos y la entrega de soluciones basadas en Kubernetes para agilizar los flujos de trabajo de aprendizaje automático.
¡Aprende más sobre Docker y Kubernetes con estos cursos!
curso
Introduction to Kubernetes
curso
Containerization and Virtualization Concepts
blog
Los 13 mejores proyectos de AWS: De principiante a profesional
tutorial
Introducción a k-Means Clustering con scikit-learn en Python
Kevin Babitz
21 min
tutorial
Cuentas de almacenamiento Azure: Tutorial paso a paso para principiantes

Anneleen Rummens
20 min
tutorial
Tutorial de K-Means Clustering en R

Eugenia Anello
17 min
tutorial
Cómo instalar y configurar MySQL en Docker
tutorial