Introducción a Kubernetes

1

Todo lo que aprenderás sobre Kubernetes

2

Repaso de contenedores e introducción a k8s

3

De pods a contenedores

4

¿Cómo funciona la arquitectura de red de Kubernetes?

5

Modelos declarativos e imperativos

6

Visión general del modelo de red

7

Recomendaciones

8

Introducción a aplicación de prueba

9

Instalando nuestro primer cluster con Minikube, Kubeadm

10

Instalando nuestro primer cluster con Kubeadm

11

Desplegando el Cluster en AWS con EKS

12

Desplegando una aplicación de prueba con EKS

Primer contacto con un cluster de kubernetes

13

Usando kubectl

14

Creación y manejo de pods

15

Deployments y replica sets

Balanceo de carga y service discovery

16

Accediendo a nuestros PODS a través de servicios

17

Enrutando el tráfico utilizando servicios

18

Desplegando nuestra app en k8s

Escalando nuestra aplicación

19

Exponiendo servicios interna y externamente (kubectl-proxy)

20

Kubernetes dashboard

21

Balanceo de carga y Daemon sets

22

Despliegues controlados

23

Healthchecks

Optimizando el uso de nuestro cluster

24

Gestionar stacks con Helm

25

Gestionando la configuración aplicativas utilizando Config Maps

26

Volúmenes

Autorización y Namespaces

27

Introducción a namespaces

28

Despliegue múltiples instancias de la misma aplicación en un solo cluster.

29

Autenticación y autorización

30

Service account tokens

31

RBAC

Fin del curso

32

Recomendaciones para implementar Kubernetes en tu organización o proyectos

Bonus

33

Clase en vivo: workflows de Kubernetes usando git

Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Curso de Kubernetes

Curso de Kubernetes

Marcos Lilljedahl

Marcos Lilljedahl

Despliegues controlados

22/33
Recursos

Aportes 21

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Como usar la estrategia de rolling upgrades para desplegar nuevas versiones, minimizando el impacto a nuestros usuarios:
Kubectl get deploy –o json: el output de todos los deployments que tenemos en nuestro sitio
Kubectl get deploy –o 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.

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!

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

que buena clase!

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>

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