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:
- Základní znalost služeb Azure
- Návrh a návrh aplikací Azure
- Pracovní znalost Azure Resource Manageru
- Pracovní znalost JSON
- Pracovní znalost Nástroje Helm
- Pracovní znalost createUiDefinition
- Pracovní znalosti šablon Azure Resource Manageru (ARM)
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.
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 soubordeployment.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.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ů.
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.
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 .
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.
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:
nebo si prohlédněte příklad definice uživatelského rozhraní, která žádá o zadání vstupních dat pro novou nebo existující volbu clusteru a předá do aplikace parametry.
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:
Parametry se exportují prostřednictvím oddílu outputs
:
Odtud se hodnoty předávají do šablony Azure Resource Manageru a během nasazení se rozšíří do chartu Helm:
Nakonec se hodnoty předají do chartu Helm, values.yaml
jak je znázorněno.
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 cluster hodnotu . 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>
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
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.