practica-go-kubernetes

module
v1.0.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 23, 2023 License: MIT

README

práctica Go & k8s

Aplicación para ser utilizada en los yml de k8s de esta práctica.

Descripción

Este proyecto crea una imagen de docker con cinco aplicaciones: character, cliente, servidor, files y namespace. Por defecto se lanza la aplicación server. Es necesario sobreescribir el entrypoint con character, client, files, namespace para lanzar el resto de aplicaciones.

character: La aplicación character lanza una aplicación que escribe cada segundo por consola érase una vez ... Las variables de entorno CHARACTER y SLEEP_TIME pueden ser sobreescritas.

server: La aplicación server lanza un servidor web que escucha peticiones http en el puerto 8000 y expone dos endpoints, /health y /echo. El endpoint /health devuelve un json con el estado de la aplicación, mientras que el endpoint /echo devuelve un un json con el hostname de la máquina y el mensaje 'Esto es un gato'. El animal puede ser sobreescrito con la variable de entorno ANIMAL.

client: La aplicación cliente lanza un cliente web que hace peticiones http al servidor web. El cliente se puede configurar con las siguientes variables de entorno: SLEEP_TIME - Tiempo de espera entre peticiones, SERVER_URL - Dirección y puerto del servidor (http://localhost:8000), ENDPOINT - Endpoint del servidor.

files: La aplicación files escribe en la ruta /svr un fichero con el hostname y la hora como nombre, y escribe por consola el hostname y el número total de ficheros en la carpeta. La variable de entorno SLEEP_TIME se puede sobreescribir.

namespace: La aplicación namespace escribe por consola cada 5 segundos el número de pods que se están ejecutando en el namespace default. Las variables NAMESPACE y SLEEP_TIME se pueden sobreescribir.

Descripción detallada del servidor

Utiliza el entrypoint server para iniciar el sistema como servidor web. La aplicación expone los siguientes endpoints:

Endpoint Descripción
/echo Devuelve un json con los siguientes datos: { hostname: <hostname>, message: 'Esto es un gato' }
/health muestra el mensaje OK si el servidor está funcionando correctamente.

Todos los endpoints devuelven la respuesta en formato json.

Variable de entorno Descripción Tipo Valor por defecto
ANIMAL Modifica el animal de respuesta. String gato

Descripción detallada del cliente

Utiliza el entrypoint client para iniciar el sistema como cliente web. La aplicación realiza peticiones http hacia el enlace endpoint por intervalos de tiempo. Para configurar la aplicación cliente utilice las siguientes variables de entorno:

Variable de entorno Descripción Tipo Valor por defecto
SLEEP_TIME Intervalo de tiempo entre peticiones. String 1s
SERVER_URL Hostname donde serán realizadas las peticiones. Ejemplo: http://localhost:8000. String "http://localhost:8000"
ENDPOINT Endpoint del servidor web. String ""

Ejecución en docker

Para ejecutar la aplicación en docker, primero debe construir la imagen de docker. Para ello, ejecute el siguiente comando:

# iniciar servidor
docker container run --rm  --name server \
--entrypoint server -p 8000:8000 --detach \
ghcr.io/aestebance/practica-go-kubernetes:v1.0.7
curl http://localhost:8000/echo
{
  "hostname": "1122334455",
  "message": "Esto es un gato"
}
curl http://localhost:8000/health
{
  "status": "OK"
}
# iniciar el cliente
docker container run --rm --name client \
--entrypoint client -p 8000:8000 --detach \
ghcr.io/aestebance/practica-go-kubernetes:v1.0.7
# obtener la ip interna del servidor
docker container inspect server | grep IPAddress
# consultar los logs del cliente
docker container logs client
{
  "hostname": "1122334455",
  "message": "Esto es un gato"
}
{
  "hostname": "1122334455",
  "message": "Esto es un gato"
}

Ejecución en k8s

Para ejecutar la aplicación en k8s, primero debe crear el deployment y el service. Para ello, ejecute el siguiente comando:

kubectl apply -f example-k8s/
kubectl get all -l app=example-k8s-service

NAME                          TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
service/example-k8s-service   ClusterIP   10.96.60.0   <none>        8000/TCP   41s

kubectl get all -l app=example-k8s-server

NAME                                     READY   STATUS    RESTARTS   AGE
pod/example-k8s-server-5c78f7ff9-qrpf7   1/1     Running   0          94s

NAME                                 READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/example-k8s-server   1/1     1            1           94s

NAME                                           DESIRED   CURRENT   READY   AGE
replicaset.apps/example-k8s-server-5c78f7ff9   1         1         1       94s
kubectl get all -l app=example-k8s-client

NAME                                    READY   STATUS    RESTARTS       AGE
pod/example-k8s-client-594c945f-fb57f   1/1     Running   1 (119s ago)   2m

NAME                                 READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/example-k8s-client   1/1     1            1           2m

NAME                                          DESIRED   CURRENT   READY   AGE
replicaset.apps/example-k8s-client-594c945f   1         1         1       2m
kubectl logs pod/example-k8s-client-594c945f-fb57f

{
  "hostname": "example-k8s-server-5c78f7ff9-qrpf7",
  "message": "Esto es un gato"
}
{
  "hostname": "example-k8s-server-5c78f7ff9-qrpf7",
  "message": "Esto es un gato"
}
{
  "hostname": "example-k8s-server-5c78f7ff9-qrpf7",
  "message": "Esto es un gato"
}
...

La carpeta K8s contiene ejemplos de los distintos objetos de kubernetes.

Directories

Path Synopsis
cmd
lib

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL