Udostępnij za pośrednictwem


Przygotowywanie zasobów technicznych kontenera platformy Azure dla aplikacji Kubernetes

Ten artykuł zawiera zasoby techniczne i zalecenia ułatwiające utworzenie oferty kontenera w witrynie Azure Marketplace dla aplikacji Kubernetes.

Aby zapoznać się z kompleksowym przykładem zasobów technicznych wymaganych dla oferty kontenera opartej na aplikacji Kubernetes, zobacz Przykłady ofert kontenerów w witrynie Azure Marketplace dla platformy Kubernetes.

Podstawowa wiedza techniczna

Projektowanie, kompilowanie i testowanie tych zasobów wymaga czasu i wymaga wiedzy technicznej zarówno platformy Azure, jak i technologii używanych do tworzenia oferty.

Oprócz domeny rozwiązania zespół inżynierów powinien mieć wiedzę na temat następujących technologii firmy Microsoft:

Wymagania wstępne

  • Aplikacja musi być oparta na wykresie helm.

  • Pakiet Helm nie powinien zawierać .tgz plików archiwum. Wszystkie pliki powinny być rozpakowane.

  • Jeśli masz wiele wykresów, możesz dołączyć inne wykresy helm jako wykresy podrzędne oprócz głównego wykresu helm.

  • Wszystkie odwołania do obrazu i szczegóły skrótu muszą być uwzględnione na wykresie. W czasie wykonywania nie można pobrać żadnych innych wykresów ani obrazów.

  • Musisz mieć aktywną dzierżawę publikowania lub dostęp do dzierżawy publikowania i konta Centrum partnerskiego.

  • Musisz utworzyć usługę Azure Container Registry (ACR), która należy do aktywnej dzierżawy publikowania powyżej. Do tego przekażesz pakiet aplikacji natywnej chmury (CNAB). Aby uzyskać więcej informacji, zobacz Tworzenie usługi Azure Container Registry.

  • Instalowanie najnowszej wersji interfejsu wiersza polecenia platformy Azure.

  • Aplikacja musi być wdrażana w środowisku systemu Linux.

  • Obrazy muszą być wolne od luk w zabezpieczeniach. Aby uzyskać wskazówki dotyczące określania wymagań dotyczących skanowania luk w zabezpieczeniach, zobacz Rozwiązywanie problemów z certyfikacją kontenera. Aby dowiedzieć się więcej na temat skanowania pod kątem luk w zabezpieczeniach, zobacz Oceny luk w zabezpieczeniach dla platformy Azure za pomocą Zarządzanie lukami w zabezpieczeniach w usłudze Microsoft Defender.

  • W przypadku ręcznego uruchamiania narzędzia do tworzenia pakietów należy zainstalować maszynę lokalną. Aby uzyskać więcej informacji, zobacz sekcję zaplecza WSL 2 w dokumentacji platformy Docker dla systemu Windows lub Linux. Jest to obsługiwane tylko na maszynach z systemem Linux/Windows AMD64.

Ograniczenia

  • Platforma Container Marketplace obsługuje tylko obrazy AMD64 oparte na platformie Linux.
  • Oferta witryny Container Marketplace obsługuje wdrażanie w zarządzanych rozwiązaniach AKS i Kubernetes z obsługą usługi Arc. Pojedyncza oferta może dotyczyć tylko jednego typu klastra— zarządzanego usługi AKS lub platformy Kubernetes z obsługą usługi Arc.
  • Oferty dla klastrów Kubernetes z obsługą usługi Arc obsługują tylko wstępnie zdefiniowane modele rozliczeń. Aby uzyskać więcej informacji na temat modeli rozliczeniowych, zobacz Planowanie oferty kontenera platformy Azure.
  • Pojedyncze kontenery nie są obsługiwane.
  • Połączone szablony usługi Azure Resource Manager nie są obsługiwane.

Omówienie publikowania

