Tolerancia a fallos

Si borramos un pods, se va a crear inmediatamente otro para que la aplicación siga funcionando:

$ oc get pods
NAME             READY     STATUS      RESTARTS   AGE
prueba-1-build   0/1       Completed   0          18m
prueba-1-n6lmz   1/1       Running     0          17m

$ oc delete pod/prueba-1-n6lmz
pod "prueba-1-n6lmz" deleted

$ oc get pods
NAME             READY     STATUS      RESTARTS   AGE
prueba-1-b4s25   1/1       Running     0          10s
prueba-1-build   0/1       Completed   0          18m

Escalabilidad

En cualquier momento se puede escalar de forma horizontal (crear más pods en un despliegue o eliminarlos) los pods de un despliegue. En todo momento las peticiones a nuestra aplicación se balancean entre los pods que tengamos ejecutando.

$ oc scale dc prueba --replicas=3
deploymentconfig.apps.openshift.io/prueba scaled

$ oc get pods -o wide
NAME             READY     STATUS      RESTARTS   AGE       IP               NODE                                          NOMINATED NODE
prueba-1-b4s25   1/1       Running     0          1m        10.130.22.98     ip-172-31-56-230.us-west-2.compute.internal   <none>
prueba-1-build   0/1       Completed   0          20m       10.129.115.115   ip-172-31-51-92.us-west-2.compute.internal    <none>
prueba-1-sghr9   1/1       Running     0          20s       10.128.27.215    ip-172-31-55-160.us-west-2.compute.internal   <none>
prueba-1-w4b4p   1/1       Running     0          20s       10.129.11.160    ip-172-31-52-89.us-west-2.compute.internal    <none>

Y comprobamos el balanceo de carga:

for i in `seq 1 100`; do curl http://prueba-miproyecto1.7e14.starter-us-west-2.openshiftapps.com/info.php; done
Servidor:prueba-1-sghr9
Servidor:prueba-1-w4b4p
Servidor:prueba-1-b4s25
...

Actualizaciones continúas

Modificamos el código de nuestra aplicación, y guardamos los cambios en el repositorio. Desde openshift realizamos un nuevo build, que construye una nueva imagen con la aplicación modificada:

$ oc start-build bc/prueba
build.build.openshift.io/prueba-2 started

$ oc get bc
NAME      TYPE      FROM      LATEST
prueba    Source    Git       2

A continuación, de forma automática, se realizará un nuevo deployment, que borrará los pods antiguos y creará nuevos desde la nueva versión de la imagen:

$ oc get dc
NAME      REVISION   DESIRED   CURRENT   TRIGGERED BY
prueba    2          3         2         config,image(prueba:latest)

Rollback de nuestra aplicación

Para volver a una versión anterior de nuestra aplicación:

$ oc rollout undo dc/prueba
deploymentconfig.apps.openshift.io/prueba rolled back

$ oc get dc
NAME      REVISION   DESIRED   CURRENT   TRIGGERED BY
prueba    3          3         1         config

Autoescalado

Para crear un autoescalado en un despliegue:

$ oc autoscale dc/prueba --min 1 --max 3 --cpu-percent=20
horizontalpodautoscaler.autoscaling/prueba autoscaled
    
$ oc get hpa
NAME      REFERENCE                 TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
prueba    DeploymentConfig/prueba   5%/20%    1         3         3          34s

$ oc describe hpa/prueba

Actualizado: