SlideShare una empresa de Scribd logo
1 de 35
Kubernetes para developers
D4I – Barcelona
Juan Manuel
Disruptive Lead
D4I - Industria
Lopez
Contactos
¿Que me gusta?
• Paradigmas de programación
• Arquitectura de desarrollo de
aplicaciones
• Técnicas avanzadas de
programación
• Una buena birra
Barcelona
juanmanulopez
Juan.manuel.lopez@everis.com
https://github.com/soyjuanmalopez
Contenedores
Docker
Los contenedores permiten empaquetar,
distribuir y ejecutar servicios de red con un
formato estándar con todas las
dependencias incluidas
Juan Manuel Lopez
5
Introducción a contenedores
Docker
Docker
6
• Son aplicaciones empaquetadas con todas sus dependencias
• Se pueden ejecutar en cualquier entorno (linux, windows, mac)
• Se descargan de forma automática si no están disponibles en el
sistema
• Sólo es necesario tener instalado Docker
– Sistemas operativos soportados
• Contenedores Linux.
– Más usados y más maduros
– En linux se ejecutan directamente por el
kernel
– En win y mac se ejecutan en máquinas
virtuales gestionadas por docker
• Contenedores Windows
– Menos usados y menos maduros
– Sólo se pueden ejecutar en windows server
Introduccion a contenedores
Docker
¿Qué es docker?
7
• Es una tecnología muy popular (aunque existen otras
tecnologías de contenedores)
• Inicialmente desarrollada para linux, aunque dispone de
herramientas para desarrolladores en windows y mac
• Existe un repositorio de imágenes (hub) con contenedores
públicos
Introducción a contenedores
Docker
¿Qué es docker?
8
• Imagen docker
– Plantilla para un contenedor
– Contiene las herramientas del SO (ubuntu, alpine), librerías
(Java) and la aplicación en sí (webapp.jar)
– Si se quiere arrancar un contenedor partiendo de una
imagen que no está disponible, se descarga
automáticamente de un registro
• Docker Registry
– Servicio remoto para subir y descargar imágenes
– Puede guardar varias versiones (tags) de la misma imagen
– Las versiones de una misma imagen se almacenan en un
mismo repositorio (como Git)
– Docker Hub es un registro público y gratuito
– Tu puedes tener tu repositorio privado
Concepto docker
Docker
Contenedores
9
• Contenedor Docker
– Representa la aplicación en ejecución
– Un contenedor se crea desde una imagen
– Si la aplicación escribe un fichero, el fichero queda dentro
del contenedor, no se modifica la imagen
– Los contenedores se pueden arrancar, pausar y parar
• Docker Engine
– Servicio local usado para gestionar docker
– Gestiona las imágenes (descarga, creación, subida, etc...)
– Gestiona los contenedores (arranque, parada, etc..)
– Se utiliza desde el cliente docker por línea de comandos o a
través de una API REST
Concepto docker
Docker
Contenedores
10
Construir una Imagen :)
Docker
Comandos para crear un contenedor
docker build . -t eu.gcr.io/juanmlopez/web-sologatos:v5
docker → comando de ejecucion
build → comando que indica que se tiene que construir
. → indica que el docker file se encuentra en donde me encuentro posicionado con la consola
- t → indica que ademas de builidar la imagen tengo que tagearla esto es colocarle una marca
eu.gcr.io → es la zona donde se encuentra el proyecto
juanmlopez → es el nombre del poryecto en el cloud es el identificador de nuestro repositorio de imagenes
Web-sologatos --> es el nombre de la imagen
v5 es la version que le damos a la imagen en caso que no coloquemos nada por defecto se tagea en latest
docker push eu.gcr.io/juanmlopez/web-sologatos:v5
Git Frendly :)
11
Comandos en docker
Docker
Iniciar un contenedor
• Para ejecutar un contenedor es necesario tener una imagen en la máquina
• Las imágenes se descargan de un docker registry (registro)
• Cada registro tiene un repositorio por cada imagen con múltiples versiones (tags)
• DockerHub es un registro gratuito en el que cualquiera puede subir imágenes públicas
12
docker run --name custom_name -e AUTHOR="Your Name" -d -p 9000:80 seqvence/static-site
Networking Docker
Docker
Mas comandos de docker
--name custom-name
Nombre del contenedor
-e AUTHOR="Your Name" Pasar variables de entorno a la
aplicación que se ejecuta en el contenedor
-d Ejecuta el contenedor
en segundo plano (no
bloquea la shell durante la
ejecución)
-p 9000:80
Conecta el host
port 9000 con el
Puerto 80 del
container
Kubernetes
13
“Kubernetes es casi todo lo que le
falta a docker para que salga a
producción”
Juan Manuel Lopez
Kubernetes
Introduccion Kubernetes
• Desarrollado inicialmente por Google (basado en
Borg)
• Es un software diferente a docker que tiene que
instalarse por separado
• Está desarrollado bajo la Cloud Native
Computing Fundation con múltiples miembros de
peso
Kubernetes
Introduccion Kubernetes
• Kubernetes es "un software Open Source para automatizar el despliegue, escalado y administración de aplicaciones en
contenedores“
• Conectar los contenedores a través de múltiples hosts, escalarlos cuando sea necesario, implementar aplicaciones sin tiempo de
inactividad y “service Discovery” entre otros, son desafíos realmente difíciles.
• Kubernetes aborda esos desafíos desde el principio con un conjunto de primitivos y una poderosa API.
• Usa docker internamente, pero también puede funcionar con otras tecnologías de contenedores como rkt, pero no son muy
maduras
Conceptos de
kubernetes
Componentes
16
17
Kubernetes
• Imagen
– A docker image built from a Dockerfile that contains everything
a service needs to run
Kubernetes
Definición de conceptos core de kubernetes
• Container
– A container runs a docker image
– Only 1 process can run inside of a container
• POD
– A group of 1 or more containers
– Same port space
– Ports are not accessible from outside of the pod
• Replica Set
– Defines and manages how many instances of a pod should run
• Service
– Makes a port of a pod accessible to other pods
• Ingress
– Makes a service accessible to the outside of Kubernetes
• Node
– A physical server / Containers get distributed automatically
• ConfigMap
– Configuration that can be mounted inside of a container
• Volumes
– Volumes can be mounted into a container to access a
ConfigMap, Secret or a folder on the host
• Namespace
– Used to group, separate, and isolate objects, for access control,
network access control, resource management, etc.
Kubernetes
Kubernetes
18
Kubernetes Physical Architecture
Kubernetes
Kubernetes
19
Deployment Arquitecture
Un deployment es un contrato donde se indica la configuración y requerimientos
para hacer funcionar nuestras imágenes. Para ello debemos tener en cuenta
varios elementos.
Kubernetes
Manifiesto
20
Deployment file
Kubernetes
21
Deployment Arquitecture
apiVersion: extensions/v1beta1
kind: "Deployment"
metadata:
name: "client-api"
namespace: "singapur-pro"
labels:
app: "client-api"
spec:
replicas: 2
selector:
matchLabels:
app: "client-api"
template:
metadata:
labels:
app: "client-api"
spec:
containers:
# [START esp]
- name: esp
image: "gcr.io/endpoints-release/endpoints-runtime:1"
args: [
"--http_port=8081",
"--backend=127.0.0.1:8002",
"--service=client.endpoints.leroy-merlin-plataforma-sp-pro.cloud.goog",
"--rollout_strategy=managed",
]
# [END esp]
En el deployment file se indican las
configuraciones necesarias, como por
ejemplo la cantidad de pods replicados (2 en
este caso), las necesidades y restricciones de
memoria…
Deployment Kubernetes
Kubernetes
22
• Deployment
– Despliegue de uno o varios réplicas de un pod
kubectl create deployment web-gatos --image=eu.gcr.io/juanmlopez/web-gatos -- namespace=demo
– Consultar Deployment
kubectl get deployments
– Borrar deployments
kubectl delete deployment web-gatos -–namespace=demo
Comando básicos de deployment
Deployment Kubernetes
Kubernetes
23
Comando básicos
Servicios
Cada pod dispone de una IP, pero los pods pueden morir (con crash) y al volver a arrancar tienen otra IP
Un servicio crea un nombre lógico asociado a los pods de un Deployment
Permite que el pod o los pods sean
• Accesibles desde dentro del cluster con un nombre de DNS
• Accesibles desde fuera del cluster (con el tipo apropiado despliegue de uno o varios réplicas de un pod)
Crear un Servicio
kubectl expose deployment kubernetes-bootcamp --type=NodePort --port=8080
Consultar servicio
kubectl get services –namespace=demo
Información de un servicio en concreto
kubectl describe services/kubernetes-bootcam
Borrado de servicio
kubectl delete service kubernetes-bootcamp
Deployment Kubernetes
Kubernetes
24
• Existen diferentes tipos de servicios con diferentes técnicas de exportación
• Algunas sólo tienen sentido en un proveedor cloud
• Otras necesitan de un servidor DNS porque se accede por nombre
Cluster IP ---------> Node Port -----------> Load Balancer ---------> External name
https://medium.com/google-cloud/kubernetes-nodeport-vs-loadbalancer-vs-ingress-when-should-i-use-
what-922f010849e0
Servicios
Deployment Kubernetes
Kubernetes
25
Tipos de servicios
Cluster IP
Expone el servicio en una IP virtual y nombre DNS usable
únicamente desde el cluster
NodePort
Expone el servicio en cada nodo del cluster usando su IP pública y
un puerto igual en todos los nodos
Se crea automáticamente también un ClusterIP
LoadBalancer
Crea un balanceador en el proveedor cloud para publicar el servicio
Internamente se crea un NodePort y por tanto un ClusterIP
En AWS se genera un nombre DNS para el servicio, en Google Cloud se usa IP pública
ExternalName
Se usa para crear un nombre interno que apunta a un servicio
externo al cluster
Deployment Kubernetes
Kubernetes
26
Replicas
Cluster IP
Desplegar varios contenedores permite escalar horizontalmente porque cada contendor puede ejecutarse en una máquina
del cluster
En el deployment se puede indicar el número de réplicas
kubectl create deployment kubernetes-bootcamp --image=jocatalin/kubernetes-bootcamp:v1
kubectl scale deployment/kubernetes-bootcamp --replicas=2
Cada pod tiene su propia IP
kubectl describe pod webgatos2-574465c7db-wjzf9 | grep IP | sed –E 's/IP:[[:space:]]+//'
• Si un deployment tiene asociado un servicio, cuando se accede al servicio (por IP o nombre DNS) se hace balanceo de carga
entre todos las réplicas (pods)
• Por defecto el balanceo es RoundRobin
27
Manifest Kubernetes
Kubernetes
28
Replicas
Specs (Especificaciones)
Crear los deployments y servicios por línea de comandos es
engorroso y propenso a errores
Además no permite tener la configuración de los recursos
bajo control de versiones
En general se utilizan ficheros de descripción (llamados spec)
en formato YAML de los recursos
apiVersion: apps/v1
kind: Deployment
metadata:
name: webgatos-deploy
spec:
strategy:
type: Recreate
selector:
matchLabels:
app: webgatos
replicas: 1 # tells deployment to run 1 pods matching the template
template: # create pods using pod definition in this template
metadata:
labels:
app: webgatos
spec:
containers:
- name: webgatos
image: juanmlopez/webgatos:v2
ports:
- containerPort: 5000
Manifest Kubernetes
Kubernetes
29
Resource
Como hacemos para asignar los recursos a cada pods a cada
maquina?
Como hacemos para que los pods, sepan a que nodo caer?
Los cpus se manejan en cores, y luego se transpola a 1 core 1000
milicores
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: hello
spec:
replicas: 3
template:
metadata:
labels:
role: hello
spec:
containers:
- name: hello
image: gcr.io/google-samples/hello-app:1.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
env:
- name: MYSQL_ROOT_PASSWORD
value: "password"
resources:
requests:
memory: "64Mi"
cpu: "200m"
limits:
memory: "128Mi"
cpu: "500m"
Manifest Kubernetes
Kubernetes
30
Liveness and readiness
El detalle con que Kubernetes verifica que sus aplicaciones esten vivas “y
respondiendo” es exquisito en K8s que ademas haga una segunda
verificación y es que este “lista” o “no-lista” (on ready, not ready).
La diferencia es sutil sin embargo la utilidad es grandisima al tenerlos bien
configurados tienes:
• Alta disponibilidad
• Evitas aplicaciones erróneas
• Aseguras el reinicio automático de aplicaciones que fallen
El flujo es el siguiente:
• Si Readiness falla Kubernetes detiene el trafico hacia el “pod” que
falla de la aplicación
• Si Liveness falla Kubernetes reinicia el pod de la aplicación
• Si Readiness funciona Kubernetes restablece el tráfico hacia el
pod de la aplicación nuevamente
Configurar Deployment
Kubernetes
31
Configurando nuestras aplicaciones con variables de entorno
Para configurar las aplicaciones que vamos a desplegar usamos
variables de entorno, por ejemplo podemos ver las variables de entorno
que podemos definir para configurar la imagen docker de MariaDB.
Podemos definir un Deployment que defina un contenedor configurado
por medio de variables de entorno, mariadb-deployment.yaml:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: mariadb-deployment
labels:
app: mariadb
type: database
spec:
replicas: 1
template:
metadata:
labels:
app: mariadb
type: database
spec:
containers:
- name: mariadb
image: mariadb
ports:
- containerPort: 3306
name: db-port
env:
- name: MYSQL_ROOT_PASSWORD
value: my-password
Configurar Deployment
Kubernetes
32
ConfigMaps y Config Secrets
ConfigMap te permite definir un diccionario (clave,valor) para guardar información que puedes utilizar para configurar una aplicación.
Al crear un ConfigMap los valores se pueden indicar desde un directorio, un fichero o un literal.
kubectl create cm mariadb --from-literal=root_password=my-password 
--from-literal=mysql_usuario=usuario 
--from-literal=mysql_password=password-user 
--from-literal=basededatos=test
Configurar Deployment
Kubernetes
33
ConfigMaps
Ahora podemos configurar el fichero yaml que define el despliegue
…
containers:
- name: mariadb
image: mariadb
ports:
- containerPort: 3306
name: db-port
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
configMapKeyRef:
name: mariadb
key: root_password
- name: MYSQL_USER
valueFrom:
configMapKeyRef:
name: mariadb
key: mysql_usuario
- name: MYSQL_PASSWORD
valueFrom:
configMapKeyRef:
name: mariadb
key: mysql_password
- name: MYSQL_DATABASE
valueFrom:
configMapKeyRef:
name: mariadb
key: basededatos
Gateway
Kubernetes
34
ingress
kind: "Ingress"
metadata:
name: "ingress-np"
namespace: "demo"
annotations:
kubernetes.io/ingress.global-static-ip-name: "web-static-ip"
spec:
rules:
- http:
paths:
- path: /gatos
backend:
serviceName: webgatos-np
servicePort: 6000
- path: /perros
backend:
serviceName: webperros-np
servicePort: 6000
- host: vote.demo.juanmalopez.net
http:
paths:
- path: /
backend:
serviceName: vote-np
servicePort: 80
- host: result.demo.juanmalopez.net
http:
paths:
- path: /
backend:
serviceName: result-np
servicePort: 80
Game of pods - Kubernetes

