Pods, ReplicaSets y Deployments
Clase 6 de 24 • Curso de Kubernetes
Resumen
¿Cómo acceder a los recursos en Kubernetes con Kubectl?
Cuando trabajamos con Kubernetes, el comando Kubectl
es nuestra puerta de entrada para interactuar con los recursos. Para comenzar, es fundamental ver cómo acceder a los pods:
- Obtener Pods: ejecuta
Kubectl get pods
. Si no especificas un name space, se utilizará el name space por defecto.
Ahora, ¿qué sabemos sobre los name spaces?
- Validar Name Spaces: usa
Kubectl get namespaces
para ver los espacios de nombre existentes, que incluyendefault
,kube-node-lease
,kube-public
, ykube-system
.
Estos name spaces, especialmente los que empiezan con kube
, son para uso interno de Kubernetes. Pero, si deseas crear nuevos name spaces:
- Crear Name Space: implementa
create namespace
o su forma cortacreate ns
.
¿Cómo gestionar pods eficientemente?
Al trabajar con pods, se manejan dos enfoques: imperativo y declarativo. Dichos enfoques ofrecen diferentes formas para crear y gestionar pods, y queremos compartir algunos ejemplos.
Enfoque imperativo con Kubectl
Para ilustrar la creación de pods de forma imperativa, utilizaremos comandos de la CLI (Interfaz de Línea de Comandos):
kubectl run nginx --image=nginx --restart=Never --port=80
Al ejecutar esto, Kubernetes asume varios parámetros por defecto, como dirección IP y el ID del contenedor. Posteriormente, validamos con:
- Describir un Pod:
Kubectl describe pod
. Aquí verás condiciones y estados del pod.
Enfoque declarativo con archivos YAML
Kubernetes también se puede manejar declarativamente con archivos YAML que detallan configuraciones específicas. Estos archivos son especialmente útiles para la automatización y la gestión de infraestructura como código.
¿Cómo escalar aplicaciones con réplica sets?
A medida que intentes escalar aplicaciones, los replica sets entran en juego. Estos se encargan de gestionar múltiples instancias de pods.
Creación de un replica set
Para crear un replica set, utiliza un archivo YAML con la siguiente estructura:
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: example-replicaset
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
Implementa con:
kubectl apply -f replicasets.yaml
Verificación y mantenimiento
- Observar Replica Sets:
Kubectl get replicasets
. - Eliminar un Pod: al borrarlo, la réplica set automáticamente creará uno nuevo para mantener el número deseado de réplicas.
¿Qué papel juegan los deployments en Kubernetes?
Los deployments actúan como la capa superior, gestionando replica sets y facilitando control sobre las aplicaciones.
Beneficios de un deployment
Un deployment permite:
- Actualización continua: implementar nuevas versiones sin interrumpir el servicio.
- Rollback automático: revertir actualizaciones fallidas.
Creación de un deployment
Utiliza el siguiente YAML:
apiVersion: apps/v1
kind: Deployment
metadata:
name: example-deployment
spec:
replicas: 4
selector:
matchLabels:
app: hello-app
template:
metadata:
labels:
app: hello-app
spec:
containers:
- name: hello-app
image: google-samples/hello-app:1.0
ports:
- containerPort: 8080
Implementa con:
kubectl apply -f deployment.yaml
Actualización de imágenes
Para actualizar la imagen a una versión más reciente, utiliza:
kubectl set image deployment/example-deployment hello-app=google-samples/hello-app:2.0
Validación y seguimiento
- Ver counter en deployments y replica sets:
Kubectl get deployments
yKubectl get replicasets
. - Deshacer actualizaciones:
kubectl rollout undo deployment/example-deployment
.
¿Cómo se expone el tráfico a Kubernetes?
Para gestionar el tráfico entre nuestra máquina local y los pods, se utilizan comandos de port-forward
:
kubectl port-forward deployment/example-deployment 8080:8080
Esto redirecciona el tráfico al puerto 8080 del deployment, permitiéndote verificar en el navegador con localhost:8080
.
Invito a todos a compartir qué les ha parecido este flujo de trabajo con Kubernetes y cómo podrían incorporarlo en sus proyectos futuros. Estos conocimientos son solo el comienzo para dominar el despliegue y gestión de aplicaciones en la nube.