Pierwszym krokiem do opublikowania oferty kontenera opartej na aplikacji Kubernetes w witrynie Azure Marketplace jest spakowanie aplikacji jako pakietu aplikacji natywnej dla chmury (CNAB). CnAB składający się z artefaktów aplikacji jest po raz pierwszy publikowany w prywatnej usłudze Azure Container Registry (ACR), a później wypchnięty do publicznego rejestru ACR należącego do firmy Microsoft i jest używany jako pojedynczy artefakt, do którego odwołujesz się w Centrum partnerskim.

Stamtąd skanowanie luk w zabezpieczeniach jest wykonywane w celu zapewnienia bezpieczeństwa obrazów. Na koniec aplikacja Kubernetes jest zarejestrowana jako typ rozszerzenia klastra usługi Azure Kubernetes Service (AKS).

Po opublikowaniu oferty aplikacja korzysta z rozszerzeń klastra dla usługi AKS w celu zarządzania cyklem życia aplikacji w klastrze usługi AKS.

Diagram przedstawiający trzy etapy przetwarzania pakietów, przepływające z

Udzielanie dostępu do usługi Azure Container Registry

W ramach procesu publikowania firma Microsoft kopiuje plik CNAB z usługi ACR do należącego do firmy Microsoft, usługi ACR specyficznego dla witryny Azure Marketplace. Obrazy są przekazywane do publicznego rejestru, który jest dostępny dla wszystkich. Ten krok wymaga udzielenia firmie Microsoft dostępu do rejestru. Usługa ACR musi znajdować się w tej samej dzierżawie firmy Microsoft, która jest połączona z kontem Centrum partnerskiego.

Firma Microsoft ma aplikację innej firmy odpowiedzialną za obsługę tego procesu za pomocą elementu id 32597670-3e15-4def-8851-614ff48c1efa. Aby rozpocząć, utwórz jednostkę usługi na podstawie aplikacji:

Uwaga

Jeśli Twoje konto nie ma uprawnień do tworzenia jednostki usługi, az ad sp create zwraca komunikat o błędzie zawierający komunikat "Niewystarczające uprawnienia do ukończenia operacji". Skontaktuj się z administratorem firmy Microsoft Entra, aby utworzyć jednostkę usługi.

az login

Sprawdź, czy jednostka usługi już istnieje dla aplikacji:

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

Jeśli poprzednie polecenie nie zwraca żadnych wyników, utwórz nową jednostkę usługi:

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

Zanotuj identyfikator jednostki usługi, który ma być używany w poniższych krokach.

Następnie uzyskaj pełny identyfikator rejestru:

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

Dane wyjściowe powinny wyglądać podobnie do następujących:

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

Następnie utwórz przypisanie roli, aby przyznać jednostce usługi możliwość ściągania z rejestru przy użyciu uzyskanych wcześniej wartości:

Aby przypisać role platformy Azure, musisz mieć:

  • Microsoft.Authorization/roleAssignments/write uprawnienia, takie jak administrator dostępu użytkowników lub właściciel
az role assignment create --assignee <sp-id> --scope <registry-id> --role acrpull

Na koniec zarejestruj dostawcę Microsoft.PartnerCenterIngestion zasobów w tej samej subskrypcji użytej do utworzenia usługi Azure Container Registry:

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

Przed kontynuowaniem monitoruj rejestrację i potwierdź jej ukończenie:

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

Zbieranie artefaktów w celu spełnienia wymagań dotyczących formatu pakietu

Każdy CNAB składa się z następujących artefaktów:

  • Wykres Helm
  • CreateUiDefinition
  • Szablon ARM
  • Plik manifestu

Aktualizowanie wykresu programu Helm