Más contenido relacionado

La actualidad más candente

Vagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de usoVagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de usoSergio Zambrano Delfa
 
Docker - Sysmana 2014
Docker - Sysmana 2014Docker - Sysmana 2014
Docker - Sysmana 2014quaip
 
Docker introducción - Flisol 2015 Huancayo
Docker introducción - Flisol 2015 HuancayoDocker introducción - Flisol 2015 Huancayo
Docker introducción - Flisol 2015 HuancayoMario IC
 
Solapas principales Ver(solapa activa) Editar Gestionar present...
 Solapas principales      Ver(solapa activa)     Editar     Gestionar present... Solapas principales      Ver(solapa activa)     Editar     Gestionar present...
Solapas principales Ver(solapa activa) Editar Gestionar present...Software Guru
 
Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry
Docker Ecosystem: Engine, Compose, Machine, Swarm, RegistryDocker Ecosystem: Engine, Compose, Machine, Swarm, Registry
Docker Ecosystem: Engine, Compose, Machine, Swarm, RegistryMario IC
 
Presentación Docker
Presentación DockerPresentación Docker
Presentación DockerITPAMI
 
FROM lost to the Docker 2020
FROM lost to the Docker 2020FROM lost to the Docker 2020
FROM lost to the Docker 2020BelnGonzlezGarca1
 
