Freigeben über


Technische Ressourcen zur Vorbereitung von Azure-Containern für eine Kubernetes-App

Dieser Artikel enthält technische Ressourcen und Empfehlungen, die Ihnen helfen, ein Containerangebot im Azure Marketplace für eine Kubernetes-Anwendung zu erstellen.

Ein umfassendes Beispiel der technische Ressourcen, die für ein App-basiertes Kubernetes-Containerangebot erforderlich sind, finden Sie auf der Seite mit den Beispielen für Container-Angebote für Kubernetes im Azure Marketplace.

Grundlegende technische Kenntnisse

Das Entwerfen, Erstellen und Testen dieser Ressourcen dauert lange, und es sind technische Kenntnisse in Bezug auf die Azure-Plattform und die Technologien erforderlich, die verwendet werden, um das Angebot zu erstellen.

Zusätzlich zur Vertrautheit mit Ihrer Lösungsdomäne sollte sich Ihr Engineeringteam mit den folgenden Microsoft-Technologien auskennen:

Voraussetzungen

  • Ihre Anwendung muss auf einem Helm-Chart basieren.

  • Das Helmdiagramm sollte keine Archivdateien enthalten .tgz . Alle Dateien sollten entpackt werden.

  • Wenn Sie über mehrere Diagramme verfügen, können Sie andere Steuerdiagramme als Unterdiagramme neben dem Haupt-Steuerdiagramm einschließen.

  • Das Chart muss alle Imageverweise und Digestdetails enthalten. Zur Laufzeit können keine anderen Diagramme oder Bilder heruntergeladen werden.

  • Sie benötigen einen aktiven Mandanten für die Veröffentlichung oder Zugriff auf einen Veröffentlichungsmandanten und ein Partner Center-Konto.

  • Sie müssen eine Azure Container Registry (ACR) erstellt haben, die zum aktiven Veröffentlichungsmandanten oben gehört. Sie laden das Cloud Native Application Bundle (CNAB) dazu hoch. Weitere Informationen finden Sie unter Erstellen einer Azure-Containerregistrierung.

  • Installieren Sie die aktuelle Version der Azure CLI.

  • Die Anwendung muss in einer Linux-Umgebung bereitgestellt werden können.

  • Die Bilder müssen frei von Sicherheitsrisiken sein. Anleitungen zur Angabe von Anforderungen für die Überprüfung von Sicherheitsrisiken finden Sie unter "Problembehandlung bei der Containerzertifizierung". Informationen zum Überprüfen auf Sicherheitsrisiken finden Sie unter Sicherheitsrisikobewertungen für Azure mit Microsoft Defender Vulnerability Management.

  • Wenn Das Pakettool manuell ausgeführt wird, muss Docker auf einem lokalen Computer installiert sein. Weitere Informationen finden Sie im WSL 2-Back-End-Abschnitt in der Docker-Dokumentation für Windows oder Linux. Dies wird nur auf Linux/Windows AMD64-Computern unterstützt.

Begrenzungen

  • Der Container-Marketplace unterstützt ausschließlich Linux-basierte AMD64-Images.
  • Container Marketplace-Angebot unterstützt die Bereitstellung für verwaltete AKS und Arc-Enabled Kubernetes . Ein einzelnes Angebot kann nur auf einen Clustertyp abzielen, entweder verwaltete AKS oder Arc-Enabled Kubernetes.
  • Angebote für Arc-Enabled Kubernetes-Cluster unterstützen nur vordefinierte Abrechnungsmodelle. Weitere Informationen zu Abrechnungsmodellen finden Sie unter Planen eines Azure-Containerangebots.
  • Einzelne Container werden nicht unterstützt.
  • Verknüpfte Azure Resource Manager-Vorlagen werden nicht unterstützt.

Übersicht über die Veröffentlichung

Der erste Schritt zum Veröffentlichen Ihres App-basierten Kubernetes-Containerangebots im Azure Marketplace besteht darin, Ihre Anwendung als Cloud Native Application Bundle (CNAB) zu packen. Das CNAB, bestehend aus den Artefakten Ihrer Anwendung, wird zuerst in Ihrer privaten Azure Container Registry (ACR) veröffentlicht und später an einen öffentlichen ACR von Microsoft übertragen und wird als einzelnes Artefakt verwendet, auf das Sie im Partner Center verweisen.

Von dort aus wird eine Überprüfung auf Sicherheitsrisiken durchgeführt, um sicherzustellen, dass Images sicher sind. Schließlich wird die Kubernetes-Anwendung als Erweiterungstyp für einen Azure Kubernetes Service-Cluster (AKS) registriert.

Sobald Ihr Angebot veröffentlicht wurde, nutzt Ihre Anwendung die Clustererweiterungen für das AKS-Feature , um Ihren Anwendungslebenszyklus innerhalb eines AKS-Clusters zu verwalten.

Ein Diagramm, das die drei Phasen der Paketverarbeitung von „Kopieren des Pakets in eine Microsoft-eigene Registrierung“ über „Sicherheitsrisikoüberprüfung“ bis zu „Registrierung vom Erweiterungstyp“ zeigt.

Gewähren von Zugriff auf Ihre Azure Container Registry-Instanz

Im Rahmen des Veröffentlichungsprozesses kopiert Microsoft Ihre CNAB von Ihrem ACR in ein microsofteigenes Azure Marketplace-spezifisches ACR. Die Bilder werden in eine öffentliche Registrierung hochgeladen, die für alle zugänglich ist. Für diesen Schritt müssen Sie Microsoft Zugriff auf Ihre Registrierung erteilen. Die ACR muss sich in demselben Microsoft Entra-Mandanten befinden, der mit Ihrem Partner Center-Konto verknüpft ist.

Microsoft verfügt über eine Erstanbieteranwendung, die für die Verarbeitung dieses Prozesses mit einer id von 32597670-3e15-4def-8851-614ff48c1efa. Erstellen Sie zunächst einen Dienstprinzipal basierend auf der Anwendung:

Hinweis

Wenn Ihr Konto nicht über die Berechtigung zum Erstellen eines Dienstprinzipals verfügt, gibt az ad sp create eine Fehlermeldung mit dem Hinweis „Nicht genügend Berechtigungen zum Abschließen des Vorgangs“ zurück. Wenden Sie sich an Ihre*n Microsoft Entra-Administrator*in, um einen Dienstprinzipal zu erstellen.

az login

Überprüfen Sie, ob für die Anwendung bereits ein Dienstprinzipal vorhanden ist:

az ad sp show --id 32597670-3e15-4def-8851-614ff48c1efa 

Wenn der vorherige Befehl keine Ergebnisse zurückgibt, erstellen Sie einen neuen Dienstprinzipal:

az ad sp create --id 32597670-3e15-4def-8851-614ff48c1efa

Notieren Sie sich die ID des Dienstprinzipals, die in den folgenden Schritten verwendet werden soll.

Rufen Sie als Nächstes die vollständige ID Ihrer Registrierung ab:

az acr show --name <registry-name> --query "id" --output tsv

Ihre Ausgabe sollte in etwa wie folgt aussehen:

...
},
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/myregistry",
...

Erstellen Sie dann eine Rollenzuweisung, mit der der Dienstprinzipal mithilfe der Werte, die Sie zuvor abgerufen haben, Daten aus Ihrer Registrierung pullen kann:

Zum Zuweisen von Azure-Rollen müssen Sie über Folgendes verfügen:

az role assignment create --assignee <sp-id> --scope <registry-id> --role acrpull

Registrieren Sie schließlich den Microsoft.PartnerCenterIngestion-Ressourcenanbieter im selben Abonnement, das zum Erstellen der Azure Container Registry-Instanz verwendet wurde:

az provider register --namespace Microsoft.PartnerCenterIngestion --subscription <subscription-id> --wait

Überwachen Sie die Registrierung, und überprüfen Sie, ob sie abgeschlossen wurde, bevor Sie fortfahren:

az provider show -n Microsoft.PartnerCenterIngestion --subscription <subscription-id>

Sammeln von Artefakten, um die Paketformatanforderungen zu erfüllen

Jedes CNAB besteht aus den folgenden Artefakten:

  • Helm-Chart
  • CreateUiDefinition
  • ARM-Vorlage
  • Manifestdatei

Aktualisieren des Helm-Charts