Upewnij się, że pakiet Helm jest zgodny z następującymi regułami:

  • Wszystkie nazwy obrazów i odwołania są sparametryzowane i reprezentowane jako values.yaml odwołania global.azure.images. Zaktualizuj plik deployment.yaml szablonu wykresu helm, aby wskazać te obrazy. Dzięki temu blok obrazów może zostać zaktualizowany w celu odwołania się do obrazów usługi ACR w witrynie Azure Marketplace. Zrzut ekranu przedstawiający przykład rozszerzonej obsługi dodawania tagów.Zrzut ekranu przedstawiający dodawanie odwołania do obrazu.

  • Jeśli masz wiele wykresów, możesz dołączyć inne wykresy helm jako wykresy podrzędne oprócz głównego wykresu helm. Wszystkie zależne odwołania do obrazów wykresów helm będą wymagały aktualizacji i powinny wskazywać obrazy zawarte w wykresie values.yamlgłównym .

  • Podczas odwoływania się do obrazów można używać tagów lub skrótów. Należy jednak pamiętać, że obrazy są wewnętrznie ponownie oznaczone, aby wskazać usługę Azure Container Registry (ACR) należącą do firmy Microsoft. Po zaktualizowaniu tagu do witryny Azure Marketplace musi zostać przesłana nowa wersja CNAB. Dzięki temu zmiany mogą zostać odzwierciedlone we wdrożeniach klientów.

    Zrzut ekranu przedstawiający przykład dodawania odwołania do obsługi tagów.

Dostępne modele rozliczeń

W przypadku wszystkich dostępnych modeli rozliczeniowych zapoznaj się z opcjami licencjonowania aplikacji platformy Azure Kubernetes.

Wprowadzanie aktualizacji na podstawie modelu rozliczeniowego

Po przejrzeniu dostępnych modeli rozliczeniowych wybierz jeden odpowiedni dla twojego przypadku użycia i wykonaj następujące kroki:

Wykonaj następujące kroki, aby dodać identyfikator w modelach rozliczeń Na rdzeń, Na zasobnik, Na węzeł :

  • Dodaj etykietę azure-extensions-usage-release-identifier identyfikatora rozliczeń do specyfikacji zasobnika w plikach yaml obciążenia .

    • Jeśli obciążenie jest określone jako Wdrożenia lub Zestawy replik lub Stanowe lub Specyfikacje demonów, dodaj tę etykietę w obszarze .spec.template.metadata.labels.

    • Jeśli obciążenie jest określane bezpośrednio jako specyfikacje zasobnika, dodaj tę etykietę w obszarze .metadata.labels.

      Zrzut ekranu przedstawiający prawidłowo sformatowaną etykietę identyfikatora rozliczeń w pliku deployment.yaml. Zawartość przypomina przykładowy plik depoyment.yaml połączony w tym artykule.

      Zrzut ekranu przedstawiający prawidłowo sformatowaną etykietę identyfikatora rozliczeń w pliku statefulsets.yaml. Zawartość przypomina przykładowy plik statefulsets.yaml połączony w tym artykule.

      Zrzut ekranu przedstawiający żądania zasobów procesora CPU w pliku daemonsets.yaml. Zawartość przypomina przykładowy plik daemonsets.yaml połączony w tym artykule.

      Zrzut ekranu przedstawiający żądania zasobów procesora CPU w pliku pods.yaml. Zawartość przypomina przykładowy plik pods.yaml połączony w tym artykule.

  • W przypadku modelu rozliczeń na rdzenie określ żądanie procesora CPU, dołączając resources:requests pole w manifeście zasobu kontenera. Ten krok jest wymagany tylko dla modelu rozliczeniowego dla rdzeni .

    Zrzut ekranu przedstawiający żądania zasobów procesora CPU w pliku pods.yaml. Zawartość przypomina przykładowy plik podstawowego modelu rozliczeń połączony w tym artykule.

W czasie wdrażania funkcja rozszerzeń klastra zastępuje wartość identyfikatora rozliczeń nazwą wystąpienia rozszerzenia.

Aby zapoznać się z przykładami skonfigurowanymi do wdrożenia aplikacji Azure Voting, zobacz następujące kwestie:

W przypadku niestandardowego modelu rozliczeń mierników dodaj pola wymienione poniżej w pliku values.yaml szablonu narzędzia Helm

  • clientId należy dodać w obszarze global.azure.identity
  • Klucz planId należy dodać w obszarze global.azure.marketplace. identyfikator planu
  • identyfikator resourceId należy dodać w obszarze global.azure.extension.resrouceId

