Sdílet prostřednictvím


Příprava technických prostředků kontejneru Azure pro aplikaci Kubernetes

Tento článek poskytuje technické zdroje a doporučení, které vám pomůžou vytvořit nabídku kontejnerů na Azure Marketplace pro aplikaci Kubernetes.

Úplný příklad technických prostředků potřebných pro nabídku kontejnerů založených na aplikaci Kubernetes najdete v ukázkách nabídek kontejnerů na Azure Marketplace pro Kubernetes.

Základní technické znalosti

Navrhování, sestavování a testování těchto prostředků nějakou dobu trvá a vyžaduje technické znalosti platformy Azure i technologií používaných k vytvoření nabídky.

Kromě vaší domény řešení by technický tým měl mít znalosti o následujících technologiích Microsoftu:

Požadavky

  • Aplikace musí být založená na chartech Helm.

  • Chart Helm by neměl obsahovat .tgz archivní soubory. Všechny soubory by měly být rozbalené.

  • Pokud máte více grafů, můžete do hlavního chartu Helm zahrnout další grafy helmu jako dílčí grafy.

  • Všechny odkazy na obrázky a podrobnosti přehledu musí být zahrnuty do grafu. Za běhu nelze stáhnout žádné další grafy ani obrázky.

  • Musíte mít aktivního tenanta publikování nebo přístup k účtu tenanta publikování a Partnerského centra.

  • Musíte mít vytvořenou službu Azure Container Registry (ACR), která patří do aktivního tenanta publikování výše. Nahrajete do této sady nativních cloudových aplikací (CNAB). Další informace najdete v tématu Vytvoření služby Azure Container Registry.

  • Nainstalujte si nejnovější verzi Azure CLI.

  • Aplikace musí být nasaditelná do linuxového prostředí.

  • Image musí být bez ohrožení zabezpečení. Pokyny k určení požadavků na kontrolu ohrožení zabezpečení najdete v tématu Řešení potíží s certifikací kontejnerů. Další informace o kontrole ohrožení zabezpečení najdete v tématu Posouzení ohrožení zabezpečení pro Azure s využitím Microsoft Defender Správa zranitelností.

  • Pokud nástroj pro balení spouštíte ručně, musí být Docker nainstalovaný na místním počítači. Další informace najdete v části back-end WSL 2 v dokumentaci k Dockeru pro Windows nebo Linux. To se podporuje jenom na počítačích s Linuxem nebo Windows AMD64.

Omezení

  • Container Marketplace podporuje pouze image AMD64 založené na platformě Linux.
  • Nabídka Container Marketplace podporuje nasazení do spravovaného AKS a Kubernetes s podporou arc . Jedna nabídka může cílit pouze na jeden typ clusteru, a to buď spravované AKS, nebo Kubernetes s podporou arc.
  • Nabídky pro clustery Kubernetes s podporou arc podporují jenom předdefinované fakturační modely. Další informace o fakturačních modelech najdete v tématu Plánování nabídky kontejnerů Azure.
  • Jednotlivé kontejnery nejsou podporované.
  • Propojené šablony Azure Resource Manageru se nepodporují.

Přehled publikování

Prvním krokem k publikování nabídky kontejneru založené na aplikacích Kubernetes na Azure Marketplace je zabalení aplikace jako sada cloudových nativních aplikací (CNAB). CNAB, který se skládá z artefaktů vaší aplikace, se nejprve publikuje do privátní služby Azure Container Registry (ACR) a později se odešle do veřejného ACR vlastněného Microsoftem a použije se jako jediný artefakt, na který odkazujete v Partnerském centru.

Odsud se provádí kontrola ohrožení zabezpečení, aby se zajistilo zabezpečení imagí. Aplikace Kubernetes je nakonec zaregistrovaná jako typ rozšíření pro cluster Azure Kubernetes Service (AKS).

Po publikování nabídky vaše aplikace využívá rozšíření clusteru pro funkci AKS ke správě životního cyklu aplikace v clusteru AKS.

Diagram znázorňující tři fáze zpracování sady prostředků, které proudí z možnosti Zkopírovat sadu do registru vlastněného Microsoftem do kontroly ohrožení zabezpečení do registrace typu rozšíření.

Udělení přístupu ke službě Azure Container Registry

V rámci procesu publikování Microsoft hloubkově zkopíruje váš CNAB z ACR do ACR vlastněného Microsoftem a ACR specifické pro Azure Marketplace. Image se nahrají do veřejného registru, který je přístupný všem. Tento krok vyžaduje, abyste microsoftu udělili přístup k vašemu registru. ACR musí být ve stejném tenantovi Microsoft Entra, který je propojený s vaším účtem v Partnerském centru.

Společnost Microsoft má aplikaci první strany odpovědnou za zpracování tohoto procesu s nástrojem id 32597670-3e15-4def-8851-614ff48c1efa. Začněte vytvořením instančního objektu založeného na aplikaci:

Poznámka:

Pokud váš účet nemá oprávnění k vytvoření instančního objektu, az ad sp create vrátí chybovou zprávu s informacemi o nedostatečných oprávněních k dokončení operace. Požádejte správce Microsoft Entra o vytvoření instančního objektu.

az login

Ověřte, jestli pro aplikaci již existuje instanční objekt:

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

Pokud předchozí příkaz nevrací žádné výsledky, vytvořte nový instanční objekt:

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

Poznamenejte si ID instančního objektu, které se má použít v následujících krocích.

Dále získejte úplné ID vašeho registru:

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

Výstup by měl vypadat nějak takto:

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

Dále vytvořte přiřazení role, které instančnímu objektu udělí možnost načíst z registru pomocí dříve získaných hodnot:

Pokud chcete přiřazovat role Azure, musíte mít:

  • Microsoft.Authorization/roleAssignments/write oprávnění, jako je správce uživatelských přístupů nebo vlastník
az role assignment create --assignee <sp-id> --scope <registry-id> --role acrpull

Nakonec zaregistrujte Microsoft.PartnerCenterIngestion poskytovatele prostředků ve stejném předplatném, které jste použili k vytvoření služby Azure Container Registry:

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

Než budete pokračovat, monitorujte registraci a ověřte, že se dokončil:

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

Shromáždění artefaktů za účelem splnění požadavků na formát balíčku

Každý CNAB se skládá z následujících artefaktů:

  • Graf Helm
  • CreateUiDefinition
  • Šablona ARM
  • Soubor manifestu

Aktualizace chartu Helm

Ujistěte se, že chart Helm dodržuje následující pravidla:

  • Všechny názvy imagí a odkazy jsou parametrizovány a reprezentovány values.yaml jako odkazy global.azure.images. Aktualizujte soubor deployment.yaml šablony chartu Helm tak, aby odkazovat na tyto obrázky. Tím se zajistí, že se blok image dá aktualizovat tak, aby odkazoval na image ACR na Azure Marketplace. Snímek obrazovky znázorňující příklad odkazu na rozšířenou přidání značkySnímek obrazovky znázorňující přidání odkazu na obrázek

  • Pokud máte více grafů, můžete do hlavního chartu Helm zahrnout další grafy helmu jako dílčí grafy. Všechny odkazy na obrázky závislých helmů budou potřebovat aktualizace a měly by odkazovat na obrázky zahrnuté v hlavní graf values.yaml.

  • Při odkazování na obrázky můžete využít značky nebo přehledy. Je ale důležité si uvědomit, že image jsou interně přepnuty tak, aby odkazovaly na Službu Azure Container Registry (ACR) vlastněnou Microsoftem. Při aktualizaci značky se na Azure Marketplace musí odeslat nová verze CNAB. To znamená, že změny se můžou projevit v nasazeních zákazníků.

    Snímek obrazovky znázorňující příklad přidání odkazu na podporu značek

Dostupné modely fakturace

Všechny dostupné fakturační modely najdete v možnostech licencování pro aplikace Azure Kubernetes.

Provádění aktualizací na základě fakturačního modelu

Po kontrole dostupných fakturačních modelů vyberte jeden vhodný pro váš případ použití a proveďte následující kroky:

Pomocí následujících kroků přidejte identifikátor v modelech fakturace podle počtu jader, podů a uzlu:

  • Přidejte popisek azure-extensions-usage-release-identifier identifikátoru fakturace do specifikace podu v souborech yaml úloh .

    • Pokud je úloha určena jako nasazení, repliky nebo stavové sady nebo specifikace daemonsets, přidejte tento popisek pod .spec.template.metadata.labels.

    • Pokud je úloha zadána přímo jako specifikace podu, přidejte tento popisek do souboru .metadata.labels.

      Snímek obrazovky s popiskem správně formátovaného identifikátoru fakturace v souboru deployment.yaml Obsah připomíná ukázkový soubor depoyment.yaml propojený v tomto článku.

      Snímek obrazovky s popiskem správně formátovaného identifikátoru fakturace v souboru statefulsets.yaml Obsah připomíná ukázkový soubor statefulsets.yaml propojený v tomto článku.

      Snímek obrazovky s požadavky na prostředky procesoru v souboru daemonsets.yaml Obsah připomíná ukázkový soubor daemonsets.yaml propojený v tomto článku.

      Snímek obrazovky s požadavky na prostředky procesoru v souboru pods.yaml Obsah připomíná ukázkový soubor pods.yaml propojený v tomto článku.

  • V případě fakturačního modelu perCore zadejte požadavek procesoru resources:requests tak, že do manifestu prostředků kontejneru zahrnete pole. Tento krok se vyžaduje jenom pro model fakturace perCore .

    Snímek obrazovky s požadavky na prostředky procesoru v souboru pods.yaml Obsah se podobá ukázce na soubor modelu fakturace jádra, který je propojený v tomto článku.

V době nasazení nahradí funkce rozšíření clusteru hodnotu identifikátoru fakturace názvem instance rozšíření.

Příklady nakonfigurované pro nasazení hlasovací aplikace Azure najdete v následujících tématech:

V případě vlastního fakturačního modelu měřičů přidejte do souboru values.yaml šablony Helm níže uvedená pole.

  • ID klienta by mělo být přidáno v rámci global.azure.identity.
  • Klíč planId by se měl přidat pod global.azure.marketplace. planId
  • ResourceId by se mělo přidat do global.azure.extension.resrouceId.

Snímek obrazovky s vlastní fakturací měření

V době nasazení nahradí funkce rozšíření clusteru tato pole příslušnými hodnotami. Příklady najdete v aplikaci založené na vlastních měřičích Azure Vote.

Ověření chartu Helm

Abyste měli jistotu, že je chart Helm platný, otestujte, jestli je možné ho nainstalovat do místního clusteru. Můžete také použít helm install --generate-name --dry-run --debug ke zjištění určitých chyb generování šablon.

Vytvoření a otestování definice createUiDefinition

CreateUiDefinition je soubor JSON, který definuje prvky uživatelského rozhraní pro Azure Portal při nasazování aplikace. Další informace naleznete v tématu:

Po vytvoření souboru createUiDefinition.json pro vaši aplikaci je potřeba otestovat uživatelské prostředí. Pokud chcete zjednodušit testování, zkopírujte obsah souboru do prostředí sandboxu. Sandbox představuje vaše uživatelské rozhraní v aktuálním prostředí portálu na celé obrazovce. Sandbox je doporučený způsob, jak zobrazit náhled uživatelského rozhraní.

Vytvoření šablony Azure Resource Manageru (ARM)

Šablona ARM definuje prostředky Azure, které se mají nasadit. Ve výchozím nastavení nasadíte prostředek rozšíření clusteru pro aplikaci Azure Marketplace. Volitelně můžete nasadit cluster AKS.

V současné době povolujeme pouze následující typy prostředků:

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

Podívejte se například na tuto ukázkovou šablonu ARM navrženou tak, aby převzala výsledky z dříve propojené definice ukázkového uživatelského rozhraní a předala do aplikace parametry.

Tok uživatelských parametrů

Je důležité pochopit, jak tok uživatelských parametrů probíhá v artefaktech, které vytváříte a vytváříte. V příkladu aplikace Azure Voting App se parametry zpočátku definují při vytváření uživatelského rozhraní prostřednictvím souboru createUiDefinition.json:

Snímek obrazovky s příkladem createUiDefinition, který je propojený v tomto článku Zobrazí se definice pro hodnotu

Parametry se exportují prostřednictvím oddílu outputs :

Snímek obrazovky s příkladem createUiDefinition, který je propojený v tomto článku Zobrazí se výstupní řádky pro název aplikace, value1 a value2.

Odtud se hodnoty předávají do šablony Azure Resource Manageru a během nasazení se rozšíří do chartu Helm:

Snímek obrazovky s příkladem šablony Azure Resource Manageru, který je propojený v tomto článku V části configurationSettings jsou zobrazeny parametry pro název aplikace, value1 a value2.

Nakonec se hodnoty předají do chartu Helm, values.yaml jak je znázorněno.

Snímek obrazovky s příkladem chartu Helm propojeným v tomto článku Zobrazí se hodnoty pro název aplikace, value1 a value2.

Poznámka:

V tomto příkladu extensionResourceName je také parametrizován a předán prostředku rozšíření clusteru. Podobně lze parametrizovat i jiné vlastnosti rozšíření, jako je povolení automatického upgradu pro podverze. Další informace o vlastnostech rozšíření clusteru najdete v volitelných parametrech.

Vytvoření souboru manifestu

Manifest balíčku je soubor yaml, který popisuje balíček a jeho obsah, a říká nástroji pro balení, kde najít závislé artefakty.

Pole použitá v manifestu jsou následující:

Name Datový typ Popis
applicationName String Název aplikace
vydavatel String Název vydavatele
description String Stručný popis balíčku
version Řetězec ve #.#.# formátu Řetězec verze, který popisuje verzi balíčku aplikace, může nebo nemusí odpovídat verzi binárních souborů uvnitř.
HelmChart String Místní adresář, kde lze najít chart Helm vzhledem k tomuto manifest.yaml
clusterARMTemplate String Místní cesta, kde se dá najít šablona ARM popisící cluster AKS, který splňuje požadavky v poli omezení.
uiDefinition String Místní cesta, kde najdete soubor JSON, který popisuje prostředí pro vytvoření webu Azure Portal
registryServer String ACR, kde by se měl nasdílit konečný svazek CNAB
extensionRegistrationParameters Kolekce Specifikace parametrů registrace rozšíření Zahrňte alespoň defaultScope a jako parametr.
defaultScope String Výchozí obor instalace rozšíření. Přijaté hodnoty jsou cluster nebo namespace. Pokud cluster je obor nastavený, je pro každý cluster povolena pouze jedna instance rozšíření. Pokud namespace je vybraný obor, je pro každý obor názvů povolena pouze jedna instance. Protože cluster Kubernetes může mít více oborů názvů, může existovat více instancí rozšíření.
namespace String (Volitelné) Zadejte obor názvů, do který se rozšíření nainstaluje. Tato vlastnost je vyžadována, pokud defaultScope je nastavena na clusterhodnotu . Omezení pojmenování oboru názvů najdete v tématu Obory názvů a DNS.
supportedClusterTypes Kolekce (Volitelné) Zadejte typy clusteru podporované aplikací. Povolené typy jsou – managedClusters, connectedClusters. ManagedClusters odkazuje na clustery Azure Kubernetes Service (AKS). ConnectedClusters odkazuje na clustery Kubernetes s podporou Azure Arc. Pokud podporovanéClusterTypes není k dispozici, jsou ve výchozím nastavení podporovány všechny distribuce managedClusters. Pokud je k dispozici podporovaný Typ clusteru a daný typ clusteru nejvyšší úrovně není k dispozici, všechny distribuce a verze Kubernetes pro tento typ clusteru se považují za nepodporované. Pro každý typ clusteru zadejte seznam jedné nebo více distribucí s následujícími vlastnostmi:
-distribuce
– distributionSupported
– nepodporované verze
distribuce List Pole distribucí odpovídajících typu clusteru. Zadejte název konkrétních distribucí. Nastavte hodnotu na ["Vše"] tak, aby označí, že jsou podporovány všechny distribuce.
distributionSupported Logická hodnota Logická hodnota představující, zda jsou zadané distribuce podporovány. Pokud je false, poskytnutí nepodporovanýchversions způsobí chybu.
nepodporované verze List Seznam verzí pro zadané distribuce, které nejsou podporovány. Podporované operátory:
- "=" Daná verze není podporována. Například "=1.2.12"
– ">" Všechny verze větší než daná verze nejsou podporovány. Například> 1.1.13
– "<" Všechny verze menší než daná verze nejsou podporovány. Například< 1.3.14
- "..." Všechny verze v rozsahu nejsou podporovány. Například 1.1.2...1.1.15 (zahrnuje hodnotu na pravé straně a vyloučí hodnotu na levé straně).