Stellen Sie sicher, dass das Helm-Chart den folgenden Regeln entspricht:

  • Alle Imagenamen und Verweise sind parametrisiert und werden in values.yaml als global.azure.images-Verweise dargestellt. Aktualisieren Sie ihre Helm-Diagrammvorlagendatei deployment.yaml so, dass sie auf diese Bilder verweist. Dadurch wird sichergestellt, dass der Imageblock aktualisiert werden kann, um auf die ACR-Bilder von Azure Marketplace zu verweisen. Screenshot des Beispiels zum erweiterten Hinzufügen von Tagunterstützung.Screenshot, der das Hinzufügen von Bildverweis zeigt.

  • Wenn Sie über mehrere Diagramme verfügen, können Sie andere Steuerdiagramme als Unterdiagramme neben dem Haupt-Steuerdiagramm einschließen. Alle abhängigen Steuerdiagramm-Bildverweise benötigen Aktualisierungen und sollten auf die Bilder verweisen, die im Hauptdiagramm values.yamlenthalten sind.

  • Beim Verweisen auf Bilder können Sie Tags oder Digests verwenden. Es ist jedoch wichtig zu beachten, dass die Bilder intern zurückgeschlüsselt werden, um auf die Microsoft-besitzer Azure Container Registry (ACR) zu verweisen. Wenn Sie ein Tag aktualisieren, muss eine neue Version des CNAB an den Azure Marketplace übermittelt werden. Dies ist so, dass die Änderungen in Kundenbereitstellungen widerspiegelt werden können.

    Screenshot des Beispiels zum Hinzufügen von Tagunterstützungsreferenzen.

Verfügbare Abrechnungsmodelle

Alle verfügbaren Abrechnungsmodelle finden Sie unter den Lizenzierungsoptionen für Azure Kubernetes-Anwendungen.

Vornehmen von Updates basierend auf Ihrem Abrechnungsmodell

Nachdem Sie die verfügbaren Abrechnungsmodelle überprüft haben, wählen Sie einen geeigneten Für Ihren Anwendungsfall aus, und führen Sie die folgenden Schritte aus:

Führen Sie die folgenden Schritte aus, um den Bezeichner in den Abrechnungsmodellen "Pro Kern", "Pro Pod", "Pro Knoten " hinzuzufügen:

  • Fügen Sie der Pod-Spezifikation in Ihren Workload-Yaml-Dateien eine Bezeichnung für die Abrechnungs-ID azure-extensions-usage-release-identifier hinzu.

    • Wenn die Workload als Bereitstellungen oder Replicasets oder Statefulsets- oder Daemonsets-Spezifikationen angegeben ist, fügen Sie diese Bezeichnung unter .spec.template.metadata.labels hinzu.

    • Wenn die Workload direkt als Pod-Spezifikationen angegeben wird, fügen Sie diese Bezeichnung unter ".metadata.labels" hinzu.

      Screenshot einer ordnungsgemäß formatierten Abrechnungsbezeichnerbezeichnung in einer Datei

      Screenshot einer ordnungsgemäß formatierten Abrechnungsbezeichnerbezeichnung in einer Datei

      Screenshot der CPU-Ressourcenanforderungen in einer Datei

      Screenshot der CPU-Ressourcenanforderungen in einer Datei

  • Geben Sie für das perCore-Abrechnungsmodell DIE CPU-Anforderung an, indem Sie das resources:requests Feld in das Containerressourcenmanifest einschließen. Dieser Schritt ist nur für das perCore-Abrechnungsmodell erforderlich.

    Screenshot der CPU-Ressourcenanforderungen in einer Datei

Zur Bereitstellungszeit ersetzt das Clustererweiterungsfeature den Abrechnungsbezeichnerwert durch den Namen der Erweiterungsinstanz.

Beispiele, die für die Bereitstellung der Azure-Voting-App konfiguriert sind, finden Sie hier:

Fügen Sie für das Abrechnungsmodell für benutzerdefinierte Zähler die unten aufgeführten Felder in der Datei "values.yaml" Ihrer Helmvorlage hinzu.

  • "clientId" sollte unter "global.azure.identity" hinzugefügt werden.
  • planId-Schlüssel sollte unter "global.azure.marketplace" hinzugefügt werden. planId
  • resourceId sollte unter "global.azure.extension.resrouceId" hinzugefügt werden.

