Partager via


Orchestrateur Azure IoT (préversion) – fournisseurs et composants

Important

Opérations Azure IoT (préversion) – activé parc Azure Arc est actuellement en PRÉVERSION. Vous ne devez pas utiliser ce logiciel en préversion dans des environnements de production.

Pour connaître les conditions juridiques qui s’appliquent aux fonctionnalités Azure en version bêta, en préversion ou plus généralement non encore en disponibilité générale, consultez l’Avenant aux conditions d’utilisation des préversions de Microsoft Azure.

Les fournisseurs sont un modèle d’extensibilité dans le service Orchestrateur Azure IoT (préversion) qui lui permet de prendre en charge les déploiements et la configuration sur un large éventail de plateformes de système d’exploitation et de mécanismes de déploiement. Les fournisseurs sont responsables de l’exécution des actions requises pour atteindre l’état souhaité d’une ressource.

Un fournisseur encapsule des connaissances spécifiques à la plateforme et met en place une fonctionnalité spécifique. En d’autres termes, le fournisseur forme une couche d’API au-dessus des ressources individuelles cibles telles que les graphiques Helm, les extensions ARC, etc., les regroupe en une entité unique et effectue sur elle des opérations telles que les installations, les suppressions et les mises à jour. Un fournisseur distinct pour gérer chacune de ces ressources cibles.

Helm

Le fournisseur Helm installe des graphiques Helm sur les emplacements cibles. Le fournisseur Helm utilise le nom du graphique Helm, le référentiel, la version et d’autres valeurs facultatives pour installer et mettre à jour les graphiques. Le fournisseur inscrit le nouveau client auprès de l’API Helm, recherche le référentiel spécifié et extrait le registre.

Si vous devez résoudre les problèmes du fournisseur Helm, consultez codes d’erreur du fournisseur Helm.

Configuration du fournisseur Helm

Les fournisseurs qui peuvent être utilisés pour une cible sont définis dans l’objet « topologies » de la ressource cible. Lorsque vous définissez les fournisseurs pour une cible, vous pouvez transmettre les détails de configuration destinés au fournisseur.

La configuration du fournisseur se présente dans la section topologies d’un manifeste cible.

Paramètres de configuration Description
name Nom de la configuration (en option).
configType Type de la configuration (en option). Par exemple, bytes
configData Tout autre détail de configuration (en option).
inCluster Indicateur défini sur true si la ressource est créée dans le cluster où l’extension a été installée.

Par exemple :

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

Paramètres du composant Helm

Lorsque vous utilisez le fournisseur Helm pour gérer une ressource de composant, la ressource prend les paramètres suivants dans la section composants d’une solution ou d’un manifeste cible:

Paramètre Type Description
name chaîne Nom du graphique Helm.
type string Type du composant, par exemple, helm.v3.
properties.chart object Détails du graphique Helm, y compris le nom du référentiel Helm, le nom du graphique et la version du graphique.
properties.values object Valeurs personnalisées pour le graphique Helm (en option).
properties.wait boolean Si la valeur est true, le fournisseur attend que tous les pods, pvcs, services, déploiements, statefulSets ou ReplicaSets soient prêts, avant de considérer comme réussie la création du composant (en option).

L’extrait de code de solution suivant illustre l’installation d’un graphique Helm à l’aide du fournisseur 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

Le fournisseur Kubectl applique les ressources personnalisées sur les clusters edge via des données YAML ou une URL. Le fournisseur utilise l’API Kubernetes pour obtenir les définitions de ressources à partir d’une URL, d’un YAML externe ou directement à partir des propriétés du composant de solution. L’API Kubernetes applique ensuite ces définitions de ressources personnalisées sur les clusters activés pour Arc.

Si vous devez résoudre les problèmes du fournisseur Kubectl, consultez codes d’erreur du fournisseur Kubectl.

Configuration du fournisseur Kubectl

Les fournisseurs qui peuvent être utilisés pour une cible sont définis dans l’objet « topologies » de la ressource cible. Lorsque vous définissez les fournisseurs pour une cible, vous pouvez transmettre les détails de configuration destinés au fournisseur.

La configuration du fournisseur se présente dans la section topologies d’un manifeste cible.

Paramètres de configuration Description
name Nom de la configuration (en option).
configType Type de la configuration (en option). Défini sur path si la définition ou les détails de la de ressource proviennent d’une URL externe. Défini sur inline si la définition ou les détails de la ressource sont spécifiés dans la section composants.
configData Tout autre détail de configuration (en option).
inCluster Indicateur défini sur true si la ressource est créée dans le cluster où l’extension a été installée.

Par exemple :

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

Paramètres du composant Kubectl

Lorsque vous utilisez le fournisseur Kubectl pour gérer une ressource de composant, la ressource prend les paramètres suivants dans la section composants d’une solution ou d’un manifeste cible:

Paramètre Type Description
name chaîne Nom de la ressource.
type string Type du composant, par exemple, yaml.k8s.
properties Définition de la ressource, fournie en tant que paramètre yaml ou resource .
properties.yaml string URL externe vers la définition YAML de la ressource. Uniquement pris en charge si le resourceparamètre n’est pas en cours d’utilisation.
properties.resource object Définition inline de la ressource. Uniquement pris en charge si le yamlparamètre n’est pas en cours d’utilisation.
properties.statusProbe object Définition inline de la fonctionnalité sonde d'intégrité de la ressource. Uniquement pris en charge si le resourceparamètre est en cours d’utilisation.

L’extrait de code de solution suivant illustre l’application d’une ressource personnalisée à l’aide d’une URL externe. Pour cette méthode, définissez le type de configuration du fournisseur sur chemin d’accès.

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

L’extrait de code de solution suivant illustre l’application d’une ressource personnalisée à l’aide des propriétés fournies inline. Pour cette méthode, définissez le type de configuration du fournisseur sur inline.

{
  "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": []
    }
  ]
}

Sonde d'intégrité de la ressource

Le fournisseur Kubectl dispose également de la fonctionnalité permettant de vérifier l’état d’un composant. Cette sonde d’intégrité de la ressource vous permet de définir à quoi ressemble une création et un déploiement des ressources personnalisées réussis. Elle peut également valider l’état de la ressource à l’aide de la propriété de sonde d’intégrité.

Cette fonctionnalité est disponible lorsque le type de configuration du fournisseur Kubectl est inline. La propriété de sonde d’intégrité est définie dans le cadre de la propriété du composant, en même temps que properties.resource.

Paramètre properties.statusProbe Type Description
succeededValues List[string] Liste des états qui déterminent qu’une ressource est appliquée avec succès.
failedValues List[string] Liste des états qui déterminent qu’une ressource est appliquée sans succès.
statusPath string Chemin d’accès permettant de vérifier l’état de la ressource.
errorMessagePath string Chemin d’accès permettant de rechercher le message d’erreur de ressource.
timeout string Durée en secondes ou minutes après laquelle s’achève la détection d’intégrité de la ressource.
interval string Intervalle de temps en secondes ou minutes entre deux sondes d’intégrité consécutives.
initialWait string Durée en secondes ou minutes avant d’initialiser la première sonde d’intégrité.

L’extrait de code de solution suivant illustre l’application d’une ressource personnalisée à l’aide d’une sonde d'intégrité.

{
  "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"
        }
      }
    }
  }
}