Llegamos a ustedes gracias a:



Reportajes y análisis

Cómo empezar con Kubernetes

[28/07/2017] Con cada innovación vienen nuevas complicaciones. Los contenedores permitieron empaquetar y ejecutar aplicaciones en un factor de forma conveniente y portátil, pero la gestión de contenedores a escala es un reto, por decir lo menos.

Kubernetes, producto del trabajo realizado internamente en Google para resolver ese problema, proporciona un marco único para administrar cómo se ejecutan los contenedores en todo un clúster. Los servicios que ofrece están generalmente agrupados bajo el término "orquestación", pero que abarca gran parte del territorio: programación de contenedores, descubrimiento de servicios entre contenedores, balanceo de carga entre sistemas, actualizaciones/rollbacks, alta disponibilidad y más.

En esta guía vamos a avanzar a través de los fundamentos de la configuración de Kubernetes, y a complementar esto con aplicaciones basadas en contenedores. Esto no pretende ser una introducción a los conceptos de Kubernetes, sino más bien una manera de mostrar cómo estos conceptos se juntan en ejemplos simples para ejecutar Kubernetes.

Elegir un host Kubernetes

Kubernetes nació para gestionar contenedores Linux. Sin embargo, a partir de Kubernetes 1.5, también soporta Windows Server Containers, aunque el control de Kubernetes debe seguir ejecutándose en Linux. Por supuesto, con la ayuda de la virtualización, puede comenzar con Kubernetes en cualquier plataforma.

Si está optando por ejecutar Kubernetes en su propio hardware o máquinas virtuales, una forma común de hacerlo es obtener una distribución de Linux que agrupa Kubernetes. Esto elimina la necesidad de configurar Kubernetes en una distribución dada, no solo el proceso de descarga e instalación, sino incluso algunos de los procesos de configurar y administrar.

CoreOS Tectonic, por nombrar una de tales distros, se centra en contenedores y Kubernetes llegando a la exclusión casi total de cualquier otra cosa. RancherOS toma un enfoque similar, y del mismo modo automatiza gran parte de la configuración. Ambos se pueden instalar en una variedad de entornos: bare metal, máquinas virtuales AWS de Amazon, Google Compute Engine, OpenStack y así sucesivamente.

Otro enfoque es ejecutar Kubernetes encima de una distribución convencional de Linux, aunque normalmente viene con más temas de administración y manipulación manual. Red Hat Enterprise Linux tiene Kubernetes en su repositorio de paquetes, por ejemplo, pero incluso Red Hat recomienda su uso solo para pruebas y experimentación. En lugar de intentar codificar algo a mano, se recomienda a los usuarios de la pila de Red Hat que utilicen Kubernetes a través de OpenShift PaaS, ya que OpenShift ahora usa Kubernetes como su propio orquestador nativo.

Muchas distribuciones convencionales de Linux proporcionan herramientas especiales para configurar Kubernetes y otras pilas de software de gran tamaño. Ubuntu, por ejemplo, proporciona una herramienta llamada Conjure-up que se puede utilizar para implementar la versión de subida de Kubernetes tanto en instancias en nube como casos bare-metal.

Elegir una nube Kubernetes

Kubernetes está disponible como un elemento de edición estándar en muchas nubes, aunque aparezca como una característica nativa en Google Cloud Platform (GCP). GCP ofrece dos formas principales de ejecutar Kubernetes. La forma más conveniente y estrechamente integrada es a través de Google Container Engine, lo que le permite ejecutar herramientas de línea de comandos de Kubernetes para administrar el clúster creado.

Como alternativa, puede utilizar Google Compute Engine para configurar un clúster de cálculo y desplegar Kubernetes manualmente. Este método requiere más trabajo pesado, pero permite personalizaciones que no son posibles con el Container Engine. Quédese con Container Engine si está empezando con contenedores. Más adelante, después de entrenarse y si quiere probar algo más avanzado, como una versión personalizada de Kubernetesor con sus propias modificaciones, puede desplegar VMs ejecutando una distribución de Kubernetes.

Amazon EC2 tiene soporte nativo para contenedores, pero no soporte nativo para Kubernetes como un sistema de orquestación de contenedores. Ejecutar Kubernetes en AWS es similar a usar Google Compute Engine: Configurar un cluster de computación, luego desplegar Kubernetes manualmente.

Muchas distribuciones de Kubernetes vienen con instrucciones detalladas para obtener la configuración de AWS. CoreOS Tectonic, por ejemplo, incluye un instalador gráfico, pero también soporta la herramienta de aprovisionamiento de infraestructura Terraform. Como alternativa, la herramienta kops de Kubernetes puede utilizarse para proporcionar un grupo de máquinas virtuales genéricas en AWS (típicamente utilizando Debian Linux, pero también soporta parcialmente otros sabores de Linux).

Microsoft Azure tiene soporte para Kubernetes a través del Azure Container Service. Sin embargo, no es un soporte "nativo" en el sentido de que Kubernetes sea un servicio hospedado en Azure. En su lugar, Kubernetes se despliega mediante una plantilla Azure Resource Manager. El soporte de Azure para otros frameworks de orquestación de contenedores, como Docker Swarm y Mesosphere DC/OS, funciona de la misma manera. Si desea un control total, como en cualquiera de las otras nubes descritas aquí, siempre puede instalar una distribución enfocada en Kubernetes en una máquina virtual de Azure.