Screenshot der benutzerdefinierten Zählerabrechnung.

Zur Bereitstellungszeit ersetzt das Clustererweiterungsfeature diese Felder durch die entsprechenden Werte. Beispiele finden Sie in der benutzerdefinierten Azure-Meter-App.

Überprüfen des Helm-Charts

Testen Sie, ob das Helm-Chart auf einem lokalen Computer installiert werden kann. So können Sie sicherstellen, dass es gültig ist. Sie können auch helm install --generate-name --dry-run --debug verwenden, um bestimmte Fehler bei der Vorlagengenerierung zu ermitteln.

Erstellen und Testen der Datei „createUiDefinition“

„createUiDefinition“ ist eine JSON-Datei zur Definition der Benutzeroberflächenelemente für das Azure-Portal bei der Bereitstellung der Anwendung. Weitere Informationen finden Sie unter:

Nachdem die Datei „createUiDefinition.json“ für Ihre Anwendung erstellt wurde, muss das Benutzererlebnis getestet werden. Um das Testen zu vereinfachen, kopieren Sie Den Dateiinhalt in die Sandkastenumgebung. Die Sandbox stellt Ihre Benutzeroberfläche in der aktuellen Vollbildportalumgebung dar. Die Sandbox ist die empfohlene Methode, um eine Vorschau der Benutzeroberfläche anzuzeigen.

Erstellen der ARM-Vorlage (Azure Resource Manager)

In einer ARM-Vorlage werden die Azure-Ressourcen definiert, die bereitgestellt werden sollen. Standardmäßig stellen Sie eine Clustererweiterungsressource für die Azure Marketplace-Anwendung bereit. Optional können Sie einen AKS-Cluster bereitstellen.

Derzeit sind nur die folgenden Ressourcentypen zulässig:

  • Microsoft.ContainerService/managedClusters
  • Microsoft.KubernetesConfiguration/extensions

Sehen Sie sich z. B. diese ARM-Beispielvorlage an, die Ergebnisse aus der zuvor verknüpften Beispiel-UI-Definition verwendet und Parameter an Ihre Anwendung übergeben soll.

Benutzerparameterflow

Es ist wichtig zu verstehen, wie Benutzerparameter durch die Artefakte fließen, die Sie erstellen und verpacken. Im Azure Voting App-Beispiel werden beim Erstellen der Benutzeroberfläche zunächst Parameter über eine createUiDefinition.json-Datei definiert:

Screenshot des in diesem Artikel verknüpften createUiDefinition-Beispiels. Definitionen für „value1“ und „value2“ werden angezeigt.

Parameter werden über den outputs Abschnitt exportiert:

Screenshot des in diesem Artikel verknüpften createUiDefinition-Beispiels. Ausgabezeilen für Anwendungstitel, „value1“ und „value2“, werden angezeigt.

Von dort aus werden die Werte an die Azure Resource Manager-Vorlage übergeben und während der Bereitstellung an das Helm-Diagramm weitergegeben:

Screenshot des in diesem Artikel verknüpften Azure Resource Manager-Vorlagenbeispiels. Unter „configurationSettings“ werden die Parameter für Anwendungstitel, „value1“ und „value2“, angezeigt.

Schließlich werden die Werte wie dargestellt in das Helmdiagramm values.yaml übergeben.

Screenshot des in diesem Artikel verknüpften Helm-Diagrammbeispiels. Werte für Anwendungstitel, „value1“ und „value2“, werden angezeigt.

Hinweis

In diesem Beispiel wird extensionResourceName auch parametrisiert und an die Clustererweiterungsressource übergeben. Auf ähnliche Weise können andere Erweiterungseigenschaften parametrisiert werden, z. B. das Aktivieren des automatischen Upgrades für Nebenversionen. Weitere Informationen zu Clustererweiterungseigenschaften finden Sie unter Optionale Parameter.

Paketlistendatei erstellen

Das Paketmanifest ist eine YAML-Datei zur Beschreibung des Pakets und seiner Inhalte. Anhand dieser Informationen weiß das Paketerstellungstool, wo sich die abhängigen Artefakte befinden.

Im Manifest werden folgende Felder verwendet:

Name Datentyp Beschreibung
applicationName String Name der Anwendung
publisher String Name des Herausgebers
Beschreibung String Kurze Beschreibung des Pakets
version Zeichenfolge im #.#.#-Format Versionszeichenfolge, die die Anwendungspaketversion beschreibt, stimmt möglicherweise oder nicht mit der Version der Binärdateien überein.
helmChart String Lokales Verzeichnis, in dem sich das Helm-Chart relativ zu dieser manifest.yaml-Datei befindet
clusterARMTemplate String Lokaler Pfad zu einer ARM-Vorlage, die einen AKS-Cluster beschreibt, der die Anforderungen im Einschränkungsfeld erfüllt
uiDefinition String Lokaler Pfad zu einer JSON-Datei, die eine Erstellungsoberfläche im Azure-Portal beschreibt
registryServer String Die ACR-Instanz, in die das finale CNAB gepusht werden soll
extensionRegistrationParameters Sammlung Spezifikation für die Erweiterungsregistrierungsparameter. Schließen Sie mindestens defaultScope als Parameter ein.
defaultScope String Der Standardbereich für die Erweiterungsinstallation. Zulässige Werte sind cluster und namespace. Wenn der cluster-Bereich festgelegt ist, ist pro Cluster nur eine Erweiterungsinstanz zulässig. Wenn der namespace-Bereich ausgewählt ist, ist pro Namespace nur eine Instanz zulässig. Da ein Kubernetes-Cluster über mehrere Namespaces verfügen kann, können mehrere Erweiterungsinstanzen vorhanden sein.
namespace String (Optional) Geben Sie den Namespace an, in dem die Erweiterung installiert wird. Diese Eigenschaft ist erforderlich, wenn defaultScope auf cluster festgelegt ist. Informationen zu Einschränkungen bei der Namespacebenennung finden Sie unter Namespaces und DNS.
supportedClusterTypes Sammlung (Optional) Geben Sie die von der Anwendung unterstützten Clustertypen an. Zulässige Typen sind – "managedClusters", "connectedClusters". "managedClusters" bezieht sich auf Azure Kubernetes Service (AKS)-Cluster. "connectedClusters" bezieht sich auf Azure Arc-fähige Kubernetes-Cluster. Wenn supportedClusterTypes nicht bereitgestellt wird, werden standardmäßig alle Verteilungen von "managedClusters" unterstützt. Wenn supportedClusterTypes bereitgestellt wird und kein bestimmter Clustertyp auf oberster Ebene bereitgestellt wird, werden alle Verteilungen und Kubernetes-Versionen für diesen Clustertyp als nicht unterstützt behandelt. Geben Sie für jeden Clustertyp eine Liste mit einer oder mehreren Verteilungen mit den folgenden Eigenschaften an:
-Verteilung
- distributionSupported
- nicht unterstützteVersions
distribution Liste Ein Array von Verteilungen, die dem Clustertyp entsprechen. Geben Sie den Namen bestimmter Verteilungen an. Legen Sie den Wert auf ["Alle"] fest, um anzugeben, dass alle Verteilungen unterstützt werden.
distributionSupported Boolean Ein boolescher Wert, der angibt, ob die angegebenen Verteilungen unterstützt werden. Wenn "False" angegeben wird, führt die Angabe von "UnsupportedVersions" zu einem Fehler.
unsupportedVersions Liste Eine Liste der Versionen für die angegebenen Verteilungen, die nicht unterstützt werden. Unterstützte Operatoren:
- "=" Angegebene Version wird nicht unterstützt. Beispiel: "=1.2.12"
- ">" Alle Versionen, die größer als die angegebene Version sind, werden nicht unterstützt. Beispiel: ">1.1.13"
- "<" Alle Versionen, die kleiner als die angegebene Version sind, werden nicht unterstützt. Beispiel: "<1.3.14"
- "..." Alle Versionen im Bereich werden nicht unterstützt. Beispiel: "1.1.2...1.1.15" (enthält den rechten Wert und schließt den linken Wert aus)

Ein für die Voting-App konfiguriertes Beispiel finden Sie im folgenden Beispiel einer Manifestdatei.

Strukturieren Ihrer Anwendung

Platzieren Sie die createUiDefinition-Datei, die ARM-Vorlage und die Manifestdatei neben dem Helm-Chart Ihrer Anwendung.

