Usando manifiestos

Correr una aplicación distribuida en el cluster

Para esto vamos a emplear un proyecto de ejemplo disponible aquí. En el mismo lugar podremos ver una descripción de los containers que se crearán, sus funciones y como se relacionan entre sí.

Arquitectura de la aplicación

La carpeta example_voting_app contiene las definiciones en YAML de los servicios y deployments del stack.

Antes de crear los elementos del stack crearemos un namespace llamado vote para agruparlos:

kubectl create namespace vote

Creamos los servicios y deployments usando kubectl a partir de los archivos YAML

kubectl create --namespace vote -f example_voting_app/

Veremos la creación y el estado de los pods, servicios, deployments y réplicas mediante:

kubectl get all --namespace vote

Ejecutando este comando de manera reiterada veremos como se van creando e iniciando los distintos elementos y como los replicasets van llegando a su estado deseado.

Si queremos más información sobre cada elemento podemos usar:

kubectl get all --namespace vote -o wide

Para ver las URLs de los servicios usaremos:

export VOTE_PORT="$(kubectl get services/vote-svc -n vote -o jsonpath='{.spec.ports[].nodePort}')"

export VOTE_IP="$(kubectl get nodes/cluster-prueba-worker -o jsonpath='{.status.addresses[0].address}')"

echo "Vote URL: http://$VOTE_IP:$VOTE_PORT"

y

export RESULT_PORT="$(kubectl get services/result-svc -n vote -o jsonpath='{.spec.ports[].nodePort}')"

export RESULT_IP="$(kubectl get nodes/cluster-prueba-worker -o jsonpath='{.status.addresses[0].address}')"

echo "Result URL: http://$RESULT_IP:$RESULT_PORT"

Si visitamos esas páginas con diferentes navegadores podremos efectuar votos (el servicio vote-svc) y ver los resultados (servicio result-svc).

Si desearamos contar con más réplicas de un deployment lo podemos modificar con:

kubectl scale --replicas=3 deployment vote --namespace vote

En este caso hacemos que el deployment vote tenga tres réplicas.

Podemos verificar el cambio listando los pods y replicasets:

kubectl get pods,replicasets --namespace vote

Usando un ingress controller

Para acceder a los servicios de la aplicación desde afuera del cluster podemos usar un ingress controller. En este caso usaremos el nginx ingress controller que instalamos en el cluster en Preparar el entorno.

En la carpeta ingresses_voting_app encontraremos los archivos YAML con las definiciones de los ingress resources.

Para crear los ingress resources usaremos:

kubectl create --namespace vote -f ingresses_voting_app/

Veremos que se crean los ingress resources con el comando:

kubectl get ingress --namespace vote

Ahora podremos acceder a las aplicaciones vote y results en las siguientes URLs: