Skip to content

Commit d12bb20

Browse files
authored
Merge pull request #51 from joseadanof/main
Chapter 2 - Spanish
2 parents c395a66 + 0c28688 commit d12bb20

File tree

1 file changed

+195
-0
lines changed

1 file changed

+195
-0
lines changed

chapter-2/README-es.md

+195
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,195 @@
1+
# Capitulo 2 :: Desafios de una Aplicación Cloud-Native
2+
3+
4+
_🌍 Disponible en_: [English](README.md) | [中文 (Chinese)](README-zh.md) | [Português (Portuguese)](README-pt.md) | [Español](README-es.md)
5+
> **Nota:** Presentado por la fantástica comunidad de [ 🌟 contribuidores](https://github.com/salaboy/platforms-on-k8s/graphs/contributors) cloud-native!
6+
7+
En este breve tutorial, instalaremos la `Aplicación para Conferencia` usando Helm en un Clúster Kubernetes local de KinD.
8+
9+
> [!NOTA]
10+
> Los Helm Charts se pueden publicar en repositorios de Helm Charts o también, desde Helm 3.7, como contenedores OCI en registros de contenedores.
11+
12+
## Creando un clúster local con Kubernetes KinD
13+
14+
> [!IMPORTANTE]
15+
> Asegúrese de tener los pre-requisitos para todos los tutoriales. Puedes encontrarlos [aquí](../chapter-1/README.md#pre-requisites-for-the-tutorials).
16+
17+
Usa el siguiente comando para crear un clúster KinD con tres nodos trabajadores y 1 nodo de Control Plane.
18+
19+
```shell
20+
cat <<EOF | kind create cluster --name dev --config=-
21+
kind: Cluster
22+
apiVersion: kind.x-k8s.io/v1alpha4
23+
nodes:
24+
- role: control-plane
25+
kubeadmConfigPatches:
26+
- |
27+
kind: InitConfiguration
28+
nodeRegistration:
29+
kubeletExtraArgs:
30+
node-labels: "ingress-ready=true"
31+
extraPortMappings:
32+
- containerPort: 80
33+
hostPort: 80
34+
protocol: TCP
35+
- containerPort: 443
36+
hostPort: 443
37+
protocol: TCP
38+
- role: worker
39+
- role: worker
40+
- role: worker
41+
EOF
42+
43+
```
44+
45+
![3 Nodos esclavos](imgs/cluster-topology.png)
46+
47+
## Cargando algunas imágenes de contenedores antes de instalar la aplicación y otros componentes
48+
49+
El script `kind-load.sh` pre-carga, en otras palabras, descarga y carga las imágenes de contenedores que utilizaremos para nuestra aplicación en nuestro clúster KinD.
50+
51+
La idea aquí es optimizar el proceso para nuestro clúster, de modo que cuando instalemos la aplicación, no tengamos que esperar más de 10 minutos mientras se descargan todas las imágenes de contenedores necesarias. Con todas las imágenes ya precargadas en nuestro clúster KinD, la aplicación debería comenzar en alrededor de 1 minuto, que es el tiempo necesario para que PostgreSQL, Redis y Kafka arranquen.
52+
53+
Ahora, carguemos las imágenes necesarias en nuestro clúster KinD.
54+
55+
> [!Importante]
56+
> Al ejecutar el script mencionado en el siguiente paso, obtendrá todas las imágenes requeridas y luego las cargará en cada nodo de su clúster KinD. Si está ejecutando los ejemplos en un proveedor de nube, esto podría no valer la pena, ya que los proveedores de nube con conexiones de Gigabyte a registros de contenedores podrían obtener estas imágenes en cuestión de segundos.
57+
58+
En su terminal, acceda al directorio `chapter-2`, y desde allí, ejecute el script:
59+
60+
```shell
61+
./kind-load.sh
62+
```
63+
64+
> [!Nota]
65+
> Si está ejecutando Docker Desktop en macOS y ha establecido un tamaño más pequeño para el disco virtual, puede encontrar el siguiente error:
66+
>
67+
>
68+
> ```shell
69+
> $ ./kind-load.sh
70+
> ...
71+
> Command Output: Error response from daemon: write /var/lib/docker/...
72+
> /layer.tar: no space left on device
73+
> ```
74+
>
75+
> Puede modificar el valor del límite del disco virtual en el menú ``Settings -> Resources``.
76+
> ![Límites del disco virtual de Docker Desktop de MacOS](imgs/macos-docker-desktop-virtual-disk-setting.png)
77+
78+
### Instalando NGINX Ingress Controller
79+
Necesitamos NGINX Ingress Controller para enrutar el tráfico desde nuestra computadora portátil a los servicios que se ejecutan dentro del clúster. NGINX Ingress Controller actúa como un enrutador que se ejecuta dentro del clúster pero también está expuesto al mundo exterior.
80+
81+
```shell
82+
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/release-1.8/deploy/static/provider/kind/deploy.yaml
83+
```
84+
Verifique que los pods dentro del `ingress-nginx` se hayan iniciado correctamente antes de continuar:
85+
86+
```shell
87+
> kubectl get pods -n ingress-nginx
88+
NAME READY STATUS RESTARTS AGE
89+
ingress-nginx-admission-create-cflcl 0/1 Completed 0 62s
90+
ingress-nginx-admission-patch-sb64q 0/1 Completed 0 62s
91+
ingress-nginx-controller-5bb6b499dc-7chfm 0/1 Running 0 62s
92+
```
93+
Esto debería permitirte dirigir el tráfico desde `http://localhost` a los servicios dentro del clúster. Observa que para que KinD funcione de esta manera, proporcionamos parámetros y etiquetas adicionales para el nodo Control Plane cuando creamos el clúster:
94+
95+
```yaml
96+
nodes:
97+
- role: control-plane
98+
kubeadmConfigPatches:
99+
- |
100+
kind: InitConfiguration
101+
nodeRegistration:
102+
kubeletExtraArgs:
103+
node-labels: "ingress-ready=true" #Esto permite que el Ingress Controller se instale en el nodo Control Plane
104+
extraPortMappings:
105+
- containerPort: 80 # Esto nos permite vincular el puerto 80 en el host local al Ingress Controller, para que pueda dirigir el tráfico a los servicios que se ejecutan dentro del clúster.
106+
hostPort: 80
107+
protocol: TCP
108+
- containerPort: 443
109+
hostPort: 443
110+
protocol: TCP
111+
```
112+
Una vez que tenemos nuestro clúster y nuestro Ingress Controller instalado y configurado, podemos seguir adelante para instalar nuestra aplicación.
113+
114+
## Instalando la Aplicación para Conferencia
115+
Desde Helm 3.7+, podemos usar imágenes OCI para publicar, descargar e instalar Helm Charts. Este enfoque utiliza Docker Hub como un registro de Helm Charts.
116+
117+
Para instalar la Aplicación para Conferencia, solo necesitas ejecutar el siguiente comando:
118+
119+
```shell
120+
helm install conference oci://docker.io/salaboy/conference-app --version v1.0.0
121+
```
122+
También puedes ejecutar el siguiente comando para ver los detalles del Helm Chart:
123+
124+
```shell
125+
helm show all oci://docker.io/salaboy/conference-app --version v1.0.0
126+
```
127+
Verifica que todas los pods de la aplicación estén en funcionamiento.
128+
129+
> [!NOTA]
130+
> Ten en cuenta que si tu conexión a Internet es lenta, puede llevar un tiempo que la aplicación se inicie. Dado que los servicios de la aplicación dependen de algunos componentes de infraestructura (Redis, Kafka, PostgreSQL), estos componentes deben iniciarse y estar listos para que los servicios se conecten.
131+
>
132+
>Componentes como Kafka son bastante pesados, con alrededor de 335+ MB, PostgreSQL 88+ MB y Redis 35+ MB.
133+
134+
Eventualmente, deberías ver algo como esto. Puede tomar unos minutos:
135+
136+
```shell
137+
kubectl get pods
138+
NAME READY STATUS RESTARTS AGE
139+
conference-agenda-service-deployment-7cc9f58875-k7s2x 1/1 Running 4 (45s ago) 2m2s
140+
conference-c4p-service-deployment-54f754b67c-br9dg 1/1 Running 4 (65s ago) 2m2s
141+
conference-frontend-deployment-74cf86495-jthgr 1/1 Running 4 (56s ago) 2m2s
142+
conference-kafka-0 1/1 Running 0 2m2s
143+
conference-notifications-service-deployment-7cbcb8677b-rz8bf 1/1 Running 4 (47s ago) 2m2s
144+
conference-postgresql-0 1/1 Running 0 2m2s
145+
conference-redis-master-0 1/1 Running 0 2m2s
146+
```
147+
148+
La columna RESTARTS del pod muestra que quizás Kafka fue lento y el servicio se inicio primero por Kubernetes, por lo tanto, se reinicio para esperar a que Kafka estuviera listo.
149+
150+
Ahora puedes dirigir tu navegador a `http://localhost` para ver la aplicación.
151+
152+
![conference app](imgs/conference-app-homepage.png)
153+
154+
## [Importante] Limpieza - ¡¡¡Debes LEER!!!
155+
Dado que la Aplicación para Conferencia está instalando PostgreSQL, Redis y Kafka, si deseas eliminar e instalar la aplicación nuevamente (lo cual haremos a medida que avancemos en las guías), debes asegurarte de eliminar los correspondientes PersistenceVolumeClaims (PVCs).
156+
157+
Estos PVCs son los volúmenes utilizados para almacenar los datos de las bases de datos y Kafka. No eliminar estos PVCs entre instalaciones hará que los servicios utilicen credenciales antiguas para conectarse a las nuevas bases de datos provisionadas.
158+
159+
Puedes eliminar todos los PVCs enumerándolos con:
160+
161+
```shell
162+
kubectl get pvc
163+
```
164+
165+
Deberías ver:
166+
167+
```shell
168+
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
169+
data-conference-kafka-0 Bound pvc-2c3ccdbe-a3a5-4ef1-a69a-2b1022818278 8Gi RWO standard 8m13s
170+
data-conference-postgresql-0 Bound pvc-efd1a785-e363-462d-8447-3e48c768ae33 8Gi RWO standard 8m13s
171+
redis-data-conference-redis-master-0 Bound pvc-5c2a96b1-b545-426d-b800-b8c71d073ca0 8Gi RWO standard 8m13s
172+
```
173+
174+
Y luego eliminar con:
175+
```shell
176+
kubectl delete pvc data-conference-kafka-0 data-conference-postgresql-0 redis-data-conference-redis-master-0
177+
```
178+
El nombre de los PVCs cambiará según el nombre de la versión de Helm que usaste al instalar la gráfica.
179+
180+
Finalmente, si deseas deshacerte completamente del clúster KinD, puedes ejecutar:
181+
182+
```shell
183+
kind delete clusters dev
184+
```
185+
-------
186+
187+
## Siguientes Pasos
188+
Te recomiendo encarecidamente que te ensucies las manos con un clúster de Kubernetes real alojado en un proveedor de servicios en la nube. Puedes probar la mayoría de los proveedores de servicios en la nube, ya que ofrecen una prueba gratuita donde puedes crear clústeres de Kubernetes y ejecutar todos estos ejemplos [consulta este repositorio](https://github.com/learnk8s/free-kubernetes) para obtener más información.
189+
190+
Si puedes crear un clúster en un proveedor de servicios en la nube y poner en marcha la aplicación, obtendrás experiencia práctica en todos los temas tratados en el Capítulo 2.
191+
192+
## Resumen y Contribución
193+
En este breve tutorial, logramos instalar el esqueleto de la Aplicación para Conferencia. Utilizaremos esta aplicación como ejemplo a lo largo del resto de los capítulos. Asegúrate de que esta aplicación funcione para ti, ya que cubre lo básico de usar e interactuar con un clúster de Kubernetes.
194+
195+
¿Quieres mejorar este tutorial? Crea un [issue](https://github.com/salaboy/platforms-on-k8s/issues/new), envíame un mensaje en [Twitter](https://twitter.com/salaboy) o envía un [Pull Request](https://github.com/salaboy/platforms-on-k8s/compare).

0 commit comments

Comments
 (0)