Prueba tu despliegue de Rust
Prerrequisitos
- Completa las secciones anteriores de esta guía, empezando por Desarrolla tu aplicación Rust.
- Activa Kubernetes en Docker Desktop.
Resumen
En esta sección, aprenderás cómo utilizar Docker Desktop para desplegar tu aplicación en un entorno Kubernetes con todas las funciones en tu máquina de desarrollo. Esto te permite probar y depurar tus cargas de trabajo en Kubernetes de forma local antes de realizar el despliegue.
Crea un archivo YAML de Kubernetes
En tu directorio docker-rust-postgres, crea un archivo llamado
docker-rust-kubernetes.yaml. Abre el archivo en un IDE o editor de texto y añade
el siguiente contenido. Reemplaza DOCKER_USERNAME/REPO_NAME con tu nombre de usuario de Docker
y el nombre del repositorio que creaste en Configura CI/CD para tu aplicación Rust.
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
service: server
name: server
namespace: default
spec:
replicas: 1
selector:
matchLabels:
service: server
strategy: {}
template:
metadata:
labels:
service: server
spec:
initContainers:
- name: wait-for-db
image: busybox:1.28
command:
[
"sh",
"-c",
'until nc -zv db 5432; do echo "esperando a la db"; sleep 2; done;',
]
containers:
- image: DOCKER_USERNAME/REPO_NAME
name: server
imagePullPolicy: Always
ports:
- containerPort: 8000
hostPort: 5000
protocol: TCP
env:
- name: ADDRESS
value: 0.0.0.0:8000
- name: PG_DBNAME
value: example
- name: PG_HOST
value: db
- name: PG_PASSWORD
value: mysecretpassword
- name: PG_USER
value: postgres
- name: RUST_LOG
value: debug
resources: {}
restartPolicy: Always
status: {}
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
service: db
name: db
namespace: default
spec:
replicas: 1
selector:
matchLabels:
service: db
strategy:
type: Recreate
template:
metadata:
labels:
service: db
spec:
containers:
- env:
- name: POSTGRES_DB
value: example
- name: POSTGRES_PASSWORD
value: mysecretpassword
- name: POSTGRES_USER
value: postgres
image: postgres:18
name: db
ports:
- containerPort: 5432
protocol: TCP
resources: {}
restartPolicy: Always
status: {}
---
apiVersion: v1
kind: Service
metadata:
labels:
service: server
name: server
namespace: default
spec:
type: NodePort
ports:
- name: "5000"
port: 5000
targetPort: 8000
nodePort: 30001
selector:
service: server
status:
loadBalancer: {}
---
apiVersion: v1
kind: Service
metadata:
labels:
service: db
name: db
namespace: default
spec:
ports:
- name: "5432"
port: 5432
targetPort: 5432
selector:
service: db
status:
loadBalancer: {}En este archivo YAML de Kubernetes hay cuatro objetos, separados por ---. Además de un Service y un Deployment para la base de datos, los otros dos objetos son:
- Un Deployment, que describe un grupo escalable de pods idénticos. En este caso,
obtendrás solo una réplica o copia de tu pod. Ese pod, que se describe bajo
template, tiene un solo contenedor. El contenedor se crea a partir de la imagen construida por GitHub Actions en Configura CI/CD para tu aplicación Rust. - Un servicio NodePort, que enrutará el tráfico desde el puerto 30001 en tu host hacia el puerto 5000 dentro de los pods a los que apunta, permitiéndote acceder a tu aplicación desde la red.
Para obtener más información sobre los objetos de Kubernetes, consulta la documentación de Kubernetes.
Despliega y comprueba tu aplicación
En una terminal, navega a
docker-rust-postgresy despliega tu aplicación en Kubernetes.$ kubectl apply -f docker-rust-kubernetes.yamlDeberías ver una salida que se parezca a la siguiente, indicando que tus objetos de Kubernetes se crearon con éxito.
deployment.apps/server created deployment.apps/db created service/server created service/db createdAsegúrate de que todo haya funcionado listando tus despliegues.
$ kubectl get deploymentsTu despliegue debería aparecer en la lista de la siguiente manera:
NAME READY UP-TO-DATE AVAILABLE AGE db 1/1 1 1 2m21s server 1/1 1 1 2m21sEsto indica que todos los pods que solicitaste en tu YAML están en funcionamiento. Realiza la misma comprobación para tus servicios.
$ kubectl get servicesDeberías obtener una salida como la siguiente.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE db ClusterIP 10.105.167.81 <none> 5432/TCP 109s kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 9d server NodePort 10.101.235.213 <none> 5000:30001/TCP 109sAdemás del servicio
kubernetespredeterminado, puedes ver tu servicioserver, aceptando tráfico en el puerto 30001/TCP.En una terminal, haz curl al servicio.
$ curl http://localhost:30001/users [{"id":1,"login":"root"}]Ejecuta el siguiente comando para eliminar tu aplicación.
$ kubectl delete -f docker-rust-kubernetes.yaml
Resumen
En esta sección, aprendiste cómo utilizar Docker Desktop para desplegar tu aplicación en un entorno Kubernetes con todas las funciones en tu máquina de desarrollo.
Información relacionada: