Dell EMC Infrastructure as Code (IaC) (es)

10 minutos de lectura

Questo post è disponibile anche in Italiano

Cloud, containers, Kubernetes, IaC y DevOps son hoy entre los términos más buscados en Internet por una sencilla razón, la necesidad de acelerar el desarrollo de las aplicaciones. Para actuar esta tendencia, la infraestructura de almacenamiento a soporto necesita ser configurada en cada momento según las necesidades de las aplicaciones siguiendo un enfoque práctico que permita de “construir” la infraestructura en un modo análogo a como se construyen las aplicaciones, o sea, usando código.

Wikipedia define IaC (Infrastructure as Code) como “el proceso de gestión y aprovisionamiento de los centros de datos informáticos a través de archivos de definición legibles por máquina, en lugar de configuraciones de hardware físico o a través de herramientas de configuración interactivas”.

Se podría pensar que para implementar la IaC es suficiente escribir una serie di scripts que permitan un cierto grado de automatismo. Sin embargo, resulta evidente que el solo uso de scripts comporta un notable empeño de manutención y una continua actualización de los mismos a medida que la infraestructura cambia.

IaC es un concepto diferente, la IaC preveé el empleo de best practices y procesos de desarrollo de software de tipo agile para la gestión de la infraestructura. La IaC es parte de DevOps y por lo tanto finalizada a la “continuous delivery”. Para eliminar las complejidades de conocer en detalle como interactuar con la infraestructura la IaC utiliza una serie de instrumentos para la gestión de la misma via código y orquestadores estándares.

En este post analizaremos las herramientas de la IaC que permiten una automatización repetible, consistente y robusta de las infraestructuras de storage.

IaC y sistemas de almacenamiento de storage, 101

Los sistemas de storage de Dell EMC pueden ser consumidos como Infrastructure as Code mediante una variedad de instrumentos de desarrollo y automatización de entornos, desde el más bajo al más alto nivel de integración, a través de APIs, kits de desarrollo de software, plugins para VMware, herramientas de automatización como vRealize Orchestrator y módulos para la gestión como Ansible. Los sistemas Dell EMC también implementan el plugin CSI que habilita la integración con Kubernetes permitiendo el provisioning de volúmenes de almacenamiento persistentes.

Como indica su nombre, IaC implica el uso de código, código en archivos de texto. ¿Por qué usar archivos de texto? Existen varias razones:

  • Primero porque los archivos de texto son muy fáciles de leer, compartir y editar.
  • La segunda razón es que permiten un simple control del versioning (v1, v3, etc).
  • Tercero, los archivos de texto pueden ser de tipo declarable. Declarable es un concepto importante, declarable significa que en estos archivos se expresa lo que se quiere obtener (what), o sea el estado deseado, sin la necesidad de especificar cómo hacerlo (how). Kubernetes es un ejemplo de plataforma declarativa. Un modelo declarativo o descriptivo (what) contrasta con el modelo imperativo (how). En este último es necesario especificar los pasos secuenciales o la lista de comandos que deben ejecutarse para llegar al estado deseado.
  • Una cuarta razón es que los archivos de texto constituyen una documentación ejecutable.
infrastructure-as-code-101
infrastructure-as-code-101 (click to enlarge)

Para sus sistemas de storage,Dell EMC implementa la IaC a todos los niveles.

infrastructure-as-code-devops-integrations
infrastructure-as-code-devops-integrations (click to enlarge)

Comencemos desde el nivel más bajo de integración de la IaC, REST:API

REST:API

Es posible afirmar que las REST:API no son sinónimo de automatismo pero constituyen las bases para la automatización. Lenguajes como Python o PowerShell pueden ser utilizados en la escritura de los scripts para acceder a las API, y desde este punto de vista, tales lenguajes constituyen un segundo nivel de integración.

La comunicación en un ambiente REST:API es HTTP a través de IP. Cada llamada se autentica con la GUI de administración del sistema de almacenamiento (Dell EMC Unisphere). Una ventaja importante de las REST:API es que todas las llamadas de administración son versionadas, esto significa que generalmente podemos actualizar la GUI a la última versión cuando necesario sin comprometer el funcionamiento de los scripts que continuarán funcionando exactamente de la misma manera que antes. Las secuencias de comandos se pueden actualizar en un segundo momento para aprovechar las nuevas funciones de las versiones de GUI más recientes.

infrastructure-as-code-rest-api
infrastructure-as-code-rest-api (click to enlarge)

Las API utilizan los 4 verbos principales: GET, POST, PUT y Delete.

REST es una metodología sencilla de manipulación de datos y todos los sistemas storage de Dell EMC disponen de una interfaz API (Dell EMC Unity APIDell EMC PowerMax API) con la cual es posible realizar actividades como el monitoring, el provisioning e incluso las copias locales (snap) y remotas.

ANSIBLE

Ansible es un software de administración y configuración con el cual en modo simple es posible realizar el provisioning, la gestión y orquestación de un ambiente IT. Ansible ha sido diseñado para implementaciones multinivel y está basado en un lenguaje procedural.

Los comandos en Ansible se escriben en archivos llamados playbooks utilizando YAML como lenguaje que describe las actividades (plays) para ejecutar las acciones (tasks) que se quieren realizar. YAML es un lenguaje que utiliza un formato de serialización de datos diseñado para ser muy fácil de leer.

Los playbooks interactúan con módulos Ansible (escritos en Python) ya desarrollados por Dell EMC que permiten de automatizar la administración de los sistemas de almacenamiento. Los módulos Ansible tienen un ciclo continuo de desarrollo y una vez validados se publican en el repositorio di GitHub. Módulos Ansible PowerMax , módulos Ansible Unity.