Una manera rápida de proveer un clúster básico de Kubernetes en una variedad de ambientes, cloud o de otra manera, es usar un proyecto llamado Kubernetes Anywhere. Este script funciona en Google Compute Engine, Microsoft Azure y VMware vSphere (se requiere vCenter). En cada caso, proporciona cierto grado de automatización para la configuración.

Tenga su propio pequeño nodo Kubernetes

Si solo está ejecutando Kubernetes en un entorno local como una máquina de desarrollo, y no necesita toda la enchilada Kubernetes, hay algunas maneras de configurar "lo suficiente" Kubernetes para tal uso.

Uno, que es proporcionado por el equipo de desarrollo de Kubernetes sí mismo, es Minikube. Ejecútelo y obtendrá un clúster de Kubernetes de un solo nodo desplegado en un host de virtualización de su elección. Minikube tiene algunos requisitos previos, como la interfaz de línea de comandos kubectl y un entorno de virtualización como VirtualBox, pero estos están fácilmente disponibles como binarios para MacOS, Linux y Windows.

Para los usuarios de CoreOS en MacOS, está el Kubernetes Solo, que se ejecuta en una máquina virtual CoreOS y proporciona una aplicación de barra de estado para la gestión rápida. Solo también incluye el gestor de paquetes Kubernetes Helm (más sobre Helm debajo), de modo que las aplicaciones empaquetadas para Kubernetes son fáciles de obtener y configurar.

Acelere su clúster de contenedores

Una vez que Kubernetes esté funcionando, ya está listo para comenzar a implementar y administrar contenedores. Puede aprovechar las ops de contenedores basándose en una de las muchas demostraciones de aplicaciones basadas en contenedores disponibles.

Tome una demostración de aplicación basada en contenedor existente, ensámblela usted mismo para ver cómo se compone, desplácese y, a continuación, modifíquela de forma incremental hasta que se acerque a algo útil para usted. Si ha elegido encontrar su base a través de Minikube, puede usar el tutorial Hello Minikube para crear un contenedor Docker que tenga una sencilla aplicación Node.js en una instalación de demostración de Kubernets de un solo nodo. Una vez que comprende la idea, puede hacer intercambios en sus propios contenedores y practicar el despliegue de los mismos.

El siguiente paso es implementar un ejemplo de aplicación similar a uno que pueda utilizar en producción, y familiarizarse con los conceptos más avanzados de Kubernetes tales como vainas (uno o más contenedores que contienen una aplicación), servicios (conjuntos lógicos de vainas), conjuntos de réplicas (para proporcionar auto-sanación en caso de falla de la máquina) y despliegues (versión de la aplicación). Levante el capó de la aplicación de ejemplo de WordPress/MySQL, por ejemplo, y verá más que simples instrucciones sobre cómo implementar las piezas en Kubernetes y hacerlo funcionar. También verá detalles de implementación para muchos conceptos utilizados por las aplicaciones Kubernetes a nivel de producción. Aprenderá a configurar volúmenes persistentes para preservar el estado de una aplicación, cómo exponer vainas entre sí y con el mundo exterior a través de los servicios, cómo almacenar contraseñas y claves de aplicación API como secretos, y así sucesivamente.

Weaveworks tiene una aplicación de ejemplo, la tienda Sock Shop (tienda de calcentines), que muestra cómo un patrón de microservicios se puede utilizar para componer una aplicación en Kubernetes. La tienda de calcetines será más útil para personas familiarizadas con las tecnologías subyacentes-Node.js, Go kit y Spring Boot-, pero los principios básicos están destinados a trascender los frameworks particulares e ilustrar las tecnologías nativas de la nube.

Si echó un vistazo a la aplicación de WordPress/MySQL e imaginó que podría haber una aplicación de Kubernetes pre-cocinada que satisfaga sus necesidades, probablemente tenga razón. Kubernetes tiene un sistema de definición de aplicaciones llamado Helm, que proporciona una manera de empaquetar, hacer la versión y compartir aplicaciones Kubernetes. Un número de aplicaciones populares (GitLab, WordPress) y bloques de construcción de aplicaciones (MySQL, Nginx) tienen "tablas Helm fácilmente disponibles a través del portal de Kubeapps.

Navegando por Kubernetes

Kubernetes simplifica la gestión de contenedores a través de poderosas abstracciones como vainas y servicios, a la vez que proporciona una gran flexibilidad a través de mecanismos como etiquetas y espacios de nombres, lo cual puede ser utilizado para segregar vainas, servicios y despliegues (tales como desarrollo, puesta en escena, las cargas de trabajo de producción).

Si toma uno de los ejemplos anteriores y configura diferentes instancias en varios espacios de nombres, puede practicar la realización de cambios en los componentes de cada espacio de nombres independiente de los demás. A continuación, puede utilizar despliegues para permitir que las actualizaciones se desplieguen a través de las vainas en un espacio de nombres dado, de forma incremental.

El siguiente gran paso más allá de este tipo de ejercicios es aprender cómo Kubernetes puede ser impulsado por herramientas para gestionar la infraestructura. Puppet, por ejemplo, tiene un módulo para crear y manipular recursos en Kubernetes, mientras que Terraform de HashiCorp tiene un incipiente pero creciente soporte para Kubernetes como un recurso.

Si planea utilizar este tipo de gestor de recursos, tenga en cuenta que las diferentes herramientas pueden aportar suposiciones muy diferentes a la tabla. Puppet y Terraform, por ejemplo, por defecto utilizan infraestructuras mutables e inmutables, respectivamente. Esas diferencias filosóficas y de comportamiento pueden determinar lo fácil o difícil que será crear la configuración de Kubernetes que necesita.