Ein Beispiel für ein ordnungsgemäß strukturiertes Verzeichnis finden Sie im Azure-Abstimmungsbeispiel.

Ein Beispiel für die Abstimmungsanwendung, die Azure Arc-fähige Kubernetes-Cluster unterstützt, finden Sie unter ConnectedCluster-only-Beispiel .

Weitere Informationen zum Einrichten eines Azure Arc-fähigen Kubernetes-Clusters für die Überprüfung der Anwendung finden Sie in der Schnellstartanleitung: Verbinden eines vorhandenen Kubernetes-Clusters mit Azure Arc.

Verwenden des Containerpaketerstellungstools

Nachdem Sie alle erforderlichen Artefakte hinzugefügt haben, führen Sie das Pakettool container-package-app aus, um die Artefakte zu überprüfen, das Paket zu erstellen und das Paket in die Azure-Containerregistrierung hochzuladen.

Da CNABs ein neues Format sind und eine Lernkurve aufweisen, haben wir ein Docker-Image für container-package-app die Bootstrapping-Umgebung und Tools erstellt, die zum erfolgreichen Ausführen des Pakettools erforderlich sind.

Bei der Verwendung des Paketerstellungstools haben Sie zwei Möglichkeiten. Sie können das Tool manuell verwenden oder in eine Bereitstellungspipeline integrieren.

Manuelles Ausführen des Paketerstellungstools

Das aktuelle Image des Paketerstellungstools kann aus mcr.microsoft.com/container-package-app:latest gepullt werden.

Der folgende Docker-Befehl pullt das aktuelle Image des Paketerstellungstools und bindet zudem ein Verzeichnis ein.

Wenn es sich um ~\<path-to-content> ein Verzeichnis handelt, das den zu packenden Inhalt enthält, wird der folgende Docker-Befehl im Container bereitgestellt ~/<path-to-content> /data . Ersetzen Sie ~/<path-to-content> dabei durch den Speicherort Ihrer eigenen Anwendung.

docker pull mcr.microsoft.com/container-package-app:latest

docker run -it -v /var/run/docker.sock:/var/run/docker.sock -v ~/<path-to-content>:/data --entrypoint "/bin/bash" mcr.microsoft.com/container-package-app:latest 

Führen Sie die folgenden Befehle in der container-package-app-Containershell aus. Ersetzen Sie <registry-name> durch den Namen Ihrer ACR-Instanz:

export REGISTRY_NAME=<registry-name>

az login 

az acr login -n $REGISTRY_NAME 

cd /data/<path-to-content>

Zum Authentifizieren des ACR gibt es zwei Optionen. Eine Option besteht darin, wie zuvor dargestellt, zu verwenden az login , und die zweite Option wird über Docker ausgeführt docker login 'yourACRname'.azurecr.io. Geben Sie Ihren Benutzernamen und Ihr Kennwort ein (Benutzername sollte Ihr ACR-Name sein, und das Kennwort ist der generierte Schlüssel, der in Azure-Portal angegeben ist) und führen Sie aus.

docker login <yourACRname.azurecr.io>

Screenshot des Docker-Anmeldebefehls in CLI.

Führen cpa verify Sie als Nächstes aus, um die Artefakte zu durchlaufen, und überprüfen Sie sie einzeln, und beheben Sie alle Fehler. Führen Sie die Ausführung aus cpa buildbundle , wenn Sie bereit sind, das CNAB-Paket in Ihre Azure-Containerregistrierung hochzuladen. Der cpa buildbundle Befehl führt den Überprüfungsprozess aus, erstellt das Paket und lädt das Paket in Ihre Azure-Containerregistrierung hoch.

cpa verify

Screenshot des Befehls

cpa buildbundle 

Hinweis

Verwenden Sie cpa buildbundle --force nur, wenn Sie ein vorhandenes Tag überschreiben möchten. Wenn Sie dieses CNAB bereits an ein Azure Marketplace-Angebot anfügen, erhöhen Sie stattdessen die Version in der Manifestdatei.

Integration in eine Azure-Pipeline

Ein Beispiel für die Integration container-package-app in eine Azure-Pipeline finden Sie im Azure Pipeline-Beispiel

Problembehandlung