Teilen über


Azure IoT Orchestrator Preview: Anbieter und Komponenten

Wichtig

Die von Azure Arc aktivierte Azure IoT Operations Preview befindet sich derzeit in der VORSCHAU. Sie sollten diese Vorschausoftware nicht in Produktionsumgebungen verwenden.

Die zusätzlichen Nutzungsbestimmungen für Microsoft Azure-Vorschauen enthalten rechtliche Bedingungen. Sie gelten für diejenigen Azure-Features, die sich in der Beta- oder Vorschauversion befinden oder aber anderweitig noch nicht zur allgemeinen Verfügbarkeit freigegeben sind.

Anbieter sind ein Erweiterbarkeitsmodell im Azure IoT Orchestrator Preview-Dienst, das es ermöglicht, Bereitstellungen und Konfigurationen über eine Vielzahl von Betriebssystemplattformen und Bereitstellungsmechanismen hinweg zu unterstützen. Anbieter sind für das Ausführen der erforderlichen Aktionen verantwortlich, um den gewünschten Zustand einer Ressource zu erreichen.

Ein Anbieter kapselt plattformspezifische Kenntnisse und implementiert eine bestimmte Funktion. Anders ausgedrückt bildet der Anbieter eine API-Ebene über den einzelnen Zielressourcen wie Helm-Charts, ARC-Erweiterungen usw., bündelt sie in eine einzelne Entität und führt Vorgänge wie Installationen, Löschungen und Updates für sie aus. Ein separater Anbieter, der jede dieser Zielressourcen behandelt.

Helm

Der Helm-Anbieter installiert Helm-Charts in den Zielspeicherorten. Der Helm-Anbieter verwendet den Namen, das Repository, die Version und andere optionale Werte, um die Charts zu installieren und zu aktualisieren. Der Anbieter registriert den neuen Client mit der Helm-API, sucht das angegebene Repository und ruft die Registrierung ab.

Wenn Sie Probleme mit dem Helm-Anbieter beheben müssen, lesen Sie Fehlercodes von Helm-Anbietern.

Konfiguration des Helm-Anbieters

Die Anbieter, die für ein Ziel verwendet werden können, werden im „Topologie“-Objekt der Zielressource definiert. Wenn Sie die Anbieter für ein Ziel definieren, können Sie Konfigurationsdetails für den Anbieter übergeben.

Die Anbieterkonfiguration befindet sich im Abschnitt Topologien eines Zielmanifests.

Config parameters Beschreibung
name (Optional) Name der Konfiguration
ConfigType (Optional) Typ der Konfiguration Beispiel: bytes
configData (Optional) Alle sonstigen Konfigurationsdetails
inCluster Ein Flag, das auf true festgelegt ist, wenn die Ressource im Cluster erstellt wird, in dem die Erweiterung installiert wurde.

Beispiel:

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

Helm-Komponentenparameter

Wenn Sie den Helm-Anbieter zum Verwalten einer Komponentenressource verwenden, übernimmt die Ressource die folgenden Parameter im Abschnitt Komponenten einer Lösung oder eines Zielmanifests:

Parameter Typ BESCHREIBUNG
name Zeichenfolge Name des Helm-Charts
Typ Zeichenfolge Typ der Komponente, z. B. helm.v3.
properties.chart Objekt Details zum Helm-Chart, einschließlich des Namens des Helm-Repositorys, des Chartnamens und der Chartversion.
properties.values Objekt (Optional) Benutzerdefinierte Werte für das Helm-Chart
properties.wait boolean (Optional) Wenn dieser Wert auf „Wahr“ festgelegt ist, wartet der Anbieter, bis alle Pods, PVCs, Dienste, Bereitstellungen, StatefulSets oder ReplicaSets im Zustand „Bereit“ sind, bevor die Komponentenerstellung als erfolgreich gewertet wird.

Der folgende Codeschnipsel veranschaulicht eine Lösung für die Installation eines Helm-Charts mithilfe des Helm-Anbieters:

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

Der kubectl-Anbieter wendet die benutzerdefinierten Ressourcen über YAML-Daten oder eine URL auf den Edgeclustern an. Der Anbieter verwendet die Kubernetes-API, um die Ressourcendefinitionen aus einer externen YAML-URL oder direkt aus den Eigenschaften der Lösungskomponente abzurufen. Die Kubernetes-API wendet dann diese benutzerdefinierten Ressourcendefinitionen auf die Arc-fähigen Cluster an.

