Compartir vía


Versión preliminar de Orquestación de Azure IoT: proveedores y componentes

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.

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.

Los proveedores son un modelo de extensibilidad en el servicio de Orquestación de Azure IoT (versión preliminar) que le permite admitir implementaciones y configuraciones en una amplia gama de plataformas del sistema operativo y mecanismos de implementación. Los proveedores son responsables de ejecutar las acciones necesarias para lograr el estado deseado de un recurso.

Un proveedor encapsula conocimientos específicos de la plataforma e implementa una capacidad específica. En otras palabras, el proveedor forma una capa de API sobre los recursos de destino individuales, como gráficos de Helm, extensiones de ARC, etc., los agrupa en una sola entidad y realiza operaciones como instalaciones, eliminaciones y actualizaciones en ellos. Un proveedor independiente para manipular cada uno de estos recursos de destino.

Helm

El proveedor de Helm instala gráficos de Helm en las ubicaciones de destino. El proveedor de Helm usa el nombre del gráfico de Helm, el repositorio, la versión y otros valores opcionales para instalar y actualizar los gráficos. El proveedor registra el nuevo cliente con la API de Helm, busca el repositorio especificado y extrae el registro.

Si necesita solucionar problemas del proveedor de Helm, consulte Códigos de error del proveedor de Helm.

Configuración del proveedor de Helm

Los proveedores que se pueden usar para un destino se definen en el objeto "topologías" del recurso de destino. Al definir los proveedores para un destino, puede pasar los detalles de configuración del proveedor.

La configuración del proveedor va en la sección topologías de un manifiesto de destino.

Parámetros de configuración Descripción
name (Opcional) Nombre de la configuración.
configType (Opcional) Tipo de la configuración. Por ejemplo: bytes
configData (Opcional) Cualquier otro detalle de configuración.
inCluster Marca que se establece true en si el recurso se está creando en el clúster donde se ha instalado la extensión.

Por ejemplo:

{ 
  "role": "helm.v3", 
  "provider": "providers.target.helm",  
  "config": { 
    "inCluster": "true"
  } 
}

Parámetros de componente de Helm

Cuando se usa el proveedor de Helm para administrar un recurso de componente, el recurso toma los parámetros siguientes en la sección componentes de una solución o manifiesto de destino:

Parámetro Tipo Descripción
name cadena Nombre del gráfico de Helm.
type cadena Tipo del componente, por ejemplo, helm.v3.
properties.chart object Detalles del gráfico de Helm, incluido el nombre del repositorio de Helm, el nombre del gráfico y la versión del gráfico.
valores.propiedades object (Opcional) Valores personalizados para el gráfico de Helm.
properties.wait boolean (Opcional) Si se establece en true, el proveedor espera hasta que todos los pods, PVC, servicios, implementaciones, StatefulSets o ReplicaSets estén en un estado listo antes de considerar que la creación del componente se ha realizado correctamente.

En el fragmento de código de solución siguiente se demuestra cómo instalar un gráfico de Helm mediante el proveedor de Helm:

{
  "components": [
    {
      "name": "simple-chart",
      "type": "helm.v3",
      "properties": {
        "chart": {
          "repo": "oci://azureiotoperations.azurecr.io/simple-chart",
          "name": "simple-chart",
          "version": "0.1.0"
        },
        "values": {
          "e4iNamespace": "default",
          "mqttBroker": {
            "name": "aio-mq-dmqtt-frontend",
            "namespace": "default",
            "authenticationMethod": "serviceAccountToken"
          },
          "opcUaConnector": {
            "settings": {
              "discoveryUrl": "opc.tcp://opcplc-000000:50000",
              "authenticationMode": "Anonymous",
              "autoAcceptUnrustedCertificates": "true"
            }
          }
        }
      },
      "dependencies": []
    }
  ]
}

Kubectl

El proveedor kubectl aplica los recursos personalizados en los clústeres perimetrales a través de datos YAML o una dirección URL. El proveedor usa la API de Kubernetes para obtener las definiciones de recursos de una dirección URL de YAML externa o directamente desde las propiedades del componente de la solución. La API de Kubernetes aplica entonces estas definiciones de recursos personalizadas en los clústeres habilitados para Arc.

Si necesita solucionar problemas del proveedor de Kubectl, consulte Códigos de error del proveedor kubectl.

Configuración del proveedor kubectl

Los proveedores que se pueden usar para un destino se definen en el objeto "topologías" del recurso de destino. Al definir los proveedores para un destino, puede pasar los detalles de configuración del proveedor.

La configuración del proveedor va en la sección topologías de un manifiesto de destino.

Parámetros de configuración Descripción
name (Opcional) Nombre de la configuración.
configType (Opcional) Tipo de la configuración. Establecer en path si la definición de recursos o los detalles proceden de una dirección URL externa. Se establece eninlinesi la definición de recursos o los detalles se especifican en la sección componentes.
configData (Opcional) Cualquier otro detalle de configuración.
inCluster Marca que se establece true en si el recurso se está creando en el clúster donde se ha instalado la extensión.

Por ejemplo:

{ 
  "role": "yaml.k8s", 
  "provider": "providers.target.kubectl",  
  "config": { 
    "inCluster": "true"
  } 
}

Parámetros del componente Kubectl

Cuando se usa el proveedor kubectl para administrar un recurso de componente, el recurso toma los parámetros siguientes en la seccióncomponentes de un manifiesto de solución o de destino:

Parámetro Tipo Descripción
name cadena Nombre del recurso.
type cadena Tipo del componente, por ejemplo, yaml.k8s.
properties Definición del recurso, proporcionado como un parámetroyaml oresource.
properties.yaml cadena Dirección URL externa a la definición de YAML del recurso. Solo se admite si el parámetro resource es no en uso.
properties.resource object Definición insertada del recurso. Solo se admite si el parámetro yaml es no en uso.
properties.statusProbe object (Opcional) Definición insertada de sondeo de estado de recursos funcionalidad. Solo se admite si el resource parámetro está en uso.

El siguiente fragmento de código de la solución demuestra la aplicación de un recurso personalizado mediante una dirección URL externa. Para este método, establezca el tipo de configuración del proveedor en ruta de acceso.

{
  "components": [
    {
      "name": "gatekeeper",
      "type": "kubectl",
      "properties": {
        "yaml": "https://raw.githubusercontent.com/open-policy-agent/gatekeeper/master/deploy/gatekeeper.yaml"
      }
    }
  ]
}

En el fragmento de código de solución siguiente demuestra la aplicación de un recurso personalizado con propiedades que se proporcionan alineadas. Para este método, establezca el tipo de configuración del proveedor en insertado.

{
  "components": [ 
    {
      "name": "my-asset",
      "type": "kubectl",
      "properties": {
        "resource": {
          "apiVersion": "apiextensions.k8s.io/v1",
          "kind": "CustomResourceDefinition",
          "metadata": {
            "annotations": "controller-gen.kubebuilder.io/version: v0.10.0",
            "labels": {
              "gatekeeper.sh/system": "yes"
            },
            "Name": "assign.mutations.gatekeeper.sh"
          },
          "spec": {...}
        }
      },
      "dependencies": []
    }
  ]
}

Sondeo de estado de recursos

El proveedor kubectl también tiene la funcionalidad de comprobar el estado de un componente. Este sondeo de estado de recursos le permite definir el aspecto de la creación y la implementación correctas de recursos personalizados. También puede validar el estado del recurso mediante la propiedad de sondeo de estado.

Esta funcionalidad está disponible cuando el tipo de configuración del proveedor Kubectl está insertado. La propiedad de sonda de estado se define como elemento de la propiedad de componente, junto aproperties.resource.

Parámetro Properties.statusProbe Tipo Descripción
succeededValues List[string] Lista de estados que definen un recurso aplicado correctamente.
failedValues List[string] Lista de estados que definen un recurso aplicado sin éxito.
statusPath cadena Ruta de acceso para comprobar el estado del recurso.
errorMessagePath cadena Ruta de acceso para comprobar el mensaje de error del recurso.
timeout cadena Tiempo en segundos o minutos después del cual finalizará el sondeo de estado del recurso.
intervalo cadena Intervalo de tiempo en segundos o minutos entre dos sondeos de estado consecutivos.
initialWait cadena Tiempo en segundos o minutos antes de inicializar el primer sondeo de estado.

En la siguiente solución se muestra cómo aplicar un recurso personalizado con un sondeo de estado.

{
  "solution": {
    "components": {
      "name": "gatekeeper-cr",
      "type": "yaml.k8s",
      "properties": {
        "resource": {
          "apiVersion": "apiextensions.k8s.io/v1",
          "kind": "CustomResourceDefinition",
          "metadata": {
            "annotations": "controller-gen.kubebuilder.io/version: v0.10.0",
            "labels": {
              "gatekeeper.sh/system": "yes"
            },
            "name": "assign.mutations.gatekeeper.sh"
          },
          "spec": {...}
        },
        "statusProbe": {
          "succeededValues": [
            "true",
            "active"
          ],
          "failedValues": [
            "false",
            "fail"
          ],
          "statusPath": "$.status.conditions.status",
          "errorMessagePath": "$.status.conditions.message",
          "timeout": "5m",
          "interval": "2s",
          "initialWait": "10s"
        }
      }
    }
  }
}