Wdrażanie kontenerów na platformie Azure
Napiwek
Ta zawartość jest fragmentem książki eBook, Architekting Cloud Native .NET Applications for Azure, dostępnej na platformie .NET Docs lub jako bezpłatny plik PDF do pobrania, który można odczytać w trybie offline.
Omówiliśmy kontenery w tym rozdziale i w rozdziale 1. Widzieliśmy, że kontenery zapewniają wiele korzyści dla aplikacji natywnych dla chmury, w tym przenośność. W chmurze platformy Azure można wdrożyć te same konteneryzowane usługi w środowiskach przejściowych i produkcyjnych. Platforma Azure oferuje kilka opcji hostowania tych konteneryzowanych obciążeń:
- Usługi Azure Kubernetes Service (AKS)
- Wystąpienie kontenera platformy Azure (ACI)
- Azure Web Apps for Containers
Azure Container Registry
Podczas konteneryzacji mikrousługi należy najpierw utworzyć kontener "obraz". Obraz jest binarną reprezentacją kodu usługi, zależności i środowiska uruchomieniowego. Chociaż można ręcznie utworzyć obraz przy użyciu polecenia z Docker Build
poziomu interfejsu API platformy Docker, lepszym rozwiązaniem jest utworzenie go w ramach zautomatyzowanego procesu kompilacji.
Po utworzeniu obrazy kontenerów są przechowywane w rejestrach kontenerów. Umożliwiają one tworzenie, przechowywanie obrazów kontenerów i zarządzanie nimi. Dostępnych jest wiele rejestrów, zarówno publicznych, jak i prywatnych. Usługa Azure Container Registry (ACR) to w pełni zarządzana usługa rejestru kontenerów w chmurze platformy Azure. Utrwala obrazy w sieci platformy Azure, skracając czas wdrażania ich na hostach kontenerów platformy Azure. Można je również zabezpieczyć przy użyciu tych samych procedur zabezpieczeń i tożsamości, które są używane dla innych zasobów platformy Azure.
Rejestr kontenerów platformy Azure można utworzyć przy użyciu witryny Azure Portal, interfejsu wiersza polecenia platformy Azure lub narzędzi programu PowerShell. Tworzenie rejestru na platformie Azure jest proste. Wymaga subskrypcji platformy Azure, grupy zasobów i unikatowej nazwy. Rysunek 3–10 przedstawia podstawowe opcje tworzenia rejestru, który będzie hostowany w witrynie registryname.azurecr.io
.
Rysunek 3–10. Tworzenie rejestru kontenerów
Po utworzeniu rejestru należy go uwierzytelnić, zanim będzie można go używać. Zazwyczaj logujesz się do rejestru przy użyciu polecenia interfejsu wiersza polecenia platformy Azure:
az acr login --name *registryname*
Po uwierzytelnieniu można użyć poleceń platformy Docker, aby wypchnąć do niego obrazy kontenerów. Aby to zrobić, należy jednak otagować obraz przy użyciu w pełni kwalifikowanej nazwy (URL) serwera logowania usługi ACR. Będzie on miał format registryname.azurecr.io.
docker tag mycontainer myregistry.azurecr.io/mycontainer:v1
Po oznaczeniu obrazu użyj docker push
polecenia , aby wypchnąć obraz do wystąpienia usługi ACR.
docker push myregistry.azurecr.io/mycontainer:v1
Po wypchnięciu obrazu do rejestru warto usunąć obraz z lokalnego środowiska platformy Docker przy użyciu następującego polecenia:
docker rmi myregistry.azurecr.io/mycontainer:v1
Najlepszym rozwiązaniem jest ręczne wypychanie obrazów do rejestru kontenerów. Zamiast tego użyj potoku kompilacji zdefiniowanego w narzędziu, takiego jak GitHub lub Azure DevOps. Dowiedz się więcej w rozdziale DevOps natywne dla chmury.
Zadania usługi ACR
Usługa ACR Tasks to zestaw funkcji dostępnych w usłudze Azure Container Registry. Rozszerza cykl tworzenia pętli wewnętrznej, tworząc obrazy kontenerów i zarządzając nimi w chmurze platformy Azure. Zamiast wywoływania elementu i docker push
lokalnie na maszynie dewelopera, są one automatycznie obsługiwane przez usługę docker build
ACR Tasks w chmurze.
Następujące polecenie interfejsu wiersza polecenia az kompiluje obraz kontenera i wypycha go do usługi ACR:
# create a container registry
az acr create --resource-group myResourceGroup --name myContainerRegistry008 --sku Basic
# build container image in ACR and push it into your container registry
az acr build --image sample/hello-world:v1 --registry myContainerRegistry008 --file Dockerfile .
Jak widać w poprzednim bloku poleceń, nie ma potrzeby instalowania programu Docker Desktop na maszynie deweloperskiej. Ponadto można skonfigurować wyzwalacze zadań usługi ACR w celu ponownego kompilowania obrazów kontenerów zarówno w kodzie źródłowym, jak i w przypadku aktualizacji obrazu podstawowego.
Azure Kubernetes Service
W tym rozdziale omówiliśmy usługę Azure Kubernetes Service (AKS). Widzieliśmy, że jest to de facto koordynator kontenerów zarządzający kontenerami konteneryzowanymi aplikacjami natywnymi dla chmury.
Po wdrożeniu obrazu w rejestrze, takim jak usługa ACR, można skonfigurować usługę AKS do automatycznego ściągania i wdrażania. W potoku ciągłej integracji/ciągłego wdrażania można skonfigurować strategię wydania kanarowego, aby zminimalizować ryzyko związane z szybkim wdrażaniem aktualizacji. Nowa wersja aplikacji jest początkowo konfigurowana w środowisku produkcyjnym bez ruchu kierowanego do niej. Następnie system będzie kierować niewielką część użytkowników do nowo wdrożonej wersji. Ponieważ zespół zyskuje zaufanie do nowej wersji, może wdrożyć więcej wystąpień i wycofać stare. Usługa AKS łatwo obsługuje ten styl wdrażania.
Podobnie jak w przypadku większości zasobów na platformie Azure, można utworzyć klaster usługi Azure Kubernetes Service przy użyciu portalu, wiersza polecenia lub narzędzi automatyzacji, takich jak Helm lub Terraform. Aby rozpocząć pracę z nowym klastrem, należy podać następujące informacje:
- Subskrypcja platformy Azure
- Grupa zasobów
- Nazwa klastra platformy Kubernetes
- Region (Region)
- Wersja platformy Kubernetes
- Prefiks nazwy DNS
- Rozmiar węzła
- Liczba węzłów
Te informacje są wystarczające do rozpoczęcia pracy. W ramach procesu tworzenia w witrynie Azure Portal można również skonfigurować opcje dla następujących funkcji klastra:
- Skaluj
- Uwierzytelnianie
- Sieć
- Monitorowanie
- Tagi
Azure Bridge to Kubernetes
Aplikacje natywne dla chmury mogą rosnąć duże i złożone, co wymaga uruchomienia znaczących zasobów obliczeniowych. W tych scenariuszach cała aplikacja nie może być hostowana na komputerze deweloperskim (zwłaszcza laptopie). Rozwiązanie Azure Bridge to Kubernetes rozwiązuje problem z nadchodzącym. Umożliwia deweloperom pracę z lokalną wersją usługi podczas hostowania całej aplikacji w klastrze deweloperów usługi AKS.
Gdy wszystko będzie gotowe, deweloperzy testują swoje zmiany lokalnie podczas uruchamiania względem pełnej aplikacji w klastrze usługi AKS — bez replikowania zależności. Pod maską mostek scala kod z komputera lokalnego z usługami w usłudze AKS. Deweloperzy mogą szybko iterować i debugować kod bezpośrednio na platformie Kubernetes przy użyciu programu Visual Studio lub Visual Studio Code.
Gabe Monroy, były wiceprezes ds. zarządzania produktami w firmie Microsoft, opisuje to dobrze:
Wyobraź sobie, że jesteś nowym pracownikiem, który próbuje naprawić usterkę w złożonej aplikacji mikrousług składającej się z kilkudziesięciu składników, z których każdy ma własną konfigurację i usługi zapasowe. Aby rozpocząć, należy skonfigurować lokalne środowisko programistyczne, aby można było naśladować środowisko produkcyjne, w tym konfigurowanie środowiska IDE, tworzenie łańcucha narzędzi, zależności usługi konteneryzowanej, lokalne środowisko Kubernetes, makiety dla usług zapasowych i nie tylko. Dzięki całemu czasowi konfigurowania środowiska deweloperskiego naprawienie tej pierwszej usterki może potrwać kilka dni! Możesz też po prostu użyć narzędzia Bridge do platform Kubernetes i AKS.