Zrzut ekranu przedstawiający niestandardowe rozliczenia pomiarów.

W czasie wdrażania funkcja rozszerzeń klastra zastępuje te pola odpowiednimi wartościami. Aby zapoznać się z przykładami, zobacz aplikację opartą na niestandardowych miernikach głosowania na platformie Azure.

Weryfikowanie wykresu helm

Aby upewnić się, że pakiet Helm jest prawidłowy, przetestuj, czy można go zainstalować w klastrze lokalnym. Można również użyć helm install --generate-name --dry-run --debug funkcji wykrywania niektórych błędów generowania szablonów.

Tworzenie i testowanie elementu createUiDefinition

CreateUiDefinition to plik JSON, który definiuje elementy interfejsu użytkownika dla witryny Azure Portal podczas wdrażania aplikacji. Aby uzyskać więcej informacji, zobacz:

Po utworzeniu pliku createUiDefinition.json dla aplikacji należy przetestować środowisko użytkownika. Aby uprościć testowanie, skopiuj zawartość pliku do środowiska piaskownicy. Piaskownica przedstawia interfejs użytkownika w bieżącym środowisku portalu pełnoekranowym. Piaskownica jest zalecanym sposobem wyświetlania podglądu interfejsu użytkownika.

Tworzenie szablonu usługi Azure Resource Manager (ARM)

Szablon usługi ARM definiuje zasoby platformy Azure do wdrożenia. Domyślnie wdrożysz zasób rozszerzenia klastra dla aplikacji witryny Azure Marketplace. Opcjonalnie możesz wybrać wdrożenie klastra usługi AKS.

Obecnie zezwalamy tylko na następujące typy zasobów:

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

Zobacz na przykład ten przykładowy szablon usługi ARM zaprojektowany w celu uzyskania wyników z przykładowej definicji interfejsu użytkownika połączonej wcześniej i przekazania parametrów do aplikacji.

Przepływ parametrów użytkownika

Ważne jest, aby zrozumieć, jak parametry użytkownika przepływają w artefaktach tworzonych i pakujących. W przykładzie aplikacji Azure Voting parametry są początkowo definiowane podczas tworzenia interfejsu użytkownika za pośrednictwem pliku createUiDefinition.json:

Zrzut ekranu przedstawiający przykład createUiDefinition połączony w tym artykule. Wyświetlane są definicje wartości

Parametry są eksportowane za pośrednictwem outputs sekcji:

Zrzut ekranu przedstawiający przykład createUiDefinition połączony w tym artykule. Wyświetlane są wiersze wyjściowe tytułu aplikacji,

Następnie wartości są przekazywane do szablonu usługi Azure Resource Manager i są propagowane do wykresu Helm podczas wdrażania:

Zrzut ekranu przedstawiający przykładowy szablon usługi Azure Resource Manager połączony w tym artykule. W obszarze

Na koniec wartości są przekazywane do wykresu Helm, values.yaml jak pokazano poniżej.

Zrzut ekranu przedstawiający przykład wykresu helm połączony w tym artykule. Wyświetlane są wartości tytułu aplikacji,

Uwaga

W tym przykładzie extensionResourceName parametry są również sparametryzowane i przekazywane do zasobu rozszerzenia klastra. Podobnie można sparametryzować inne właściwości rozszerzenia, takie jak włączanie automatycznego uaktualniania dla wersji pomocniczych. Aby uzyskać więcej informacji na temat właściwości rozszerzenia klastra, zobacz parametry opcjonalne.

Tworzenie pliku manifestu

Manifest pakietu to plik yaml opisujący pakiet i jego zawartość oraz informuje narzędzie do tworzenia pakietów, gdzie można zlokalizować artefakty zależne.

Pola używane w manifeście są następujące:

Nazwisko Typ danych opis
applicationName String Nazwa aplikacji
wydawca String Nazwa wydawcy
opis String Krótki opis pakietu
version Ciąg w #.#.# formacie Ciąg wersji opisujący wersję pakietu aplikacji może lub nie jest zgodny z wersją plików binarnych wewnątrz.
helmChart String Katalog lokalny, w którym można znaleźć wykres Helm w stosunku do tego manifest.yaml
clusterARMTemplate String Ścieżka lokalna, w której można znaleźć szablon usługi ARM opisujący klaster usługi AKS spełniający wymagania dotyczące ograniczeń.
uiDefinition String Ścieżka lokalna, w której można znaleźć plik JSON opisujący środowisko tworzenia witryny Azure Portal
registryServer String ACR, w którym należy wypchnąć końcowy pakiet CNAB
extensionRegistrationParameters Kolekcja Specyfikacja parametrów rejestracji rozszerzenia. Uwzględnij co najmniej defaultScope parametr i jako parametr.
defaultScope String Domyślny zakres instalacji rozszerzenia. Akceptowane wartości to cluster lub namespace. Jeśli cluster zakres jest ustawiony, tylko jedno wystąpienie rozszerzenia jest dozwolone dla klastra. Jeśli namespace wybrano zakres, dozwolone jest tylko jedno wystąpienie na przestrzeń nazw. Ponieważ klaster Kubernetes może mieć wiele przestrzeni nazw, może istnieć wiele wystąpień rozszerzenia.
namespace String (Opcjonalnie) Określ przestrzeń nazw instalowaną przez rozszerzenie. Ta właściwość jest wymagana, gdy defaultScope jest ustawiona na clusterwartość . Aby uzyskać informacje o ograniczeniach nazewnictwa przestrzeni nazw, zobacz Przestrzenie nazw i SYSTEM DNS.
supportedClusterTypes Kolekcja (Opcjonalnie) Określ typy klastrów obsługiwane przez aplikację. Dozwolone typy to "managedClusters", "connectedClusters". "managedClusters" odnosi się do klastrów usługi Azure Kubernetes Service (AKS). "connectedClusters" odnosi się do klastrów Kubernetes z obsługą usługi Azure Arc. Jeśli nie podano obsługiwanych parametrówClusterTypes, wszystkie dystrybucje elementów "managedClusters" są domyślnie obsługiwane. Jeśli jest podana wartość supportedClusterTypes, a podany typ klastra najwyższego poziomu nie jest podany, wszystkie dystrybucje i wersje kubernetes dla tego typu klastra są traktowane jako nieobsługiwane. Dla każdego typu klastra określ listę co najmniej jednej dystrybucji z następującymi właściwościami:
-dystrybucja
- distributionSupported
- nieobsługiwaneVersions
dystrybucja List Tablica rozkładów odpowiadających typowi klastra. Podaj nazwę określonych dystrybucji. Ustaw wartość na ["All"], aby wskazać, że wszystkie dystrybucje są obsługiwane.
distributionSupported Wartość logiczna Wartość logiczna reprezentująca, czy określone dystrybucje są obsługiwane. Jeśli wartość false, podanie parametru UnsupportedVersions powoduje błąd.
nieobsługiwaneversions List Lista wersji określonych dystrybucji, które nie są obsługiwane. Obsługiwane operatory:
- "=" Podana wersja nie jest obsługiwana. Na przykład "=1.2.12"
- ">" Wszystkie wersje większe niż dana wersja nie są obsługiwane. Na przykład ">1.1.13"
- "<" Wszystkie wersje mniejsze niż dana wersja nie są obsługiwane. Na przykład "<1.3.14"
- "..." Wszystkie wersje w zakresie są nieobsługiwane. Na przykład "1.1.2...1.1.1.15" (zawiera wartość po prawej stronie i wyklucza wartość po lewej stronie)

Przykład skonfigurowany dla aplikacji do głosowania można znaleźć w poniższym przykładzie pliku manifestu.

Tworzenie struktury aplikacji