Orquestadores para las cuatro estaciones (swarm, kubernetes, mesos y rancher)
Orquestadores para las cuatro estaciones (swarm, kubernetes, mesos y rancher)Orquestadores para las cuatro estaciones (swarm, kubernetes, mesos y rancher)
Orquestadores para las cuatro estaciones (swarm, kubernetes, mesos y rancher)Adrian Garcia Casas
 
Docker 101 Workshop - WomenWhoCode Buenos Aires
Docker 101 Workshop - WomenWhoCode Buenos AiresDocker 101 Workshop - WomenWhoCode Buenos Aires
Docker 101 Workshop - WomenWhoCode Buenos AiresBel Rey
 
Docker como la máxima expresión de Devops - WISIT 2015
Docker como la máxima expresión de Devops - WISIT 2015Docker como la máxima expresión de Devops - WISIT 2015
Docker como la máxima expresión de Devops - WISIT 2015Gustavo Andres Brey
 
Curso Kubernetes CodeURJC
Curso Kubernetes CodeURJCCurso Kubernetes CodeURJC
Curso Kubernetes CodeURJCMicael Gallego
 

La actualidad más candente (20)

Vagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de usoVagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de uso
 
Contenedores como Servicio con Docker
Contenedores como Servicio con DockerContenedores como Servicio con Docker
Contenedores como Servicio con Docker
 