Los módulos Ansible incluyen tareas como leer, crear, modificar y eliminar objetos (volúmenes, grupo de volúmenes, host, copias, etc)

infrastructure-as-code-ansible-modules
infrastructure-as-code-ansible-modules (click to enlarge)

Ansible presenta numerosas ventajas.

  • no requiere el uso de agentes (es agentless).
  • es idempotente, esto significa que una task se ejecutará solo una vez incluso si dicha tarea se invoca muchas veces.
  • es extensible, el código fuente está disponible en GitHub lo que permite a la TI de desarrollar playbooks complejos y extensiones para otras plataformas.
  • es repetible lo que asegura consistencia en la automatización del data center.
  • es escalable, los módulos son en grado de orquestar flujos de trabajo para uno o más sistemas de almacenamiento lo que contribuye a un automatismo a escala mediante el uso de templates.
vRO (VMware vRealize Orchestrator)

Dell EMC mantiene un enfoque importante en el ecosistema de VMware, ya que este tipo de entorno es sin duda alguna el más ampliamente implementado en los principales centros de datos. Dell EMC y VMware, ambas sociedades parte integrante de Dell Technologies, tienen numerosas integraciones tecnológicas de profundo nivel. En lo que respecta a la automatización con VMware significa absoluta compatibilidad con vRealize Automation (vRA) y vRealize Orchestration (vRO).

VMware vRealize Orchestrator (vRO) es una herramienta de automatización de procesos que permite de realizar tareas operativas y de administración automatizadas en ambientes VMware.  Con vRO es posible crear rutinas de automatización para flujos de trabajo complejos utilizando un enfoque simple como arrastrar y soltar (drag and drop)

Dell EMC ha desarrollado un conjunto completo de flujos de trabajo (workflows) en la forma de un plugin vRO para sus principales sistemas de storage.

infrastructure-as-code-vrealize-orchestrator
infrastructure-as-code-vrealize-orchestrator (click to enlarge)

El plugin vRO emplea en modo transparente las REST:API (parte de Unisphere) y expone las funcionalidades (provisioning, copias local y remota, etc) del sistema de almacenamiento en forma de bloques programables que se pueden utilizar y/o integrar con otras tareas en el diseño de un flujo de trabajo.

En pocas palabras, el plugin vRO permite de consumir un sistema de storage como PowerMax, Unity o XtremIO en modo simple ofreciendo automatización.  En este link es posible ver una demo de vRO con PowerMax.

CSI (Container Storage Interface)

Kubernetes puede considerarse la plataforma estándar para la orquestación de contenedores de Linux. Los contenedores son por naturaleza efímeros y fueron desarrollados para aplicaciones de tipo stateless que normalmente no requieren un almacenamiento persistente. En este tipo de aplicaciones los datos se eliminan cuando el contenedor se elimina, se reprograma, se reinicia o sufre un crash. Esto significa que los datos creados mientras la aplicación de ejecuta en una determinada sesión se pierden en la siguiente.

Muchas aplicaciones sin embargo necesitan de un almacenamiento persistente. Por ejemplo, ambientes como un database de producción o datos que deben ser compartidos entre diferentes aplicaciones. En estos casos la persistencia del dato es fundamental como así también la necesidad que los mismos sean almacenados y compartidos en un sistema de storage que ofrezca disponibilidad y protección de tipo mission-critical.

infrastructure-as-code-csi-plugin
infrastructure-as-code-csi-plugin (click to enlarge)

La gestión de un espacio de almacenamiento persistente para los contenedores presenta una serie de desafíos. Por ejemplo, cuando los contenedores se reprograman (scheduling), pueden ser eliminados en un host y reprogramarse en un host diferente. En tales casos, el almacenamiento debe también cambiar y estar disponible en el nuevo host para que el contenedor se inicie correctamente. En otras palabras, en necesario un método para Kubernetes capaz manejar el sistema de storage.

La interfaz de almacenamiento de contenedores (CSI, Container Storage Interface)

infrastructure-as-code-csi-powermax
infrastructure-as-code-csi-powermax (click to enlarge)

es un estándar que ofrece un nivel de abstracción para la conexión entre los volúmenes lógicos del entorno de Kubernetes y los volúmenes de almacenamiento (LUNs). Gracias al plugin CSI los grupos de desarrollo aplicativo pueden gestionar el almacenamiento sin necesidad de conocer detalles sobre el sistema de storage aportando simplicidad a la implementación de aplicaciones basadas en microservicios.

Dell EMC dispone del plugin CSI para sus principales plataformas de almacenamiento.  CSI plugin para PowerMax, CSI plugin para Unity.

Conclusiones

La IaC es un enfoque a la automatización de la infraestructura basado en best-practices de desarrollo de software (DevOps) que ofrece numerosas ventajas a la TI:

Procesos automatizados y consistentes. Un sistema de almacenamiento gestionado por orquestadores y API significa una gestión ágil, flexible y un control detallado sobre las operaciones.

infrastructure-as-code-summary
infrastructure-as-code-summary (click to enlarge)

La IaC permite a los ambientes aplicativos manejar sistemas complejos a escala.

Los cambios a la infraestructura pueden hacerse en forma continua y segura, sin necesidad de definir un proyecto entero antes de aplicarlos

Mantener un bajo TCO porque gestión del entorno es simplificada y veloz gracias al uso de plugin/código

infrastructure-as-code-big-picture
infrastructure-as-code-big-picture (click to enlarge)
Para mayor información:

Dell EMC Storage Automation and Developer Resources

VMware & PowerMax

Dell EMC PowerMax & IaC

#IWork4Dell

Este post también está disponible en: Italiano (Italiano)