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í.
- Una aplicación web front-end en Python que permite votar entre dos opciones.
- Un base de datos Redis que recibe los votos.
- Un worker en .NET que consume los votos y los almacena en…
- Una base de datos PostgresSQL que almacena sus datos en un volumen persistente.
- Una aplicación web en Node.js que muestra los resultados de la votación en tiempo real.
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:
- Vote: http://vote.k8s.local/
- Results: http://result.k8s.local/