Compartir a través de


Arquitectura de servicios Akri

Importante

Operaciones de IoT de Azure, habilitado por Azure Arc, está actualmente en VERSIÓN PRELIMINAR. No se debería usar este software en versión preliminar en entornos de producción.

Tendrá que implementar una nueva instalación de Azure IoT Operations cuando esté disponible una versión disponible con carácter general, no podrá actualizar una instalación en versión preliminar.

Consulte Términos de uso complementarios para las versiones preliminares de Microsoft Azure para conocer los términos legales que se aplican a las características de Azure que se encuentran en la versión beta, en versión preliminar o que todavía no se han publicado para que estén disponibles con carácter general.

Este artículo le ayuda a comprender la arquitectura de servicios Akri. Después de obtener información sobre los componentes principales de servicios Akri, puede usarlos para detectar dispositivos y recursos y agregarlos al clúster de Kubernetes.

Los servicios Akri son una versión comercial administrada por Microsoft de Akri, un proyecto de Cloud Native Computing Foundation (CNCF) de código abierto.

Componentes principales

Los servicios Akri constan de los cinco componentes siguientes:

  • La configuración de Akri es un recurso personalizado en el que se asigna un nombre a un dispositivo. Esta configuración indica a los servicios Akri qué tipo de dispositivos buscar.
  • La instancia de Akri es un recurso personalizado que realiza un seguimiento de la disponibilidad y el uso de un dispositivo. Cada instancia de Akri representa un dispositivo hoja.
  • Los controladores de detección de Akri buscan el dispositivo configurado e informan al agente de los dispositivos detectados.
  • El agente de Akri crea el recurso personalizado de instancia de Akri.
  • El controlador de Akri le ayuda a usar un dispositivo configurado. El controlador ve cada instancia de Akri e implementa un pod de agente que sabe cómo conectarse al recurso y cómo usarlo.

Diagrama de la arquitectura de servicios Akri.

Definiciones de recursos personalizados

Una definición de recursos personalizados (CRD) es una extensión de API de Kubernetes que le permite definir nuevos tipos de objeto. Hay dos CRD de servicios Akri:

  • Configuración
  • Instancia

CRD de configuración de Akri

La CRD de configuración configura los servicios Akri. Usted crea las configuraciones que describen los recursos que se van a detectar y el pod que se va a implementar en un nodo que detecta un recurso. Para obtener más información, consulte CRD de configuración de Akri. El esquema CRD especifica los valores que deben tener todas las configuraciones, incluidas las siguientes:

  • Protocolo de detección para buscar recursos. Por ejemplo: ONVIF o udev.
  • spec.capacity que define el número máximo de nodos que pueden programar cargas de trabajo en este recurso.
  • spec.brokerPodSpec que define el pod del agente que se va a programar para cada uno de estos recursos notificados.
  • spec.instanceServiceSpec que define el servicio que proporciona un único punto de conexión estable para acceder al conjunto de pods de agente de cada recurso individual.
  • spec.configurationServiceSpec que define el servicio que proporciona un único punto de conexión estable para acceder al conjunto de todos los agentes para todos los recursos asociados a la configuración.

CRD de instancia de Akri

Cada instancia de Akri representa un recurso individual visible para el clúster. Por ejemplo, si hay cinco cámaras IP visibles para el clúster, hay cinco instancias. La CRD de instancia habilita la coordinación y el uso compartido de recursos de servicios Akri. Estas instancias almacenan el estado interno y no están diseñadas para que se editen. Para obtener más información, consulte Uso compartido de recursos en profundidad.

Agente

El agente de Akri implementa los complementos de dispositivo de Kubernetes para los recursos detectados. El agente de Akri ejecuta las siguientes tareas:

  • Observa los cambios de configuración para determinar qué recursos buscar.
  • Supervisa la disponibilidad de los recursos para determinar qué recursos se anunciarán. En un entorno perimetral, la disponibilidad de los recursos cambia con frecuencia.
  • Informa a Kubernetes de los cambios en el estado y la disponibilidad de los recursos.

Estas tareas, combinadas con el estado almacenado en la instancia, permiten que varios nodos compartan un recurso al tiempo que respetan los límites definidos por el valor spec.capacity.

Para obtener más información, consulte Agente en profundidad.

Controladores de detección

Un controlador de detección busca dispositivos. Entre los ejemplos de dispositivos se incluyen:

  • Sensores USB conectados a nodos.
  • GPU insertadas en nodos.
  • Cámaras IP en la red.

El controlador de detección informa de todos los dispositivos detectados al agente. A menudo, hay implementaciones de protocolo para detectar un conjunto de dispositivos, ya sea un protocolo de red, como OPC UA, o un protocolo de su propiedad. Los controladores de detección implementan el servicio DiscoveryHandler definido en discovery.proto. Se requiere un controlador de detección para registrarse con el agente, que hospeda el servicio Registration definido en discovery.proto.

Para obtener más información, consulte Controladores de detección personalizados.

Controlador

Los objetivos del controlador de Akri son los siguientes:

  • Crear o eliminar los pods y servicios que habilitan la disponibilidad de recursos.
  • Asegurarse de que las instancias estén alineadas con el estado del clúster en cualquier momento dado.

Para lograr estos objetivos, el controlador realiza lo siguiente:

  • Observa los cambios de instancia para determinar qué pods y servicios deberían existir.
  • Inspecciona aquellos nodos que están incluidos en instancias que ya no existen.

Estas tareas permiten al controlador de Akri asegurarse de que los agentes de protocolo y los servicios de Kubernetes se ejecuten en todos los nodos y expongan los recursos deseados, al tiempo que respetan los límites definidos por el valor spec.capacity.

Para obtener más información, consulte la documentación de Controlador en profundidad.