Implementación de una aplicación en un clúster de Azure Kubernetes Service

Completado

La empresa está buscando formas de implementar el servicio de representación de vídeo basado en la nube. Ha elegido Azure Kubernetes Service (AKS) como plataforma de desarrollo nativa de nube. Una vez que ha configurado el clúster, está listo para implementar uno de los componentes de la aplicación de representación de vídeo. Decide implementar una versión estática del sitio web de la empresa para explorar el proceso de implementación de Kubernetes.

Antes de analizar la forma de implementación de Kubernetes, se revisarán algunos de los pasos que debe seguir para implementar una aplicación similar en un entorno que no sea de Kubernetes.

Imagine que va a usar una máquina virtual (VM) de Azure como plataforma de destino. El primer paso consiste en preparar el software del servidor para hospedar la aplicación. Podrá:

  • Instalar el sistema operativo.
  • Asegúrese de actualizar el sistema operativo a las revisiones de seguridad y software más recientes.
  • Instalar y configurar el software de servidor web.
  • Implementar la aplicación web.

Repita este proceso para cada nueva máquina virtual cuando decida escalar el sitio web para controlar un aumento de la demanda de los clientes.

Un enfoque alternativo consiste en ejecutar el sitio web en una plataforma basada en contenedores como Azure Container Instances. No debe preocuparse por la tecnología de servidor subyacente, pero tendrá que configurar y administrar varios contenedores para usar esta estrategia manualmente.

Kubernetes y AKS le ayudan a organizar los contenedores. Las características de orquestación de contenedores de Kubernetes facilitan la administración de cargas de trabajo en el clúster. Las cargas de trabajo se implementan mediante contenedores creados a partir de imágenes de contenedor para ejecutar las aplicaciones en un clúster de AKS.

Aquí aprenderá a crear cargas de trabajo en el clúster de AKS.

¿Qué un registro de contenedor?

Un registro de contenedor permite almacenar imágenes de contenedor de forma segura en la nube para su posterior implementación. Puede considerar el registro de contenedor como un archivo que almacena varias versiones de la imagen de contenedor. Cada imagen almacenada tiene una etiqueta asignada para su identificación.

Por ejemplo, puede tener la imagen contoso-website:latest, que sería una versión diferente de la imagen con la etiqueta contoso-website:v1.0.0.

Diagrama en el que se muestra cómo se descargan las imágenes de contenedor desde un registro de contenedor a un clúster de Kubernetes mediante un archivo de manifiesto.

Los registros de contenedor pueden ser públicos o privados. Los registros privados necesitan credenciales para acceder a las imágenes y descargarlas, y son la estrategia que seguirá cuando almacene imágenes de contenedor.

Kubernetes solo permite implementar imágenes hospedadas en un registro de contenedor. La creación de un registro de contenedor privado normalmente forma parte de la estrategia de implementación estándar de AKS.

¿Qué es un pod de Kubernetes?

Un pod de Kubernetes agrupa los contenedores y las aplicaciones en una estructura lógica. Estos pods no tienen inteligencia y se componen de uno o varios contenedores de aplicaciones. Cada uno tiene una dirección IP, reglas de red y puertos expuestos.

Por ejemplo, si quiere buscar todas las cargas de trabajo relacionadas con contoso-website, debería consultar el clúster en busca de pods con la etiqueta app y el valor contoso-website.

¿Qué es la implementación de Kubernetes?

Diagrama en el que se muestra una implementación de Kubernetes con una etiqueta y tres pod.

Una implementación de Kubernetes es una evolución de pods. Una implementación encapsula los pods en un objeto inteligente que les permite escalarse horizontalmente. Puede duplicar y escalar fácilmente la aplicación para que admita más carga sin necesidad de configurar reglas de red complejas.

Las implementaciones permiten a los usuarios actualizar las aplicaciones si simplemente cambian la etiqueta de imagen, sin tiempo de inactividad. Al actualizar una implementación, en lugar de eliminar todas las aplicaciones, la implementación desactiva las aplicaciones en línea una por una. A continuación, las reemplaza por la versión más reciente. Este aspecto significa que cualquier implementación puede actualizar los pods que contiene sin ningún efecto visible en la disponibilidad.

Archivos de manifiesto de Kubernetes

Un archivo de manifiesto de Kubernetes permite describir las cargas de trabajo en el formato YAML mediante declaración y simplificar la administración de los objetos de Kubernetes.

Imagine que tiene que implementar manualmente una carga de trabajo. Debe tener en cuenta varios aspectos y administrarlos. Tendría que crear un contenedor, seleccionar un nodo concreto, encapsularlo en un pod, ejecutar el pod, supervisar la ejecución, etc.

Los archivos de manifiesto contienen toda la información necesaria para crear y administrar la carga de trabajo descrita.

¿Qué es una etiqueta de Kubernetes?

Una etiqueta de Kubernetes le permite agrupar objetos de Kubernetes de forma lógica. Estas etiquetas permiten al sistema consultar en el clúster los objetos que coinciden con una etiqueta con un nombre específico.

Estructura de un archivo de manifiesto

La estructura de los archivos de manifiesto varía en función del tipo de recurso que se cree. Pero los archivos de manifiesto comparten instrucciones comunes. Estas instrucciones definen varios aspectos, como las API que se van a usar y el tipo de carga de trabajo que se va a crear.

Las dos primeras entradas de todos los archivos de manifiesto tienen dos claves importantes: apiVersion y kind. Este es un ejemplo de un archivo de implementación.

apiVersion: apps/v1 # Where in the API it resides
kind: Deployment # The kind of workload we're creating

La clave apiVersion define el punto de conexión del servidor de API que administra el objeto que va a implementar.

La clave kind define la carga de trabajo que crea esta implementación.

Otras claves comunes de todos los archivos son metadata y name. Todos los recursos de Kubernetes deben tener un nombre. Este nombre va dentro de la clave metadata.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: contoso-website # This will be the name of the deployment

Agrupamiento de objetos en una implementación

Las implementaciones hacen uso de un elemento label para buscar y agrupar los pods. La etiqueta se define como parte del archivo de manifiesto de la implementación.

Aquí tiene un ejemplo. Observe el valor matchLabels definido en la definición de selector agregada a la definición de spec.

# deployment.yaml
# ...
spec:
  selector:
    matchLabels:
      app: contoso-website
# ...

A partir de este momento, todos los archivos tendrán estructuras diferentes en función del tipo de recurso que le indique a Kubernetes que se va a crear.

Aplicación de un archivo de implementación

Un archivo de manifiesto de implementación de Kubernetes se implementa mediante kubectl. Este es un ejemplo del comando.

kubectl apply -f ./deployment.yaml

Comprobación de conocimientos

1.

¿Qué un registro de contenedor?

2.

¿Qué es un archivo de manifiesto?