Skip to content

Commit 4a90ef0

Browse files
committed
Update notes
1 parent 990d4c1 commit 4a90ef0

File tree

17 files changed

+222
-0
lines changed

17 files changed

+222
-0
lines changed

learn/Cloud/Kubernetes/README.md

+222
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,222 @@
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/

learn/Cloud/Kubernetes/img/1.png

60.6 KB
Loading

learn/Cloud/Kubernetes/img/10.png

65.2 KB
Loading

learn/Cloud/Kubernetes/img/11.png

98 KB
Loading

learn/Cloud/Kubernetes/img/12.png

131 KB
Loading

learn/Cloud/Kubernetes/img/13.png

115 KB
Loading

learn/Cloud/Kubernetes/img/14.png

128 KB
Loading

learn/Cloud/Kubernetes/img/15.png

33.4 KB
Loading

learn/Cloud/Kubernetes/img/16.png

85.5 KB
Loading

learn/Cloud/Kubernetes/img/2.png

85.6 KB
Loading

learn/Cloud/Kubernetes/img/3.png

139 KB
Loading

learn/Cloud/Kubernetes/img/4.png

97.6 KB
Loading

learn/Cloud/Kubernetes/img/5.png

67.7 KB
Loading

learn/Cloud/Kubernetes/img/6.png

94.9 KB
Loading

learn/Cloud/Kubernetes/img/7.png

69.8 KB
Loading

learn/Cloud/Kubernetes/img/8.png

80.9 KB
Loading

learn/Cloud/Kubernetes/img/9.png

251 KB
Loading

0 commit comments

Comments
 (0)