|
| 1 | + |
| 2 | +# Google Kubernetes Engine <!-- omit in toc --> |
| 3 | + |
| 4 | +## Tabla de Contenido<!-- omit in toc --> |
| 5 | +- [Introducción](#introducción) |
| 6 | + - [Contenedores](#contenedores) |
| 7 | + - [Docker](#docker) |
| 8 | + - [Comandos Básicos de Docker](#comandos-básicos-de-docker) |
| 9 | +- [Kubernetes conceptos básicos](#kubernetes-conceptos-básicos) |
| 10 | + - [Clúster y nodos](#clúster-y-nodos) |
| 11 | + - [Pods](#pods) |
| 12 | + - [Deployments](#deployments) |
| 13 | + - [Servicios](#servicios) |
| 14 | + - [Archivos descriptivos de infraestructura teoria y práctica](#archivos-descriptivos-de-infraestructura-teoria-y-práctica) |
| 15 | + - [Labels](#labels) |
| 16 | + - [Namespaces](#namespaces) |
| 17 | + - [Labels y Namespaces](#labels-y-namespaces) |
| 18 | + - [Deployment Avanzado (Blue-green y Canary Deployment)](#deployment-avanzado-blue-green-y-canary-deployment) |
| 19 | + - [Volumenes](#volumenes) |
| 20 | +- [Arquitecturas](#arquitecturas) |
| 21 | + - [Desplegar una aplicación Stateful](#desplegar-una-aplicación-stateful) |
| 22 | + |
| 23 | + |
| 24 | +# Introducción |
| 25 | + |
| 26 | +**Kubernetes Engine** es la solución administrada de Google en la plataforma de Google Cloud Platform. Su función es administrar el cluster de máquinas, la instalación de los clientes y todos los procesos para el despliegue de nuestras aplicaciones. Google se encarga de todo. |
| 27 | + |
| 28 | +[**Esta herramienta tiene las siguientes funcionalidades:**](https://cloud.google.com/kubernetes-engine/kubernetes-comic/) |
| 29 | + |
| 30 | +* **Formato Docker:** Nuestras máquinas y contenedores deben usar este formato para poder ser desplegadas. |
| 31 | +* **Auto-escalado:** La performance de nuestra aplicación no se verá afectada cuando entren muchísimos usuarios al mismo tiempo. Podrás soportar toda esta carga sin necesidad de generar tus máquinas virtuales a mano. |
| 32 | +* **Stackdriver:** La solución de monitoreo y control de Google. Nos ayuda a entender muy fácilmente qué está pasando en la infraestructura: logs, alertas, monitoreo de la CPU y la memoria, etc. |
| 33 | +* **Cloud VPN:** Nos permite tener una nube híbrida con la cual tendremos nuestros datos y aplicaciones segregados en la nube y utilizando información de nuestros servidores locales. Todos estos procesos de forma segura. |
| 34 | +* **Cloud IAM:** Administración de usuarios gracias al soporte de autenticación de Google. Podemos asignar permisos y roles de lectura, escritura y administración sobre nuestro cluster. |
| 35 | + |
| 36 | +**Ventajas de Kubernetes Engine:** |
| 37 | + |
| 38 | +Actualizaciones automáticas |
| 39 | +Reparación automática |
| 40 | +Registro privado de contenedores |
| 41 | +Versiones uniformes y rápidas |
| 42 | +Soporte para GPU |
| 43 | + |
| 44 | +**Alternativas:** |
| 45 | + |
| 46 | +Redhat Openshift |
| 47 | +Docker Swarm |
| 48 | +Amazon Elastic Container Service for Kubernetes |
| 49 | +IBM Cloud Kubernetes Service |
| 50 | +Azure Kubernetes Service (AKS) |
| 51 | + |
| 52 | +https://cloud.google.com/kubernetes-engine/kubernetes-comic/ |
| 53 | + |
| 54 | +<div align="center"> |
| 55 | + <img src="img/1.png"> |
| 56 | +</div> |
| 57 | + |
| 58 | +<div align="center"> |
| 59 | + <img src="img/2.png"> |
| 60 | +</div> |
| 61 | + |
| 62 | +## Contenedores |
| 63 | + |
| 64 | +El nombre de contenedores viene de los r**ecipientes de carga estandarizados que se utilizan en barcos**, camiones y trenes, que permiten cargar, descargar y apilar los containers durante largas distancias facilitando el transbordo de un medio de transporte a otro. |
| 65 | + |
| 66 | +Estos contenedores han supuesto una verdadera revolución en el mundo del transporte, reduciendo costes, tiempos de carga/descarga, daños en mercancías, etc. |
| 67 | + |
| 68 | +**Docker lleva este mismo concepto al mundo del software**, permitiendo encapsular cualquier arquitectura, convirtiéndola en un contenedor portable y autosuficiente, de forma que se pueda manipular mediante operaciones establecidas y ejecutar de manera consistente en cualquier hardware. |
| 69 | + |
| 70 | +<div align="center"> |
| 71 | + <img src="img/3.png"> |
| 72 | +</div> |
| 73 | + |
| 74 | +## Docker |
| 75 | + |
| 76 | +Docker es una tecnología open source, **desarrollada en el lenguaje de programación GO**, utilizando la licencia Apache 2.0 (podemos desplegar nuestra aplicación en cualquier servidor, sin que nuestro código fuente sea open source). |
| 77 | + |
| 78 | +Docker utiliza las características de los sistemas operativos tipo UNIX para administrar los contenedores y el despliegue de nuestras aplicaciones en el area de memoria del sistema operativo Linux. |
| 79 | + |
| 80 | +<div align="center"> |
| 81 | + <img src="img/4.png"> |
| 82 | +</div> |
| 83 | + |
| 84 | +<div align="center"> |
| 85 | + <img src="img/5.png"> |
| 86 | +</div> |
| 87 | + |
| 88 | +## Comandos Básicos de Docker |
| 89 | + |
| 90 | +**docker pull:** Descargar y guardar las imágenes de nuestra aplicación |
| 91 | +**docker images:** Listar las imágenes descargas en nuestra máquina |
| 92 | +**docker ps:** Listar los contenedores corriendo en nuestra máquina (id, puerto, etc) |
| 93 | +**docker ps -a:** Listar los contenedores apagados de nuestra máquina_ |
| 94 | +**docker exec:** Ingresar a nuestro contenedor y listar las carpetas dentro de el |
| 95 | +**docker stop:** Detener la ejecución de nuestro contenedor |
| 96 | +**docker rm:** Borrar nuestro contenedor |
| 97 | + |
| 98 | +# Kubernetes conceptos básicos |
| 99 | + |
| 100 | +## Clúster y nodos |
| 101 | + |
| 102 | +**Un cluster es una agrupación de máquinas que corren una cierta cantidad de servicios** para que nuestra aplicación pueda funcionar sobre Kubernetes. |
| 103 | + |
| 104 | +**El endpoint o nodo maestro es una máquina dentro de nuestro cluster**, es la puerta de entrada a todo el cluster. Tiene las APIs de Kubernetes, los servicios REST, el agendamiento de pods y la sincronización servicios. Tambien cuenta con integración a los servicios de Google Cloud Platform. |
| 105 | + |
| 106 | +**Un Nodo es un worker machine, osea, una maquina dentro de un cluster.** |
| 107 | + |
| 108 | +Esta máquina tiene todas las herramientas para el despliegue de nuestras aplicaciones. Puede ser una maquina virtual o una máquina física con todos los servicios necesarios para correr pods. |
| 109 | + |
| 110 | +Las direcciones, condiciones, capacidad e información de nuestros nodos se llaman estados y podemos acceder a ellos desde la terminal. |
| 111 | + |
| 112 | +## Pods |
| 113 | + |
| 114 | +> **Un pod es un conjunto de contenedores que se despliegan en nuestros nodos. Más adelante aprenderemos más a detalle cómo funcionan.** |
| 115 | +
|
| 116 | +<div align="center"> |
| 117 | + <img src="img/6.png"> |
| 118 | +</div> |
| 119 | + |
| 120 | +<div align="center"> |
| 121 | + <img src="img/7.png"> |
| 122 | +</div> |
| 123 | + |
| 124 | +## Deployments |
| 125 | + |
| 126 | +**Los deployments son una abstracción de nuestra aplicación** que nos permite crear una arquitectura e **indicar la cantidad de pods** que se van a necesitar. Con esto, haremos un despliegue de nuestra aplicación en nuestro cluster, tomando **la cantidad de pods y replicas** que indicamos previamente. |
| 127 | + |
| 128 | +<div align="center"> |
| 129 | + <img src="img/8.png"> |
| 130 | +</div> |
| 131 | + |
| 132 | +<div align="center"> |
| 133 | + <img src="img/9.png"> |
| 134 | +</div> |
| 135 | + |
| 136 | +https://kubernetes.io/docs/tutorials/kubernetes-basics/explore/explore-intro/ |
| 137 | + |
| 138 | +## Servicios |
| 139 | + |
| 140 | +Los servicios **nos permiten ingresar tráfico y conectar los diferentes servicios de nuestra aplicación.** Los 3 tipos de servicios disponibles son: **Cluster IP, Node Port y Load Balancer.** |
| 141 | + |
| 142 | +<div align="center"> |
| 143 | + <img src="img/10.png"> |
| 144 | +</div> |
| 145 | + |
| 146 | +<div align="center"> |
| 147 | + <img src="img/11.png"> |
| 148 | +</div> |
| 149 | + |
| 150 | +<div align="center"> |
| 151 | + <img src="img/12.png"> |
| 152 | +</div> |
| 153 | + |
| 154 | +https://medium.com/google-cloud/kubernetes-nodeport-vs-loadbalancer-vs-ingress-when-should-i-use-what-922f010849e0 |
| 155 | + |
| 156 | +## Archivos descriptivos de infraestructura teoria y práctica |
| 157 | + |
| 158 | +Los archivos descriptivos nos permiten hacer despliegues de nuestras aplicaciones, pero en este caso, escribiendo nosotros mismos los archivos de configuración. **No vamos a usar la interfaz gráfica.** **Estos archivos los escribimos en formato .yaml.** |
| 159 | + |
| 160 | +En estos archivos vamos a describir toda la parte lógica de nuestra aplicación: **Pods, Deployments, Services e incluso las conexión entre aplicaciones. Recuerda que en estos archivos no podemos configurar ni los clusters ni lo nodos.** |
| 161 | + |
| 162 | + |
| 163 | +## Labels |
| 164 | + |
| 165 | +**Los Labels son una metadata arbitraria, esto quiere decir que podemos poner los nombre que queramos para generar una identidad a cualquier objeto** (servicios, deployments, etc). Pueden ser de tipo Queryable (buscables o seleccionables), lo que nos permite agruparlos para generar despliegues de forma más fácil y hacer segregación de nuestros servicios. |
| 166 | + |
| 167 | +Los selectores son una herramienta que nos permite utilizar los labels para saber cuándo comenzar a utilizar unos pods u otros en nuestros despliegues. |
| 168 | + |
| 169 | +<div align="center"> |
| 170 | + <img src="img/13.png"> |
| 171 | +</div> |
| 172 | + |
| 173 | +<div align="center"> |
| 174 | + <img src="img/14.png"> |
| 175 | +</div> |
| 176 | + |
| 177 | +## Namespaces |
| 178 | + |
| 179 | +**Los Namespaces son una separación virtual dentro de nuestro cluster con el fin de hacer un aislamiento de nuestros datos y tener ambientes completamente separados.** Podemos tener multiples namespaces dentro de nuestros clusters. |
| 180 | + |
| 181 | +* default |
| 182 | +* kube-system |
| 183 | +* kube-public |
| 184 | + |
| 185 | +## Labels y Namespaces |
| 186 | + |
| 187 | +<div align="center"> |
| 188 | + <img src="img/16.png"> |
| 189 | +</div> |
| 190 | + |
| 191 | +```sh |
| 192 | +kubectl get namespace |
| 193 | +``` |
| 194 | + |
| 195 | +```sh |
| 196 | +kubectl create namespace desarrollo |
| 197 | +``` |
| 198 | + |
| 199 | +## Deployment Avanzado (Blue-green y Canary Deployment) |
| 200 | + |
| 201 | +* **Blue-green:** Es una técnica de despliegues que **nos ayuda a tener actualizaciones de nuestra aplicación con cero down time**. Para esto necesitamos, **un ambiente el tráfico (para el entorno de producción) y un segundo ambiente con las nuevas características de tu aplicación.** |
| 202 | + |
| 203 | +* **Canary:** **Nos sirve para hacer pruebas de nuevas versiones a un público pequeño**, esto con el fin de averiguar cómo se comportan los usuarios frente a esta nueva versión. |
| 204 | + |
| 205 | + |
| 206 | +Tipos de despliegues |
| 207 | +https://blog.container-solutions.com/kubernetes-deployment-strategies |
| 208 | +https://github.com/ContainerSolutions/k8s-deployment-strategies |
| 209 | + |
| 210 | +## Volumenes |
| 211 | + |
| 212 | +**Los volúmenes nos ayudan a implementar un almacenamiento persistente, en el que podamos acoplar y desacoplar los nodos sin que esta información desaparezca.** Pueden ser de tipo persistente, NFS o cluster, pero dependiendo de la integración con diferentes nubes se podrán implementar nuevos tipos de volúmenes. |
| 213 | + |
| 214 | +Los volúmenes son **ideales para guardar la información de nuestros usuarios, archivos, configuraciones y compartir esta información con diferentes pods.** |
| 215 | + |
| 216 | +# Arquitecturas |
| 217 | + |
| 218 | +## Desplegar una aplicación Stateful |
| 219 | + |
| 220 | +Las aplicación Stateful **son aplicaciones que guardan el estado de los datos para ser consultados posteriormente.** Buenos ejemplos de aplicaciones Stateful son: las Bases de Datos, Data Warehouse, Modelos predictivos de IA, Gestores documentales, entre otros. |
| 221 | + |
| 222 | +https://kubernetes.io/blog/2017/01/running-mongodb-on-kubernetes-with-statefulsets/ |
0 commit comments