Umieść plik createUiDefinition, szablon usługi ARM i plik manifestu obok wykresu Helm aplikacji.

Aby zapoznać się z przykładem prawidłowo ustrukturyzowanego katalogu, zobacz Przykładowe głosowanie na platformie Azure.

Aby zapoznać się z przykładem aplikacji do głosowania obsługującej klastry Kubernetes z obsługą usługi Azure Arc, zobacz przykład ConnectedCluster-only .

Aby uzyskać więcej informacji na temat konfigurowania klastra Kubernetes z obsługą usługi Azure Arc w celu weryfikacji aplikacji, zobacz Szybki start: łączenie istniejącego klastra Kubernetes z usługą Azure Arc.

Korzystanie z narzędzia do tworzenia pakietów kontenerów

Po dodaniu wszystkich wymaganych artefaktów uruchom narzędzie container-package-app do tworzenia pakietów, aby zweryfikować artefakty, skompilować pakiet i przekazać pakiet do usługi Azure Container Registry.

Ponieważ bazy CNAB są nowym formatem i mają krzywą szkoleniową, utworzyliśmy obraz platformy Docker dla container-package-app programu z użyciem środowiska bootstrapping i narzędzi wymaganych do pomyślnego uruchomienia narzędzia do tworzenia pakietów.

Dostępne są dwie opcje użycia narzędzia do tworzenia pakietów. Można go użyć ręcznie lub zintegrować go z potokiem wdrażania.

Ręczne uruchamianie narzędzia do tworzenia pakietów

Najnowszy obraz narzędzia do tworzenia pakietów można ściągnąć z mcr.microsoft.com/container-package-app:latestpliku .

Następujące polecenie platformy Docker ściąga najnowszy obraz narzędzia do tworzenia pakietów, a także instaluje katalog.

Zakładając, że ~\<path-to-content> jest to katalog zawierający zawartość do spakowania, następujące polecenie platformy ~/<path-to-content> Docker instaluje się /data w kontenerze. Pamiętaj, aby zastąpić ~/<path-to-content> element lokalizacją własnej aplikacji.

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 

Uruchom następujące polecenia w powłoce kontenera container-package-app . Pamiętaj, aby zastąpić <registry-name> ciąg nazwą usługi ACR:

export REGISTRY_NAME=<registry-name>

az login 

az acr login -n $REGISTRY_NAME 

cd /data/<path-to-content>

Aby uwierzytelnić usługę ACR, dostępne są dwie opcje. Jedną z opcji jest użycie az login metody , jak pokazano wcześniej, a druga opcja to docker, uruchamiając polecenie docker login 'yourACRname'.azurecr.io. Wprowadź nazwę użytkownika i hasło (nazwa użytkownika powinna być nazwą usługi ACR, a hasło jest wygenerowanym kluczem podanym w witrynie Azure Portal) i uruchom polecenie .

docker login <yourACRname.azurecr.io>

Zrzut ekranu przedstawiający polecenie docker login w interfejsie wiersza polecenia.

Następnie uruchom polecenie cpa verify , aby iterować artefakty i zweryfikować je pojedynczo i rozwiązać wszelkie błędy. Uruchom polecenie cpa buildbundle , gdy wszystko będzie gotowe do spakowania i przekazania pliku CNAB do usługi Azure Container Registry. Polecenie cpa buildbundle uruchamia proces weryfikacji, kompiluje pakiet i przekazuje pakiet do usługi Azure Container Registry.

cpa verify

Zrzut ekranu przedstawiający polecenie cpa verify w interfejsie wiersza polecenia.

cpa buildbundle 

Uwaga

Użyj cpa buildbundle --force tylko wtedy, gdy chcesz zastąpić istniejący tag. Jeśli ten kod CNAB został już dołączony do oferty witryny Azure Marketplace, zamiast tego zwiększ wersję w pliku manifestu.

Integracja z usługą Azure Pipeline

Przykład integracji container-package-app z usługą Azure Pipeline można znaleźć w przykładzie usługi Azure Pipeline

Rozwiązywanie problemów