Desplegar una aplicación sencilla en Azure ACS usando Kubernetes
KUBERNETES: ORQUESTACIÓN DE CONTENEDORES
Los contenedores nos permiten crear entornos de trabajo rápidos, totalmente aislados, que pueden usarse para desarrollo o pruebas, todo esto usando sólo unas pocas líneas de comandos.
Esto los convierte en una forma de despliegue rápida y cómoda, pero ¿qué pasa si en vez de un sólo entorno queremos crear despliegues más complejos con múltiples contenedores que se comuniquen entre sí, cada uno de ellos con funciones especializadas?
Para este tipo de despliegues se pensaron los orquestadores, que son programas que se encargan de dirigir y organizar el comportamiento de los contenedores, permitiendo la ejecución de entornos complejos que pueden incluso escalarse de forma automática para atender a picos de demanda.
Algunos de los orquestadores que encontramos en el mercado son Swarm de Docker Inc que permite la creación de clusters de contenedores, Mesosphere DC/OS que además de funciones de cluster manager (Usando Apache Mesos) es también una plataforma de contenedores e incluso un sistema operativo, y por último, Kubernetes de Google que es la tecnología que en este momento lidera el mercado, ya que utiliza conceptos como los pod y los nodos que facilitan la gestión del cluster, con ventajas de uso como los numerosos casos de éxito en producción, además de ser soportado en las plataformas Cloud como Azure, AWS y por supuesto Google Cloud.
ESTRUCTURA DE KUBERNETES
Para entender el funcionamiento de Kubernetes lo mejor es repasar los conceptos y verlo de una forma gráfica:
- Pod: es una abstracción de un grupo de contenedores, agrupados en torno a elementos comunes como almacenamientos compartidos, una misma IP e información compartida como qué puertos usar.
- Nodo: Los nodos son las máquinas en las que se ejecutan los contenedores.
- Master: Es el coordinador del cluster, se encarga de escalar los contenedores, mantener las aplicaciones en el estado deseado, hacer actualizaciones de los despliegues.
YAML
Los archivos .yml contienen las configuraciones de nuestros despliegues, en ellos se especifican los servicios que necesita nuestra aplicación, las imágenes a utilizar, los puertos por los que se comunicará, los pod que queremos de cada servicio, etc.
Con este ejemplo de archivo podemos desplegar sólo con un par de comandos un servidor Nginx, extraído del enlace de documentacion de Kubernetes con un pequeño retoque para que funcionara (enlace):
apiVersion: apps/v1beta1 #usa esta versión si despliegas el cluster ACS del siguiente ejemplo
kind: Deployment
metadata:
name: nginx-deployment # este es el nombre del despliegue
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # aquí indicamos el número de réplicas que queremos ejecutar
template: # en esta sección creamos los pods usando la definición de esta plantilla
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9 # esta es la imagen que descargaremos
ports:
- containerPort: 80 # este es el puerto que usará la aplicación
– Prueba este despliegue usando el comando en tu cluster ACS (Abajo te dejo los pasos para desplegarlo en Azure)
kubectl apply -f «nombre_del_archivo.yml»
– Y ahora comprueba tu despliegue con los comandos kubectl get deployments, kubectl get pods o más detallado con kubectl describe deployments «nombre_del_despliegue»
– Si quieres exponer este despliegue prueba el comando
kubectl expose deployment «nombre_del_deployment» –type=LoadBalancer –name=nginx
Y ahora navega a la dirección IP de tu despliegue, que podrás ver con el comando kubectl get services
DESPLEGANDO UNA APLICACIÓN SENCILLA EN AZURE ACS CON KUBERNETES
Desplegar un pequeño contenedor con un servidor Nginx es interesante, pero una aplicación sencilla normalmente tiene un tier de front-end, uno de back-end, balanceadores, etc.
Lo más interesante es que conociendo los parámetros para crear los archivos .yaml o yml un despliegue tan sencillo se despliega de la misma forma que el ejemplo anterior, sorprendente ¿verdad?
Para empezar necesitamos:
1. Un grupo de recursos para guardarlo todo
2. Un servicio de contenedores de Azure (Azure ACS)
Depliégalo usando Azure CLI y el comando:
az acs create –orchestrator-type kubernetes –resource-group K8 –name clusterk8 –generate-ssh-keys
Si tienes una suscripción de prueba estarás limitado a 4 cores, así que debes limitar el despliegue, creando un sólo agente:
az acs create –orchestrator-type kubernetes –resource-group «grupo_de_recursos» –name «nombre_cluster» –generate-ssh-keys –agent-count 1
3. Ahora, para conectar al servicio, debes cargar las claves ssh en el CLI
az acs kubernetes get-credentials –resource-group «grupo_de_recursos» –name «nombre_cluster»
4. Vamos a clonar los archivos .yml que están en el repositorio de Github
git clone https://github.com/Azure-Samples/azure-voting-app-redis
5. IMPORTANTE: Navega con la consola hasta la carpeta que contiene los archivos
6. Y ahora realiza el despliegue!
kubectl apply -f azure-vote-all-in-one-redis.yaml
7. busca tu IP pública para conectarte
kubectl get services
8. O date una vuelta por los diferentes servicios con los comandos kubectl get deployments, kubectl get pods o más detallado con kubectl describe deployments «nombre_del_despliegue»
¿Te ha parecido complicado? seguro que no, así que adelante ¡ahora hay que experimentar!
SABER MÁS…
Docker Swarm
https://docs.docker.com/get-started/part4/#recap-and-cheat-sheet-optional
Mesosphere DC/OS
https://docs.mesosphere.com/1.11/overview/what-is-dcos/
Apache Mesos
Kubernetes de Google
Prueba Azure gratis por un mes
https://azure.microsoft.com/es-es/free/
Autor: Heloise Sanmiguel
Curso: Microsoft MCSA Windows Server 2016 + Microsoft MCSE Cloud Platform & Infrastructure
Centro: Instituto Tecnológico Tajamar
Año académico: 2017-2018