Skip to content

Commit

Permalink
Merge pull request #72 from fredpena/main
Browse files Browse the repository at this point in the history
[Translation] Spanish - Chapter 3
  • Loading branch information
salaboy authored Jul 25, 2024
2 parents d61016b + e503d08 commit 98ac209
Show file tree
Hide file tree
Showing 7 changed files with 745 additions and 11 deletions.
27 changes: 18 additions & 9 deletions README-es.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,22 @@
# Ingeniería de plataformas en Kubernetes :: Código del Libro / Tutoriales / Ejemplos

Este repositorio contiene todo el código fuente, los tutoriales y los ejemplos del libro de Inngeniería de [Plataformas en Kubernetes](https://www.salaboy.com/book/).
Este repositorio contiene todo el código fuente, los tutoriales y los ejemplos del libro de Inngeniería
de [Plataformas en Kubernetes](https://www.salaboy.com/book/).

## Tutoriales de Kubernetes

Disponible en: [Inglés](README.md) | [Chino](README-zh.md) | [Portugués](README-pt.md) | [日本語 (Japanese)](README-ja.md)
Disponible
en: [English](README.md) | [中文 (Chinese)](README-zh.md) | [Português (Portuguese)](README-pt.md) | [Español](README-es.md) | [日本語 (Japanese)](README-ja.md)

Nota: Esta diversidad lingüística es posible gracias a los contribuyentes de una fantástica comunidad de cloud-native. ¡Muchas gracias! 🚀
Nota: Esta diversidad lingüística es posible gracias a los contribuyentes de una fantástica comunidad de cloud-native.
¡Muchas gracias! 🚀

Cada capítulo del libro hace referencia a un tutorial paso a paso que puede ejecutar para ensuciarse las manos con algunos proyectos de código abierto.
Cada capítulo del libro hace referencia a un tutorial paso a paso que puede ejecutar para ensuciarse las manos con
algunos proyectos de código abierto.

- [Capítulo 1: (El surgimiento) Plataformas basadas en Kubernetes](chapter-1/README.md)
- Capítulo 2: Desafíos de las aplicaciones nativas en la nube
- Capítulo 3: Pipelines de servicios: construcción de aplicaciones nativas en la nube
- [Capítulo 1: (El surgimiento) Plataformas basadas en Kubernetes](chapter-1/README-es.md)
- [Capítulo 2: Desafíos de las aplicaciones nativas en la nube](chapter-2/README-es.md)
- [Capítulo 3: Pipelines de servicios: construcción de aplicaciones nativas en la nube](chapter-3/README-es.md)
- Capítulo 4: Pipelines de entorno: despliegue de aplicaciones nativas en la nube
- Capítulo 5: Infraestructura multi-nube (App)
- Capítulo 6: Construyamos una plataforma basada en Kubernetes
Expand All @@ -24,8 +28,13 @@ A continuación, puede encontrar información sobre la aplicación utilizada en

## Código

El código de la Aplicación para Conferencias (esqueleto de trabajo) y otros artefactos relacionados, como gráficos de Helm y archivos de configuración, se pueden encontrar dentro del directorio [conference-application](conference-application/README.md). Todos estos ejemplos se pueden construir a partir del código fuente, y te invito a explorar y modificar estas aplicaciones.
El código de la Aplicación para Conferencias (esqueleto de trabajo) y otros artefactos relacionados, como gráficos de
Helm y archivos de configuración, se pueden encontrar dentro del
directorio [conference-application](conference-application/README.md). Todos estos ejemplos se pueden construir a partir
del código fuente, y te invito a explorar y modificar estas aplicaciones.

## Comentarios / Sugerencias / Preguntas

Si tiene comentarios, sugerencias o preguntas, [abra un issue](https://github.com/salaboy/platforms-on-k8s/issues/new), déjeme un comentario en mi blog [https://www.salaboy.com](https://www.salaboy.com) o contácteme a través de [Twitter @Salaboy](https://twitter.com/salaboy).
Si tiene comentarios, sugerencias o preguntas, [abra un issue](https://github.com/salaboy/platforms-on-k8s/issues/new),
déjeme un comentario en mi blog [https://www.salaboy.com](https://www.salaboy.com) o contácteme a través
de [Twitter @Salaboy](https://twitter.com/salaboy).
61 changes: 61 additions & 0 deletions chapter-3/README-es.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# Capitulo 3: Pipelines de servicios: Construcción de aplicaciones nativas en la nube

_🌍 Disponible
en_: [English](README.md) | [中文 (Chinese)](README-zh.md) | [日本語 (Japanese)](README-ja.md) | [Español](README-es.md)
> **Nota:** Presentado por la fantástica comunidad
> de [ 🌟 contribuidores](https://github.com/salaboy/platforms-on-k8s/graphs/contributors) cloud-native!
---

Estos breves tutoriales cubren tanto Tekton como Dagger para pipelines de servicios. Con Tekton, extendemos las API de
Kubernetes para definir nuestros Pipelines y tareas. Con Dagger, definimos programáticamente los Pipelines que pueden
ejecutarse de forma remota en Kubernetes o localmente en nuestras laptops de desarrollo. Finalmente, se proporciona un
enlace a un conjunto de GitHub Actions para poder comparar entre estos diferentes enfoques.

- [Tutorial de Tekton para pipelines de servicios](tekton/README-es.md)
- [Tutorial de Dagger para pipelines de servicios](dagger/README-es.md)
- [GitHub Actions](github-actions/README-es.md)

## Limpiar

Si desea deshacerse del KinD Cluster creado para estos tutoriales, puede ejecutar:

```shell
kind delete clusters dev
```

## Próximos pasos

Recomiendo encarecidamente seguir los tutoriales listados para Tekton y Dagger en tus entornos locales. Si tienes
experiencia en desarrollo, puedes extender los pipelines de Dagger con tus propios pasos personalizados.

Si no eres un desarrollador de Go, ¿te atreverías a construir un pipeline para tu stack tecnológico usando Tekton y
Dagger?

Si tienes una cuenta en un registro de contenedores, como una cuenta de Docker Hub, puedes intentar configurar las
credenciales para que los pipelines puedan enviar las imágenes de contenedores al registro. Luego puedes usar el Helm
Chart `values.yaml` para consumir las imágenes desde tu cuenta en lugar de las oficiales alojadas
en `docker.io/salaboy`.

Finalmente, puedes hacer un fork del repositorio `salaboy/platforms-on-k8s` en tu propio usuario (organización) de
GitHub para probar con la ejecución de los GitHub Actions ubicadas en este
directorio. [../../.github/workflows/](../../.github/workflows/).

## Resumir y contribuir

En estos tutoriales, experimentamos con dos enfoques completamente diferentes para pipelines de servicios. Comenzamos
con [Tekton](https://tekton.dev), un motor de pipelines sin opiniones que fue diseñado para ser nativo de Kubernetes,
aprovechando el
poder declarativo de las API de Kubernetes y los bucles de reconciliación de Kubernetes. Luego
probamos [Dagger](https://dagger.io), un motor
de pipelines diseñado para orquestar contenedores y que se puede configurar utilizando tu stack tecnológico favorito a
través de sus SDKs.

Una cosa es segura, no importa qué motor de pipelines elija tu organización, los equipos de desarrollo se beneficiarán
enormemente al poder consumir pipelines de servicios sin la necesidad de definir cada paso, credenciales y detalles de
configuración. Si el equipo de plataforma puede crear pasos/tareas compartidos o incluso pipelines predeterminados para
tus servicios, los desarrolladores pueden centrarse en escribir código de aplicación.

¿Quieres mejorar este tutorial? Crea un issue, envíame un mensaje en [Twitter](https://twitter.com/salaboy) o envía un
Pull Request.
2 changes: 1 addition & 1 deletion chapter-3/README-ja.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# サービスパイプライン

---
*🌍 翻訳*: [English](README.md) | [中文 (Chinese)](README-zh.md) | [日本語](README-ja.md)
*🌍 翻訳*: [English](README.md) | [中文 (Chinese)](README-zh.md) | [日本語 (Japanese)](README-ja.md) | [Español](README-es.md)
> **注意:** このコンテンツは素晴らしいクラウドネイティブコミュニティの [🌟 コントリビューター](https://github.com/salaboy/platforms-on-k8s/graphs/contributors) によってもたらされています!
---

Expand Down
2 changes: 1 addition & 1 deletion chapter-3/README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Service Pipelines

---
_🌍 Available in_: [English](README.md) | [中文 (Chinese)](README-zh.md) | [日本語 (Japanese)](README-ja.md)
_🌍 Available in_: [English](README.md) | [中文 (Chinese)](README-zh.md) | [日本語 (Japanese)](README-ja.md) | [Español](README-es.md)
> **Note:** Brought to you by the fantastic cloud-native community's [ 🌟 contributors](https://github.com/salaboy/platforms-on-k8s/graphs/contributors)!
---
Expand Down
147 changes: 147 additions & 0 deletions chapter-3/dagger/README-es.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
# Dagger en Acción

En este breve tutorial, examinaremos los Pipelines de Servicios de Dagger proporcionados para construir, probar,
empaquetar y publicar cada servicio. Estos pipelines están implementados en Go utilizando el SDK de Dagger para Go y se
encargan de construir cada servicio y crear un contenedor. Se proporciona un pipeline separado para construir y publicar
el Helm Chart de la aplicación.

## Requisitos

Para ejecutar estos pipelines localmente, necesitarás:

- [Instalando Go](https://go.dev/doc/install)
- [Un runtime de contenedores como (Docker) ejecutándose localmente](https://docs.docker.com/get-docker/)

Para ejecutar los pipelines de forma remota en un clúster de Kubernetes, puedes usar [KinD](https://kind.sigs.k8s.io/) o
cualquier clúster de Kubernetes que tengas disponible.

## Vamos a ejecutar algunos pipelines

Dado que todos los servicios son muy similares, la misma definición de pipeline se puede usar y parametrizar para
construir cada servicio por separado.

Puedes clonar este repositorio y, desde el [directorio de la Aplicación de Conferencia](../../conference-application/),
ejecutar los pipelines localmente.

Puedes ejecutar cualquier tarea definida dentro del archivo `service-pipeline.go`:

```shell
go mod tidy
go run service-pipeline.go build <SERVICE DIRECTORY>
```

Las siguientes tareas están definidas para todos los servicios:

- `build`: Construye el código fuente del servicio y crea un contenedor para él. Este espera como argumento el
directorio del servicio que queremos construir.
- `test`: Prueba el servicio, pero primero iniciará todas las dependencias del servicio (contenedores necesarios para
ejecutar la prueba). Este espera como argumento el directorio del servicio que queremos probar.
- `publish`: Publica la imagen de contenedor creada en un registro de contenedores. Esto requiere que estés autenticado
en el registro de contenedores y que proporciones el nombre de la etiqueta utilizada para la imagen del contenedor.
Este espera como argumentos el directorio del servicio que queremos construir y publicar, así como la etiqueta
utilizada para marcar el contenedor antes de enviarlo.

Si ejecutas `go run service-pipeline.go all notifications-service v1.0.0-dagger`, todas las tareas se ejecutarán. Antes
de poder ejecutar todas las tareas, deberás asegurarte de que tienes todos los requisitos previos establecidos, ya que
para publicar en un Registro de Contenedores necesitarás proporcionar credenciales apropiadas.

Puedes ejecutar de manera segura `go run service-pipeline.go build notifications-service`, lo cual no requiere que
configures ninguna credencial. Puedes configurar tu registro de contenedores y nombre de usuario utilizando variables de
entorno, por ejemplo:

```shell
CONTAINER_REGISTRY=<YOUR_REGISTRY> CONTAINER_REGISTRY_USER=<YOUR_USER> go run service-pipeline.go publish notifications-service v1.0.0-dagger
```

Esto requiere que estés autenticado en el registro donde deseas publicar tus imágenes de contenedor.

Ahora, para fines de desarrollo, esto es bastante conveniente, ya que puedes construir el código de tu servicio de la
misma manera en que lo hará tu sistema de CI (Integración Continua). Pero no quiere ejecutar en producción imágenes de
contenedor que se crearon en la laptop de un desarrollador, ¿verdad?

La siguiente sección muestra una configuración simple para ejecutar pipelines de Dagger de forma remota dentro de un
clúster de Kubernetes.

## Ejecutando tus pipelines de forma remota en Kubernetes

El Motor de Pipelines de Dagger puede ejecutarse en cualquier lugar donde puedas ejecutar contenedores, lo que significa
que puede funcionar en Kubernetes sin la necesidad de configuraciones complicadas.

Para este tutorial, necesitas tener un clúster de Kubernetes. Puedes crear uno
usando [KinD, como hicimos en el Capítulo 2](../../chapter-2/README-es.md#creando-un-clúster-local-con-kubernetes-kind).

En este breve tutorial, ejecutaremos los pipelines que estábamos ejecutando localmente con nuestro runtime de
contenedores local, ahora de forma remota contra un Motor de Pipelines de Dagger que se ejecuta dentro de un Pod de
Kubernetes. Esta es una característica experimental y no es la forma recomendada de ejecutar Dagger, pero nos ayuda a
demostrar el concepto.

Ejecutemos el Motor de Pipelines de Dagger dentro de Kubernetes creando un Pod con Dagger:

```shell
kubectl run dagger --image=registry.dagger.io/engine:v0.3.13 --privileged=true
```

Alternativamente, puedes aplicar `chapter-3/dagger/k8s/pod.yaml` utilizando el manifiesto

```shell
kubectl apply -f chapter-3/dagger/k8s/pod.yaml
```

Verifica que el pod `dagger` esté en ejecución:

```shell
kubectl get pods
```

Deberías ver algo como esto:

```shell
NAME READY STATUS RESTARTS AGE
dagger 1/1 Running 0 49s
```

**Nota**: Esto está lejos de ser ideal porque no estamos configurando ningún mecanismo de persistencia o replicación
para Dagger
en sí; todos los mecanismos de caché son volátiles en este caso. Consulta la documentación oficial para obtener más
información al respecto.

Ahora, para ejecutar los pipelines de tus proyectos contra este servicio remoto, solo necesitas exportar la siguiente
variable de entorno:

```shell
export _EXPERIMENTAL_DAGGER_RUNNER_HOST=kube-pod://<podname>?context=<context>&namespace=<namespace>&container=<container>
```

Donde `<podname>` es `dagger` (porque creamos el pod manualmente), `<context>` es el contexto de tu clúster de
Kubernetes. Si estás ejecutando contra un clúster KinD, este podría ser `kind-dev`. Puedes encontrar el nombre de tu
contexto actual ejecutando `kubectl config current-context`. Finalmente, `<namespace>` es el namespace en el que
ejecutas el contenedor de Dagger, y `<container>` es nuevamente dagger. Para mi configuración contra KinD, esto se vería
así:

```shell
export _EXPERIMENTAL_DAGGER_RUNNER_HOST="kube-pod://dagger?context=kind-dev&namespace=default&container=dagger"
```

Nota también que mi clúster KinD (llamado `kind-dev`) no tenía nada relacionado con Pipelines.

Ahora, si ejecutas en cualquiera de los proyectos:

```shell
go run service-pipeline.go build notifications-service
```

O para probar tu servicio de forma remota:

```shell
go run service-pipeline.go test notifications-service
```

En una pestaña separada, puedes seguir los logs del motor de Dagger ejecutando:

```shell
kubectl logs -f dagger
```

La construcción ocurrirá de forma remota dentro del clúster. Si estuvieras ejecutando esto contra un clúster de
Kubernetes remoto (no KinD), no necesitarías tener un runtime de contenedores local para construir tus servicios y sus
contenedores.
22 changes: 22 additions & 0 deletions chapter-3/github-actions/README-es.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# GitHub Actions en Acción

Utilizando GitHub Actions, podemos automatizar nuestros Pipelines de Servicio sin necesidad de ejecutar ninguna
infraestructura. Todos los pipelines/workflows se ejecutarán en la infraestructura de GitHub.com, lo que, a gran
escala (cuando comiencen a cobrar), puede volverse muy costoso.

Puedes encontrar los Pipelines de Servicio para la Aplicación de Conferencia definidos aquí:

- [Pipeline de Servicio para el Servicio de Agenda en GH](../../.github/workflows/agenda-service-service-pipeline.yaml)
- [Pipeline de Servicio para el Servicio C4P en GH](../../.github/workflows/c4p-service-service-pipeline.yaml)
- [Pipeline de Servicio para el Servicio de Notificaciones en GH](../../.github/workflows/notifications-service-service-pipeline.yaml)

Estos pipelines utilizan un filtro para activarse únicamente si el código fuente del servicio
cambia [paths-filter](https://github.com/dorny/paths-filter).

Para construir y publicar los contenedores de cada servicio, estos pipelines
utilizan `ko-build` [setup-ko](https://github.com/ko-build/setup-ko) para generar
contenedores multiplataforma para nuestras aplicaciones Go.

Para publicar en Docker Hub, se utiliza la acción `docker/login-action@v2`, la cual requiere la configuración de dos
`Secrets` (`secrets.DOCKERHUB_USERNAME`, `secrets.DOCKERHUB_TOKEN`), que permiten a los pipelines realizar el push
de los contenedores a mi cuenta de Docker Hub.
Loading

0 comments on commit 98ac209

Please sign in to comment.