Ukázku nakonfigurovanou pro hlasovací aplikaci najdete v následujícím příkladu souboru manifestu.

Strukturování aplikace

Umístěte soubor createUiDefinition, šablony ARM a souboru manifestu vedle chartu Helm vaší aplikace.

Příklad správně strukturovaného adresáře najdete v ukázce Azure Vote.

Ukázku hlasovací aplikace, která podporuje clustery Kubernetes s podporou Azure Arc, najdete v ukázce pouze ConnectedCluster .

Další informace o nastavení clusteru Kubernetes s podporou Azure Arc pro ověřování aplikace najdete v tématu Rychlý start: Připojení existujícího clusteru Kubernetes ke službě Azure Arc.

Použití nástroje pro balení kontejnerů

Po přidání všech požadovaných artefaktů spusťte nástroj pro container-package-app balení, který ověří artefakty, sestaví balíček a nahraje balíček do služby Azure Container Registry.

Vzhledem k tomu, že CNAB jsou nový formát a mají křivku učení, vytvořili jsme image Dockeru pro container-package-app prostředí bootstrapping a nástroje potřebné k úspěšnému spuštění nástroje pro balení.

Máte dvě možnosti použití nástroje pro balení. Můžete ho použít ručně nebo ho integrovat do kanálu nasazení.

Ruční spuštění nástroje pro balení

Nejnovější obrázek nástroje pro balení lze načíst z mcr.microsoft.com/container-package-app:latest.

Následující příkaz Dockeru načítá nejnovější image nástroje pro balení a také připojí adresář.

Za předpokladu ~\<path-to-content> , že je adresář obsahující obsah, který se má zabalit, se následující příkaz Dockeru připojí ~/<path-to-content> k /data kontejneru. Nezapomeňte nahradit ~/<path-to-content> umístěním vaší vlastní aplikace.

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 

V prostředí kontejneru container-package-app spusťte následující příkazy. Nezapomeňte nahradit <registry-name> názvem služby ACR:

export REGISTRY_NAME=<registry-name>

az login 

az acr login -n $REGISTRY_NAME 

cd /data/<path-to-content>

K ověření ACR existují dvě možnosti. Jednou z možností je použití, az login jak je znázorněno výše, a druhá možnost je prostřednictvím Dockeru spuštěním docker login 'yourACRname'.azurecr.io. Zadejte svoje uživatelské jméno a heslo (uživatelské jméno by mělo být název ACR a heslo je vygenerovaný klíč uvedený na webu Azure Portal) a spusťte ho.

docker login <yourACRname.azurecr.io>

Snímek obrazovky s příkazem pro přihlášení dockeru v rozhraní příkazového řádku

Dále spusťte cpa verify iteraci artefaktů a ověřte je po jednom a vyřešte případné chyby. Spusťte cpa buildbundle , až budete připravení zabalit a nahrát CNAB do služby Azure Container Registry. Příkaz cpa buildbundle spustí proces ověření, sestaví balíček a nahraje balíček do služby Azure Container Registry.

cpa verify

Snímek obrazovky s příkazem cpa Verify v rozhraní příkazového řádku

cpa buildbundle 

Poznámka:

Použijte cpa buildbundle --force pouze v případě, že chcete přepsat existující značku. Pokud jste už tento CNAB připojili k nabídce Azure Marketplace, místo toho navyšte verzi v souboru manifestu.

Integrace do služby Azure Pipeline

Příklad integrace container-package-app do služby Azure Pipeline najdete v příkladu služby Azure Pipeline.

Řešení problému