Wenn Sie Probleme mit dem kubectl-Anbieter beheben müssen, lesen Sie Fehlercodes von kubectl-Anbietern.

Konfiguration des kubectl-Anbieters

Die Anbieter, die für ein Ziel verwendet werden können, werden im „Topologie“-Objekt der Zielressource definiert. Wenn Sie die Anbieter für ein Ziel definieren, können Sie Konfigurationsdetails für den Anbieter übergeben.

Die Anbieterkonfiguration befindet sich im Abschnitt Topologien eines Zielmanifests.

Config parameters Beschreibung
name (Optional) Name der Konfiguration
ConfigType (Optional) Typ der Konfiguration Legen Sie diesen Wert auf path fest, wenn die Ressourcendefinition oder -details von einer externen URL stammen. Legen Sie diesen Wert auf inline fest, wenn die Ressourcendefinition oder -details im Abschnitt „Komponenten“ angegeben sind.
configData (Optional) Alle sonstigen Konfigurationsdetails
inCluster Ein Flag, das auf true festgelegt ist, wenn die Ressource im Cluster erstellt wird, in dem die Erweiterung installiert wurde.

Beispiel:

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

kubectl-Komponentenparameter

Wenn Sie den kubectl-Anbieter zum Verwalten einer Komponentenressource verwenden, übernimmt die Ressource die folgenden Parameter im Abschnitt Komponenten einer Lösung oder eines Zielmanifests:

Parameter Typ BESCHREIBUNG
name Zeichenfolge Der Name der Ressource.
Typ Zeichenfolge Typ der Komponente, z. B. yaml.k8s.
properties Definition der Ressource, die entweder als yaml- oder als resource-Parameter bereitgestellt wird.
properties.yaml Zeichenfolge Externe URL zur YAML-Definition der Ressource. Wird nur unterstützt, wenn der resource-Parameter nicht verwendet wird.
properties.resource Objekt Inlinedefinition der Ressource Wird nur unterstützt, wenn der yaml-Parameter nicht verwendet wird.
properties.statusProbe Objekt (Optional) Inlinedefinition der Ressourcenstatustest-Funktionalität. Wird nur unterstützt, wenn der resource-Parameter verwendet wird.

Der folgende Codeschnipsel veranschaulicht eine Lösung für das Anwenden einer benutzerdefinierten Ressource mithilfe einer externen URL. Legen Sie für diese Methode den Konfigurationstyp des Anbieters auf path fest.

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

Der folgende Codeschnipsel veranschaulicht eine Lösung für das Anwenden einer benutzerdefinierten Ressource mithilfe inline bereitgestellter Eigenschaften. Legen Sie für diese Methode den Konfigurationstyp des Anbieters auf inline fest.

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

Ressourcenstatustest

Der kubectl-Anbieter verfügt auch über die Funktionalität zum Überprüfen des Status einer Komponente. Mithilfe dieses Ressourcenstatustests können Sie definieren, was unter einer erfolgreichen Erstellung und Bereitstellung benutzerdefinierter Ressourcen verstanden wird. Er kann auch den Status der Ressource mithilfe der Statustest-Eigenschaft überprüfen.

Diese Funktionalität ist verfügbar, wenn der Konfigurationstyp des kubectl-Anbieters inlineist. Die Statustest-Eigenschaft wird zusammen mit properties.resource als Teil der Komponenteneigenschaft definiert.

Properties.statusProbe parameter type Beschreibung
succeededValues List[string] Liste der Status, die eine erfolgreich angewendete Ressource definieren
failedValues List[string] Liste der Status, die eine nicht erfolgreich angewendete Ressource definieren
statusPath Zeichenfolge Pfad zum Überprüfen des Status der Ressource
errorMessagePath Zeichenfolge Pfad zum Überprüfen der Ressourcenfehlermeldung
timeout Zeichenfolge Die Zeit in Sekunden oder Minuten, nach dem der Statustest für die Ressource beendet wird.
interval Zeichenfolge Das Zeitintervall in Sekunden oder Minuten zwischen zwei aufeinander folgenden Statustests.
initialWait Zeichenfolge Die Zeit in Sekunden oder Minuten vor dem Initialisieren des ersten Statustests.

Der folgende Codeschnipsel veranschaulicht eine Lösung für das Anwenden einer benutzerdefinierten Ressource mithilfe eines Statustests.

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