Docker - Sysmana 2014
Docker - Sysmana 2014Docker - Sysmana 2014
Docker - Sysmana 2014
 
Docker introducción - Flisol 2015 Huancayo
Docker introducción - Flisol 2015 HuancayoDocker introducción - Flisol 2015 Huancayo
Docker introducción - Flisol 2015 Huancayo
 
Presentación Docker
Presentación DockerPresentación Docker
Presentación Docker
 
Docker containers-itb-2021
Docker containers-itb-2021Docker containers-itb-2021
Docker containers-itb-2021
 
Introduction to docker. Stratio
Introduction to docker. StratioIntroduction to docker. Stratio
Introduction to docker. Stratio
 
Solapas principales Ver(solapa activa) Editar Gestionar present...
 Solapas principales      Ver(solapa activa)     Editar     Gestionar present... Solapas principales      Ver(solapa activa)     Editar     Gestionar present...
Solapas principales Ver(solapa activa) Editar Gestionar present...
 
Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry
Docker Ecosystem: Engine, Compose, Machine, Swarm, RegistryDocker Ecosystem: Engine, Compose, Machine, Swarm, Registry
Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry
 
Docker y PostgreSQL
Docker y PostgreSQLDocker y PostgreSQL
Docker y PostgreSQL
 
Introduccion A Docker
Introduccion A DockerIntroduccion A Docker
Introduccion A Docker
 
Conceptos avanzados en docker
Conceptos avanzados en dockerConceptos avanzados en docker
Conceptos avanzados en docker
 
Presentación Docker
Presentación DockerPresentación Docker
Presentación Docker
 
FROM lost to the Docker 2020
FROM lost to the Docker 2020FROM lost to the Docker 2020
FROM lost to the Docker 2020
 
Introducción a Docker
Introducción a DockerIntroducción a Docker
Introducción a Docker
 
Taller docker _es-cl
Taller docker _es-clTaller docker _es-cl
Taller docker _es-cl
 
Orquestadores para las cuatro estaciones (swarm, kubernetes, mesos y rancher)
Orquestadores para las cuatro estaciones (swarm, kubernetes, mesos y rancher)Orquestadores para las cuatro estaciones (swarm, kubernetes, mesos y rancher)
Orquestadores para las cuatro estaciones (swarm, kubernetes, mesos y rancher)
 
Docker 101 Workshop - WomenWhoCode Buenos Aires
Docker 101 Workshop - WomenWhoCode Buenos AiresDocker 101 Workshop - WomenWhoCode Buenos Aires
Docker 101 Workshop - WomenWhoCode Buenos Aires
 
Docker como la máxima expresión de Devops - WISIT 2015
Docker como la máxima expresión de Devops - WISIT 2015Docker como la máxima expresión de Devops - WISIT 2015
Docker como la máxima expresión de Devops - WISIT 2015
 
Curso Kubernetes CodeURJC
Curso Kubernetes CodeURJCCurso Kubernetes CodeURJC
Curso Kubernetes CodeURJC
 

Similar a Game of pods - Kubernetes

Docker para Data Scientist - Master en Data Science URJC
Docker para Data Scientist - Master en Data Science URJCDocker para Data Scientist - Master en Data Science URJC
Docker para Data Scientist - Master en Data Science URJCMicael Gallego
 
Docker 10 02_18
Docker 10 02_18Docker 10 02_18
Docker 10 02_18enyert
 
administracion de sistemas de informacion
administracion de sistemas de informacionadministracion de sistemas de informacion
administracion de sistemas de informacionStivenLopez46
 
Docker orientado al desarrollo de aplicaciones con NodeJS
Docker orientado al desarrollo de aplicaciones con NodeJSDocker orientado al desarrollo de aplicaciones con NodeJS
Docker orientado al desarrollo de aplicaciones con NodeJSJan Sanchez
 
Jenkins Peru Meetup Docker Ecosystem
Jenkins Peru Meetup Docker EcosystemJenkins Peru Meetup Docker Ecosystem
Jenkins Peru Meetup Docker EcosystemMario IC
 
Iniciando con containers en azure
Iniciando con containers en azureIniciando con containers en azure
Iniciando con containers en azureOscar Gensollen
 
Introduccion a SQL Server 2017 en Docker
Introduccion a SQL Server 2017 en Docker Introduccion a SQL Server 2017 en Docker
Introduccion a SQL Server 2017 en Docker Eduardo Castro
 
Microservices: Ya funciona en mi máquina… Y en producción, ¿qué?
Microservices: Ya funciona en mi máquina… Y en producción, ¿qué?Microservices: Ya funciona en mi máquina… Y en producción, ¿qué?
Microservices: Ya funciona en mi máquina… Y en producción, ¿qué?Plain Concepts
 
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]Keopx
 
