¿Qué sucederá si desplegamos la aplicación con un despliegue y luego cambiamos la versión de la aplicación en el conjunto de réplicas?
sobes.tech AI
Respuesta de la IA
Después de cambiar la versión de la aplicación en el recurso Deployment, el ReplicaSet asociado a ese Deployment se actualizará. Deployment creará un nuevo ReplicaSet con la nueva versión de la imagen del contenedor. El ReplicaSet antiguo se escala gradualmente hacia abajo, y el nuevo ReplicaSet se escala hacia arriba. Este proceso se llama actualización continua (rolling update) y se realiza automáticamente por defecto.
Pasos específicos:
- El usuario o el sistema CI/CD actualiza el Deployment.
- Deployment crea un nuevo ReplicaSet con un spec que contiene la nueva versión de la imagen.
- El nuevo ReplicaSet comienza a crear pods con la nueva versión.
- Tan pronto como algunos de los nuevos pods pasen a estado
Ready, Deployment comienza a escalar hacia abajo el ReplicaSet antiguo, eliminando los pods con la versión anterior. - El proceso continúa hasta que todos los pods estén bajo el control del nuevo ReplicaSet con la nueva versión.
- El ReplicaSet antiguo permanece, pero con un número deseado de réplicas igual a 0.
Esto garantiza un tiempo de inactividad cero durante la actualización de la aplicación (siempre que haya recursos suficientes y los pods estén listos correctamente) y permite revertir fácilmente a la versión anterior simplemente actualizando el Deployment de nuevo.
Ejemplo de actualización del YAML del Deployment:
# Deployment YAML actualizado
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25% # Número máximo de pods que se pueden crear por encima del número deseado
maxUnavailable: 25% # Número máximo de pods que pueden estar no disponibles durante la actualización
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app-container
image: my-registry/my-app:v1.1.0 # Versión de la imagen modificada
ports:
- containerPort: 80
Cambiar manualmente el ReplicaSet es altamente desaconsejado y puede llevar a comportamientos impredecibles, ya que Deployment intentará ajustar el estado del ReplicaSet para que coincida con su estado deseado, sobrescribiendo tus cambios. Todos los cambios gestionados de la aplicación deben realizarse a través del recurso Deployment.