No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Curso de Kubernetes

Curso de Kubernetes

Marcos Lilljedahl

Marcos Lilljedahl

Despliegues controlados

22/33
Recursos

Aportes 23

Preguntas 2

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Como usar la estrategia de rolling upgrades para desplegar nuevas versiones, minimizando el impacto a nuestros usuarios:
Kubectl get deploy 鈥搊 json: el output de todos los deployments que tenemos en nuestro sitio
Kubectl get deploy 鈥搊 json | jq 鈥渰name:.metadata.name} + .spec.strategy.rollingUpdate": itera sobre los 铆tems y trae de la metadata la estrategia del rollingupdate default.
Esto va a mostrar los diferentes servicios.
MAX SURGE: cuantos pods se crean a partir de los que tengo, o sea que si hay 100 hasta 25 pods pueden estar cre谩ndose al mismo momento por default
MAX UNAVAILABLE: a lo sumo puede haber, en un determinado momento del deploy, un 25% de mis pods no disponibles por default.

Hacemos el rolling upgrade de la aplicaci贸n:
kubectl set image deploy worker worker=dockercoins/worker:v0.2
Cambiamos la imagen del deploy y le decimos que worker tenga la imagen dockercoins/worker:0.2

Si le mandamos una imagen que no existe o est谩 rota, va a mantener un minimo de 25% de los nodos trabajando como antes y asi no interrumpir el funcionamiento del servicio.
Con kubectl rollout undo deploy worker hacemos un rollback a la versi贸n anterior.

Para cambiar la estrategia de deployment: Kubectl edit deploy worker
Si pongo maxsurge en 1, solo se va a crear como maximo un pod nuevo por cada nuevo deployment. Si pongo maxunavailable en 0, no van a haber pods unavailables a la hora de hacer deployments. Esta estrategia es bastante conservadora: quiero crear de a uno y hasta que ese no este disponible, no cambiar nada.

Minuto 2:10 del v铆deo.

Primero instala jq, es un procesador JSON de l铆nea de comandos ligero y flexible.

$ sudo apt-get install jq -y

Despu茅s, deber铆an poder ejecutar este comando sin problemas:

$ kubectl get deploy -o json | jq ".items[] | {name:.metadata.name} + .spec.strategy.rollingUpdate"

Pregunta de examen [Platzi & K8s]:

maxSurge: es un campo opcional que indica el n煤mero m谩ximo de Pods que pueden crearse por encima del numero deseado de Pods, si tengo 100 Pods y se empieza a actualizar con un 25%, puedo tener en un momento hasta 125 Pods (25 Pods eliminandose y/o 25 Pods creandose y 75 Pods normales).

maxUnavailable: es un campo opcional que indica el n煤mero m谩ximo de Pods que pueden no estar disponibles durante el proceso de actualizaci贸n (valor = int | %, if n=0 then n=25%) si tengo 100 Pods, y se empieza a actualizar la aplicaci贸n, con un 25%, tendr茅 75% de los Pods siempre funcionando. (25 Pods no disponibles)

Por lo tanto, si se combinan maxSurge y maxUnavailable, siempre se tendr谩n 50 Pods disponibles (50% de disponibilidad).

https://kubernetes.io/es/docs/concepts/workloads/controllers/deployment/#despliegue-mediante-actualizaci贸n-continua
.
Buena Pr谩ctica: Siempre al hacer un cambio o actualizaci贸n en un Cluster, verificar que todos los Pods est茅n en su estado deseado (RUNNING) de lo contrario, es mejor hacer un RollOut y corregir el problema anterior.

ADMINISTRANDO DESPLIEGUES

#Ver deployments
kubectl get deploy -o json

#Actualizar imagen 
kubectl set image deploy <name> worker=<image>:<tag>

#ver deploys
kubectl get replicasets -w

#Editar deploy en tiempo de ejecuccion
kubectl edit deploy <name>

#Realizar en caso de falla
kubectl rollout undo deploy <name>

Esta clase es muy buena! Gracias Marcos por esta clase y por el curso, eres un crack! 馃槈
Saludos desde Espa帽a!

Caeria super bien una ruta de administracion de aplicaciones en Platzi que hable de estrategias avanzadas de k8s, openshift e Istio (Service Mesh). De cualquier forma este curso actual se ve muy bien. Gracias Marcos Lilljedahl!

que buena clase!

Despliegues Controlados