Docker Ecosystem - Part I - Engine
Docker Ecosystem - Part I - EngineDocker Ecosystem - Part I - Engine
Docker Ecosystem - Part I - EngineMario IC
 
Workshop 1 - Introducción a los Microservicios y Contenedores (@TechHub - Goo...
Workshop 1 - Introducción a los Microservicios y Contenedores (@TechHub - Goo...Workshop 1 - Introducción a los Microservicios y Contenedores (@TechHub - Goo...
Workshop 1 - Introducción a los Microservicios y Contenedores (@TechHub - Goo...Carlos Crisóstomo Vals
 
Docker para Dummies
Docker para DummiesDocker para Dummies
Docker para DummiesRaúl Unzué
 
Docker Compose para el Docker Lima Meetup Mayo
Docker Compose para el Docker Lima Meetup MayoDocker Compose para el Docker Lima Meetup Mayo
Docker Compose para el Docker Lima Meetup MayoMario IC
 
Docker y kubernetes para desarrolladores .NET - Meetup Barcelona 2019
Docker y kubernetes para desarrolladores .NET - Meetup Barcelona 2019 Docker y kubernetes para desarrolladores .NET - Meetup Barcelona 2019
Docker y kubernetes para desarrolladores .NET - Meetup Barcelona 2019 Santi Macias Rodriguez
 
Docker y todo eso... más o menos
Docker y todo eso... más o menosDocker y todo eso... más o menos
Docker y todo eso... más o menosEduard Tomàs
 
Docker: de principante a pro
Docker: de principante a proDocker: de principante a pro
Docker: de principante a proPlain Concepts
 

Similar a Game of pods - Kubernetes (20)

Docker para Data Scientist - Master en Data Science URJC
Docker para Data Scientist - Master en Data Science URJCDocker para Data Scientist - Master en Data Science URJC
Docker para Data Scientist - Master en Data Science URJC
 
Curso gratuito de Docker
Curso gratuito de DockerCurso gratuito de Docker
Curso gratuito de Docker
 
Docker 10 02_18
Docker 10 02_18Docker 10 02_18
Docker 10 02_18
 
administracion de sistemas de informacion
administracion de sistemas de informacionadministracion de sistemas de informacion
administracion de sistemas de informacion
 
Jug málaga docker 101 - final
Jug málaga   docker 101 - finalJug málaga   docker 101 - final
Jug málaga docker 101 - final
 
Docker orientado al desarrollo de aplicaciones con NodeJS
Docker orientado al desarrollo de aplicaciones con NodeJSDocker orientado al desarrollo de aplicaciones con NodeJS
Docker orientado al desarrollo de aplicaciones con NodeJS
 
Jenkins Peru Meetup Docker Ecosystem
Jenkins Peru Meetup Docker EcosystemJenkins Peru Meetup Docker Ecosystem
Jenkins Peru Meetup Docker Ecosystem
 
Iniciando con containers en azure
Iniciando con containers en azureIniciando con containers en azure
Iniciando con containers en azure
 
Introduccion a SQL Server 2017 en Docker
Introduccion a SQL Server 2017 en Docker Introduccion a SQL Server 2017 en Docker
Introduccion a SQL Server 2017 en Docker
 
Microservices: Ya funciona en mi máquina… Y en producción, ¿qué?
Microservices: Ya funciona en mi máquina… Y en producción, ¿qué?Microservices: Ya funciona en mi máquina… Y en producción, ¿qué?
Microservices: Ya funciona en mi máquina… Y en producción, ¿qué?
 
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
 
Docker Ecosystem - Part I - Engine
Docker Ecosystem - Part I - EngineDocker Ecosystem - Part I - Engine
Docker Ecosystem - Part I - Engine
 
Workshop 1 - Introducción a los Microservicios y Contenedores (@TechHub - Goo...
Workshop 1 - Introducción a los Microservicios y Contenedores (@TechHub - Goo...Workshop 1 - Introducción a los Microservicios y Contenedores (@TechHub - Goo...
Workshop 1 - Introducción a los Microservicios y Contenedores (@TechHub - Goo...
 
Docker para Dummies
Docker para DummiesDocker para Dummies
Docker para Dummies
 
Docker Compose para el Docker Lima Meetup Mayo
Docker Compose para el Docker Lima Meetup MayoDocker Compose para el Docker Lima Meetup Mayo
Docker Compose para el Docker Lima Meetup Mayo
 
Docker and networking
Docker and networkingDocker and networking
Docker and networking
 
Taller girona
Taller gironaTaller girona
Taller girona
 
Docker y kubernetes para desarrolladores .NET - Meetup Barcelona 2019
Docker y kubernetes para desarrolladores .NET - Meetup Barcelona 2019 Docker y kubernetes para desarrolladores .NET - Meetup Barcelona 2019
Docker y kubernetes para desarrolladores .NET - Meetup Barcelona 2019
 
Docker y todo eso... más o menos
Docker y todo eso... más o menosDocker y todo eso... más o menos
Docker y todo eso... más o menos
 
Docker: de principante a pro
Docker: de principante a proDocker: de principante a pro
Docker: de principante a pro
 

Último

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
AVANCES TECNOLOGICOS DEL SIGLO XXI. 10-08..pptx
AVANCES TECNOLOGICOS  DEL SIGLO XXI. 10-08..pptxAVANCES TECNOLOGICOS  DEL SIGLO XXI. 10-08..pptx
AVANCES TECNOLOGICOS DEL SIGLO XXI. 10-08..pptxdulcemonterroza
 
Editorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdfEditorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdfYanitza28
 
Editorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdfEditorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdfYanitza28
 
10°8 - Avances tecnologicos del siglo XXI 10-8
10°8 - Avances tecnologicos del siglo XXI 10-810°8 - Avances tecnologicos del siglo XXI 10-8
10°8 - Avances tecnologicos del siglo XXI 10-8antoniopalmieriluna
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
Función del analizador léxico.pdf presentacion
Función del analizador léxico.pdf presentacionFunción del analizador léxico.pdf presentacion
Función del analizador léxico.pdf presentacionEmanuelMuoz11
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosJhonJairoRodriguezCe
 
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptxinfor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptxgustavovasquezv56
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
QUINTA SEXTA GENERACION de COMPUTADORAS
QUINTA  SEXTA GENERACION de COMPUTADORASQUINTA  SEXTA GENERACION de COMPUTADORAS
QUINTA SEXTA GENERACION de COMPUTADORASMarc Liust
 
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfpresentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfaxelv9257
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendidaLuis Francisco Reyes Aceves
 
presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...axelv9257
 

Último (18)

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
AVANCES TECNOLOGICOS DEL SIGLO XXI. 10-08..pptx
AVANCES TECNOLOGICOS  DEL SIGLO XXI. 10-08..pptxAVANCES TECNOLOGICOS  DEL SIGLO XXI. 10-08..pptx
AVANCES TECNOLOGICOS DEL SIGLO XXI. 10-08..pptx
 
Editorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdfEditorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdf
 
Editorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdfEditorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdf
 
10°8 - Avances tecnologicos del siglo XXI 10-8
10°8 - Avances tecnologicos del siglo XXI 10-810°8 - Avances tecnologicos del siglo XXI 10-8
10°8 - Avances tecnologicos del siglo XXI 10-8
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
Función del analizador léxico.pdf presentacion
Función del analizador léxico.pdf presentacionFunción del analizador léxico.pdf presentacion
Función del analizador léxico.pdf presentacion
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptxinfor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
QUINTA SEXTA GENERACION de COMPUTADORAS
QUINTA  SEXTA GENERACION de COMPUTADORASQUINTA  SEXTA GENERACION de COMPUTADORAS
QUINTA SEXTA GENERACION de COMPUTADORAS
 
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfpresentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida
 
presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...
 

Game of pods - Kubernetes

  • 2.
  • 3. Juan Manuel Disruptive Lead D4I - Industria Lopez Contactos ¿Que me gusta? • Paradigmas de programación • Arquitectura de desarrollo de aplicaciones • Técnicas avanzadas de programación • Una buena birra Barcelona juanmanulopez Juan.manuel.lopez@everis.com https://github.com/soyjuanmalopez
  • 5. Los contenedores permiten empaquetar, distribuir y ejecutar servicios de red con un formato estándar con todas las dependencias incluidas Juan Manuel Lopez 5 Introducción a contenedores Docker Docker
  • 6. 6 • Son aplicaciones empaquetadas con todas sus dependencias • Se pueden ejecutar en cualquier entorno (linux, windows, mac) • Se descargan de forma automática si no están disponibles en el sistema • Sólo es necesario tener instalado Docker – Sistemas operativos soportados • Contenedores Linux. – Más usados y más maduros – En linux se ejecutan directamente por el kernel – En win y mac se ejecutan en máquinas virtuales gestionadas por docker • Contenedores Windows – Menos usados y menos maduros – Sólo se pueden ejecutar en windows server Introduccion a contenedores Docker ¿Qué es docker?
  • 7. 7 • Es una tecnología muy popular (aunque existen otras tecnologías de contenedores) • Inicialmente desarrollada para linux, aunque dispone de herramientas para desarrolladores en windows y mac • Existe un repositorio de imágenes (hub) con contenedores públicos Introducción a contenedores Docker ¿Qué es docker?
  • 8. 8 • Imagen docker – Plantilla para un contenedor – Contiene las herramientas del SO (ubuntu, alpine), librerías (Java) and la aplicación en sí (webapp.jar) – Si se quiere arrancar un contenedor partiendo de una imagen que no está disponible, se descarga automáticamente de un registro • Docker Registry – Servicio remoto para subir y descargar imágenes – Puede guardar varias versiones (tags) de la misma imagen – Las versiones de una misma imagen se almacenan en un mismo repositorio (como Git) – Docker Hub es un registro público y gratuito – Tu puedes tener tu repositorio privado Concepto docker Docker Contenedores
  • 9. 9 • Contenedor Docker – Representa la aplicación en ejecución – Un contenedor se crea desde una imagen – Si la aplicación escribe un fichero, el fichero queda dentro del contenedor, no se modifica la imagen – Los contenedores se pueden arrancar, pausar y parar • Docker Engine – Servicio local usado para gestionar docker – Gestiona las imágenes (descarga, creación, subida, etc...) – Gestiona los contenedores (arranque, parada, etc..) – Se utiliza desde el cliente docker por línea de comandos o a través de una API REST Concepto docker Docker Contenedores
  • 10. 10 Construir una Imagen :) Docker Comandos para crear un contenedor docker build . -t eu.gcr.io/juanmlopez/web-sologatos:v5 docker → comando de ejecucion build → comando que indica que se tiene que construir . → indica que el docker file se encuentra en donde me encuentro posicionado con la consola - t → indica que ademas de builidar la imagen tengo que tagearla esto es colocarle una marca eu.gcr.io → es la zona donde se encuentra el proyecto juanmlopez → es el nombre del poryecto en el cloud es el identificador de nuestro repositorio de imagenes Web-sologatos --> es el nombre de la imagen v5 es la version que le damos a la imagen en caso que no coloquemos nada por defecto se tagea en latest docker push eu.gcr.io/juanmlopez/web-sologatos:v5 Git Frendly :)
  • 11. 11 Comandos en docker Docker Iniciar un contenedor • Para ejecutar un contenedor es necesario tener una imagen en la máquina • Las imágenes se descargan de un docker registry (registro) • Cada registro tiene un repositorio por cada imagen con múltiples versiones (tags) • DockerHub es un registro gratuito en el que cualquiera puede subir imágenes públicas
  • 12. 12 docker run --name custom_name -e AUTHOR="Your Name" -d -p 9000:80 seqvence/static-site Networking Docker Docker Mas comandos de docker --name custom-name Nombre del contenedor -e AUTHOR="Your Name" Pasar variables de entorno a la aplicación que se ejecuta en el contenedor -d Ejecuta el contenedor en segundo plano (no bloquea la shell durante la ejecución) -p 9000:80 Conecta el host port 9000 con el Puerto 80 del container
  • 13. Kubernetes 13 “Kubernetes es casi todo lo que le falta a docker para que salga a producción” Juan Manuel Lopez
  • 14. Kubernetes Introduccion Kubernetes • Desarrollado inicialmente por Google (basado en Borg) • Es un software diferente a docker que tiene que instalarse por separado • Está desarrollado bajo la Cloud Native Computing Fundation con múltiples miembros de peso
  • 15. Kubernetes Introduccion Kubernetes • Kubernetes es "un software Open Source para automatizar el despliegue, escalado y administración de aplicaciones en contenedores“ • Conectar los contenedores a través de múltiples hosts, escalarlos cuando sea necesario, implementar aplicaciones sin tiempo de inactividad y “service Discovery” entre otros, son desafíos realmente difíciles. • Kubernetes aborda esos desafíos desde el principio con un conjunto de primitivos y una poderosa API. • Usa docker internamente, pero también puede funcionar con otras tecnologías de contenedores como rkt, pero no son muy maduras
  • 17. 17 Kubernetes • Imagen – A docker image built from a Dockerfile that contains everything a service needs to run Kubernetes Definición de conceptos core de kubernetes • Container – A container runs a docker image – Only 1 process can run inside of a container • POD – A group of 1 or more containers – Same port space – Ports are not accessible from outside of the pod • Replica Set – Defines and manages how many instances of a pod should run • Service – Makes a port of a pod accessible to other pods • Ingress – Makes a service accessible to the outside of Kubernetes • Node – A physical server / Containers get distributed automatically • ConfigMap – Configuration that can be mounted inside of a container • Volumes – Volumes can be mounted into a container to access a ConfigMap, Secret or a folder on the host • Namespace – Used to group, separate, and isolate objects, for access control, network access control, resource management, etc.
  • 19. Kubernetes Kubernetes 19 Deployment Arquitecture Un deployment es un contrato donde se indica la configuración y requerimientos para hacer funcionar nuestras imágenes. Para ello debemos tener en cuenta varios elementos.
  • 21. Deployment file Kubernetes 21 Deployment Arquitecture apiVersion: extensions/v1beta1 kind: "Deployment" metadata: name: "client-api" namespace: "singapur-pro" labels: app: "client-api" spec: replicas: 2 selector: matchLabels: app: "client-api" template: metadata: labels: app: "client-api" spec: containers: # [START esp] - name: esp image: "gcr.io/endpoints-release/endpoints-runtime:1" args: [ "--http_port=8081", "--backend=127.0.0.1:8002", "--service=client.endpoints.leroy-merlin-plataforma-sp-pro.cloud.goog", "--rollout_strategy=managed", ] # [END esp] En el deployment file se indican las configuraciones necesarias, como por ejemplo la cantidad de pods replicados (2 en este caso), las necesidades y restricciones de memoria…
  • 22. Deployment Kubernetes Kubernetes 22 • Deployment – Despliegue de uno o varios réplicas de un pod kubectl create deployment web-gatos --image=eu.gcr.io/juanmlopez/web-gatos -- namespace=demo – Consultar Deployment kubectl get deployments – Borrar deployments kubectl delete deployment web-gatos -–namespace=demo Comando básicos de deployment
  • 23. Deployment Kubernetes Kubernetes 23 Comando básicos Servicios Cada pod dispone de una IP, pero los pods pueden morir (con crash) y al volver a arrancar tienen otra IP Un servicio crea un nombre lógico asociado a los pods de un Deployment Permite que el pod o los pods sean • Accesibles desde dentro del cluster con un nombre de DNS • Accesibles desde fuera del cluster (con el tipo apropiado despliegue de uno o varios réplicas de un pod) Crear un Servicio kubectl expose deployment kubernetes-bootcamp --type=NodePort --port=8080 Consultar servicio kubectl get services –namespace=demo Información de un servicio en concreto kubectl describe services/kubernetes-bootcam Borrado de servicio kubectl delete service kubernetes-bootcamp
  • 24. Deployment Kubernetes Kubernetes 24 • Existen diferentes tipos de servicios con diferentes técnicas de exportación • Algunas sólo tienen sentido en un proveedor cloud • Otras necesitan de un servidor DNS porque se accede por nombre Cluster IP ---------> Node Port -----------> Load Balancer ---------> External name https://medium.com/google-cloud/kubernetes-nodeport-vs-loadbalancer-vs-ingress-when-should-i-use- what-922f010849e0 Servicios
  • 25. Deployment Kubernetes Kubernetes 25 Tipos de servicios Cluster IP Expone el servicio en una IP virtual y nombre DNS usable únicamente desde el cluster NodePort Expone el servicio en cada nodo del cluster usando su IP pública y un puerto igual en todos los nodos Se crea automáticamente también un ClusterIP LoadBalancer Crea un balanceador en el proveedor cloud para publicar el servicio Internamente se crea un NodePort y por tanto un ClusterIP En AWS se genera un nombre DNS para el servicio, en Google Cloud se usa IP pública ExternalName Se usa para crear un nombre interno que apunta a un servicio externo al cluster
  • 26. Deployment Kubernetes Kubernetes 26 Replicas Cluster IP Desplegar varios contenedores permite escalar horizontalmente porque cada contendor puede ejecutarse en una máquina del cluster En el deployment se puede indicar el número de réplicas kubectl create deployment kubernetes-bootcamp --image=jocatalin/kubernetes-bootcamp:v1 kubectl scale deployment/kubernetes-bootcamp --replicas=2 Cada pod tiene su propia IP kubectl describe pod webgatos2-574465c7db-wjzf9 | grep IP | sed –E 's/IP:[[:space:]]+//' • Si un deployment tiene asociado un servicio, cuando se accede al servicio (por IP o nombre DNS) se hace balanceo de carga entre todos las réplicas (pods) • Por defecto el balanceo es RoundRobin
  • 27. 27
  • 28. Manifest Kubernetes Kubernetes 28 Replicas Specs (Especificaciones) Crear los deployments y servicios por línea de comandos es engorroso y propenso a errores Además no permite tener la configuración de los recursos bajo control de versiones En general se utilizan ficheros de descripción (llamados spec) en formato YAML de los recursos apiVersion: apps/v1 kind: Deployment metadata: name: webgatos-deploy spec: strategy: type: Recreate selector: matchLabels: app: webgatos replicas: 1 # tells deployment to run 1 pods matching the template template: # create pods using pod definition in this template metadata: labels: app: webgatos spec: containers: - name: webgatos image: juanmlopez/webgatos:v2 ports: - containerPort: 5000
  • 29. Manifest Kubernetes Kubernetes 29 Resource Como hacemos para asignar los recursos a cada pods a cada maquina? Como hacemos para que los pods, sepan a que nodo caer? Los cpus se manejan en cores, y luego se transpola a 1 core 1000 milicores apiVersion: extensions/v1beta1 kind: Deployment metadata: name: hello spec: replicas: 3 template: metadata: labels: role: hello spec: containers: - name: hello image: gcr.io/google-samples/hello-app:1.0 imagePullPolicy: IfNotPresent ports: - containerPort: 8080 env: - name: MYSQL_ROOT_PASSWORD value: "password" resources: requests: memory: "64Mi" cpu: "200m" limits: memory: "128Mi" cpu: "500m"
  • 30. Manifest Kubernetes Kubernetes 30 Liveness and readiness El detalle con que Kubernetes verifica que sus aplicaciones esten vivas “y respondiendo” es exquisito en K8s que ademas haga una segunda verificación y es que este “lista” o “no-lista” (on ready, not ready). La diferencia es sutil sin embargo la utilidad es grandisima al tenerlos bien configurados tienes: • Alta disponibilidad • Evitas aplicaciones erróneas • Aseguras el reinicio automático de aplicaciones que fallen El flujo es el siguiente: • Si Readiness falla Kubernetes detiene el trafico hacia el “pod” que falla de la aplicación • Si Liveness falla Kubernetes reinicia el pod de la aplicación • Si Readiness funciona Kubernetes restablece el tráfico hacia el pod de la aplicación nuevamente
  • 31. Configurar Deployment Kubernetes 31 Configurando nuestras aplicaciones con variables de entorno Para configurar las aplicaciones que vamos a desplegar usamos variables de entorno, por ejemplo podemos ver las variables de entorno que podemos definir para configurar la imagen docker de MariaDB. Podemos definir un Deployment que defina un contenedor configurado por medio de variables de entorno, mariadb-deployment.yaml: apiVersion: apps/v1beta1 kind: Deployment metadata: name: mariadb-deployment labels: app: mariadb type: database spec: replicas: 1 template: metadata: labels: app: mariadb type: database spec: containers: - name: mariadb image: mariadb ports: - containerPort: 3306 name: db-port env: - name: MYSQL_ROOT_PASSWORD value: my-password
  • 32. Configurar Deployment Kubernetes 32 ConfigMaps y Config Secrets ConfigMap te permite definir un diccionario (clave,valor) para guardar información que puedes utilizar para configurar una aplicación. Al crear un ConfigMap los valores se pueden indicar desde un directorio, un fichero o un literal. kubectl create cm mariadb --from-literal=root_password=my-password --from-literal=mysql_usuario=usuario --from-literal=mysql_password=password-user --from-literal=basededatos=test
  • 33. Configurar Deployment Kubernetes 33 ConfigMaps Ahora podemos configurar el fichero yaml que define el despliegue … containers: - name: mariadb image: mariadb ports: - containerPort: 3306 name: db-port env: - name: MYSQL_ROOT_PASSWORD valueFrom: configMapKeyRef: name: mariadb key: root_password - name: MYSQL_USER valueFrom: configMapKeyRef: name: mariadb key: mysql_usuario - name: MYSQL_PASSWORD valueFrom: configMapKeyRef: name: mariadb key: mysql_password - name: MYSQL_DATABASE valueFrom: configMapKeyRef: name: mariadb key: basededatos
  • 34. Gateway Kubernetes 34 ingress kind: "Ingress" metadata: name: "ingress-np" namespace: "demo" annotations: kubernetes.io/ingress.global-static-ip-name: "web-static-ip" spec: rules: - http: paths: - path: /gatos backend: serviceName: webgatos-np servicePort: 6000 - path: /perros backend: serviceName: webperros-np servicePort: 6000 - host: vote.demo.juanmalopez.net http: paths: - path: / backend: serviceName: vote-np servicePort: 80 - host: result.demo.juanmalopez.net http: paths: - path: / backend: serviceName: result-np servicePort: 80