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.

Arquitectura

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

tutorial_1

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

Tutorial2

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

tutorial3

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”

tutorial4

¿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

http://mesos.apache.org/

Kubernetes de Google

https://kubernetes.io/

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

LinkedIn: https://www.linkedin.com/in/heloisesanmiguel/

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *