2. Intro a 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.
• Un aspecto clave de Kubernetes es que se basa en 15 años de experiencia en
Google.
• La infraestructura de Google comenzó a alcanzar gran escala antes de que las
máquinas virtuales se volvieran omnipresentes en el centro de datos y los
contenedores proporcionaran una solución de grano fino para agrupar los clústeres
de manera eficiente.
• La eficiencia en el uso de clusters y la administración de aplicaciones distribuidas
ha estado en el centro de los desafíos de Google.
3. Origen
• En griego “κυβερνήτης”, significa el timonel o piloto de la
nave.
• Kubernetes es el piloto de un barco de contenedores.
• https://www.youtube.com/watch?v=4ht22ReBjno
4. Alternativas
•Docker Swarm es la solución de Docker Inc. Ha sido rediseñado
recientemente y está basado en SwarmKit. Está integrado con el
Docker Engine.
•Apache Mesos es un programador (scheduler) de centro de datos, que
puede ejecutar contenedores mediante el uso de diversos frameworks.
Marathon es el framework que le permite orquestar contenedores.
•Nomad de HashiCorp, los creadores de Vagrant y Consul, es otra
solución para administrar aplicaciones en contenedores. Nomad
programa (schedule) tareas definidas en trabajos. Tiene un controlador
Docker que le permite definir un contenedor en ejecución como una
tarea.
•Rancher es un sistema agnóstico de orquestador de contenedores,
que proporciona un panel único con interfaz para administrar
aplicaciones. Es compatible con Mesos, Swarm, Kubernetes, así como
su sistema nativo, Cattle.
5. Google y Kubernetes
•Lo que principalmente distingue a Kubernetes de otros es su herencia. Kubernetes está
inspirado en Borg, el sistema interno utilizado por Google para administrar sus
aplicaciones (por ejemplo, Gmail, Apps, GCE).
•Con Google vertiendo las valiosas lecciones que aprendieron al escribir y operar Borg
durante más de 15 años en Kubernetes, esto hace que Kubernetes sea una elección
segura cuando se tiene que decidir qué sistema usar para administrar los
contenedores.
•Cuando usamos Gmail, Google Docs, GCE o cualquier otro servicio de Google, se está
utilizando una aplicación en contenedor administrada por Borg en todo el mundo
•Borg fue un secreto de Google durante mucho tiempo, pero ya no.
•Borg es el sistema de orquestación para administrar todas las aplicaciones de Google
a escala.
•Borg finalmente fue descrito públicamente en 2015.
•Para obtener más información acerca de las ideas detrás de Kubernetes, se puede leer
este documento https://research.google.com/pubs/pub43438.html
6. Componentes de
Kubernetes
• El siguiente tweet de Julia Evans explica de forma sencilla
los distintos componentes de Kubernetes
• https://twitter.com/b0rk/status/872822361199972352
7.
8. Componentes
•Está formado por un administrador central (también conocido como
master) y algunos nodos worker.
•El administrador ejecuta un API server, un scheduler, un controller y
también un sistema de almacenamiento para mantener el estado
del clúster.
•Kubernetes expone una API (a través del API server): puede
comunicarse con la API usando un cliente local llamado kubectl.
•El scheduler ve las solicitudes de contenedores en ejecución que
llegan a la API y encuentra un nodo adecuado para ejecutar ese
contenedor.
•Cada nodo en el clúster ejecuta dos procesos: un kubelet y un
proxy de servicio. El kubelet recibe solicitudes para ejecutar los
contenedores y los vigila en el nodo local. El proxy crea y
administra reglas de red para exponer el contenedor en la red.
9. Caracteristicas
• Está formado de un administrador y un conjunto de nodos.
• Tiene un scheduler para colocar contenedores en un clúster.
• Tiene un API server y una capa de persistencia con etcd.
• Tiene un controller para conciliar estados.
• Se implementa en máquinas virtuales o máquinas bare
metal, en nubes públicas o on-premise.
• Está escrito en Go Lang.
10. Desarrollo de Kubernetes
• Google lo donó a la Cloud Native Computing Foundation
(CNCF) en Julio de 2015.
• La CNCF esta formada por muchas empresas.
• La CNCF posee los derechos reservados del desarrollo y
marcas registradas.
• Para contribuir con código, se debe firmar un acuerdo con
la CNCF
11. Componentes de la
arquitectura
• Master (Control plane)
• etcd cluster
• API server
• scheduler
• controller manager
• Worker (minion)
• kubelet
• proxy (kube-proxy)
• Container engine
• Network overlay (Opcional)
13. Nodos master
•El API server expone una interfaz REST a todos los recursos de
Kubernetes y es altamente configurable.
•La principal responsabilidad del scheduler es colocar los contenedores
en el nodo del clúster de acuerdo con diversas políticas, métricas y
requisitos de recursos. También se puede configurar mediante
indicadores de línea de comando.
•El Controller Manager es responsable de conciliar el estado real del
clúster con el estado deseado, tal como se especifica a través de la API.
Es un bucle de control que realiza acciones basadas en el estado
observado del clúster y el estado deseado. El controller manager también
es configurable.
•El nodo master se puede configurar en una configuración de múltiples
masters para alta disponibilidad. Los schedulers y los controller
managers pueden elegir un líder, mientras que los API servers pueden ser
elegidos por un balanceador de carga.
14. Nodos workers
• Ejecutan el kube-proxy y kubelet, así como Container
Engine (Docker Engine), pero soporta rkt.
• kubelet interactúa con el Container Engine también
instalado en todos los nodos y se asegura de que los
contenedores que necesitan ejecutarse se estén
ejecutando realmente.
• El kube-proxy está a cargo de administrar la conectividad
de la red a los contenedores.