Es muy com煤n desplegar nuevas versiones en nuestros clusters, lo que se hace es generar una imagen de docker nueva con una nueva versi贸n de nuestro c贸digo o un feature nuevo o bugfix, por lo tanto es necesario llevar la nueva versi贸n a nuestro cluster de la manera m谩s fiel posible y si hay un error necesitamos de K8 nos ayude a evitar el despliegue sin tener una versi贸n completa, para poder hacer un rollback y minimizar el impacto a nuestros usuarios

A continuaci贸n se muestra la estrateg铆a rolling upgrates, que es el mecanismos que Kubernetes utiliza para actualizar nuestra aplicaci贸n usando los par谩metros maxSurge y maxUnavailable

Se listan los diferentes servicios que est谩n desplegados en nuestro cluster

En este ejemplo tenemos el servicio 鈥渉asher鈥, el maxUnavailable significa que a lo sumo puede haber un 25% en un determinado momento del deploy que nuestros nodos no est茅n disponibles, por lo tanto tendremos un 75% disponibles para responder al tr谩fico.
El maxSurge quiere decir cuantos Pods se crean a partir de los que tengo, es decir si tengo 100 Pods, hasta 25 se pueden estar creando a partir de los 100 que tengo

Para poder realizar el deploy se ejecuta el siguiente comando:
kubectl set image deploy <name> worker=<image>:<tag>
kubectl set image deploy worker worker=dockercoins/worker>v0.2
Posteriormente se puede visualizar los cambios a nivel de replica sets y servicios.

Si se desea realizar el cambio de la configuraci贸n del maxSurge o maxUnavalible se debe usar el siguiente comando:
kubectl edit deploy worker

Para volver nuestra imagen a su estado anterior podemos usar este comando:
kubectl rollout undo deploy worker

maxSurge y maxUnavailable

De las mejores clases del curso. 馃憤馃徎

kubectl get pods --selector=app=NAME
kubectl label pod NAME app- #eliminar un label de un pod 
kubectl get deploy -o json | jq ".items[] | {name:.metadata.name} + .spec.strategy.rollingUpdate"

kubectl get deploy -w
kubectl get replicaset -w
kubectl set image deploy NAME NAMEAPP=IMAGE:v2 ## deployar a una nueva imagen

kubectl rollout undo deploy NAME
kubectl edit deploy NAME
"name": "my-nginx"
"maxSurge": "25%"  #% max de pods creando
"maxUnavailable": "25%" #% max de pods no disponibles

Porque en el comando mostrado en el video el par谩metro para la imagen nueva se llama worker, cu谩l es su significado?

kubectl set image deploy worker -worker-=nombre_imagen

Max Unavailable
.spec.strategy.rollingUpdate.maxUnavailable is an optional field that specifies the maximum number of Pods that can be unavailable during the update process. The value can be an absolute number (for example, 5) or a percentage of desired Pods (for example, 10%). The absolute number is calculated from percentage by rounding down. The value cannot be 0 if .spec.strategy.rollingUpdate.maxSurge is 0. The default value is 25%.

Excelente clase 馃槂

capo !!! exceleten explicacion

maxUnavailable: m谩xima cantidad de pods no disponibles. (pods iniciando).
Ejemplo con maxUnavailable 25%:
De 100 pods, 25 est谩n inici谩ndose y los dem谩s est谩n disponibles.
maxSurge: Cu谩ntos pods puedo crear a partir de los que ya existen.
Ejemplo con maxSurge 25%:
De 100 pods, 25 pueden estar cre谩ndose al mismo tiempo

Los valores de maxUnavailable y maxSurge pueden ser en porcentajes o en cantidades enteras positivas.

<h1>Modificar la estrategia de rolling update</h1>
kubectl edit deploy worker
kubectl rollout status deployment worker 
kubectl get deploy -o json worker | jq "{name:.metadata.name} + .spec.strategy.rollingUpdate"

# Esta imagen no existe, permite observar el comportamiento de la estrategia de rolling update
kubectl set image deploy worker worker=dockercoins/worker:v0.3

kubectl rollout undo deploy worker
kubectl get pods

Muy 煤til los despliegues.

Les comparto algunas estrategias de deployment adicionales a rolling upgrade

Deployment Strategies

Max Surge
.spec.strategy.rollingUpdate.maxSurge is an optional field that specifies the maximum number of Pods that can be created over the desired number of Pods. The value can be an absolute number (for example, 5) or a percentage of desired Pods (for example, 10%). The value cannot be 0 if MaxUnavailable is 0. The absolute number is calculated from the percentage by rounding up. The default value is 25%.

To install JQ on WIndows: Use Chocolatey NuGet to install jq 1.5 with:

chocolatey install jq