Potok ciągłej integracji/ciągłego wdrażania dla obciążeń opartych na kontenerach

Container Registry
Cosmos DB
Kubernetes Service
Monitor
Pipelines

Ten przykładowy scenariusz dotyczy firm, które chcą zmodernizować tworzenie aplikacji przy użyciu kontenerów i DevOps przepływów pracy. W tym scenariuszu aplikacja internetowa Node.js jest kompilowana i wdrażana przez usługę Jenkins w Azure Container Registry i Azure Kubernetes Service. W przypadku globalnie rozproszonej warstwy bazy danych jest używana usługa Azure Cosmos DB. Aby monitorować i rozwiązywać problemy z wydajnością aplikacji, usługa Azure Monitor integruje się z wystąpieniem i pulpitem nawigacyjnym narzędzia Grafana.

Przykładowe scenariusze aplikacji obejmują dostarczanie zautomatyzowanego środowiska programistycznego, weryfikowanie nowych zatwierdzeń kodu i wypychanie nowych wdrożeń do środowisk przejściowych lub produkcyjnych. Tradycyjnie firmy musiały ręcznie tworzyć i kompilować aplikacje i aktualizacje oraz obsługiwać dużą, monolityczną bazę kodu. Dzięki nowoczesnemu podejściu do tworzenia aplikacji, które korzysta z ciągłej integracji (CI) i ciągłego wdrażania (CD), można szybciej kompilować, testować i wdrażać usługi. To nowoczesne podejście umożliwia szybsze wydawanie aplikacji i aktualizacji klientom oraz reagowanie na zmieniające się wymagania biznesowe w bardziej elastyczny sposób.

Korzystając z usług platformy Azure, takich jak Azure Kubernetes Service, Container Registry i Cosmos DB, firmy mogą korzystać z najnowszych technik i narzędzi do tworzenia aplikacji, aby uprościć proces wdrażania wysokiej dostępności.

Potencjalne przypadki użycia

Odpowiednie przypadki użycia obejmują:

  • Modernizowanie praktyk programistycznych aplikacji w mikrousłudze opartej na kontenerach.
  • Przyspieszanie tworzenia i wdrażania aplikacji w cyklach życia.
  • Automatyzowanie wdrożeń w środowiskach testowych lub akceptacyjnych w celu weryfikacji.

Architektura

Architecture overview of the Azure components involved in a DevOps scenario using Jenkins, Azure Container Registry, and Azure Kubernetes Service

Pobierz plik programu Visio z tą architekturą.

Przepływ danych

Ten scenariusz obejmuje potok DevOps dla Node.js aplikacji internetowej i zaplecza bazy danych. Dane przepływa przez scenariusz w następujący sposób:

  1. Deweloper wprowadza zmiany w kodzie źródłowym aplikacji internetowej Node.js.
  2. Zmiana kodu jest zatwierdzana w repozytorium kontroli źródła, takim jak GitHub.
  3. Aby rozpocząć proces ciągłej integracji, element webhook GitHub wyzwala kompilację projektu jenkins.
  4. Zadanie kompilacji serwera Jenkins używa dynamicznego agenta kompilacji w Azure Kubernetes Service do wykonania procesu kompilacji kontenera.
  5. Obraz kontenera jest tworzony na podstawie kodu w kontroli źródła, a następnie wypychany do Azure Container Registry.
  6. Za pośrednictwem ciągłego wdrażania (CD) narzędzie Jenkins wdraża ten zaktualizowany obraz kontenera w klastrze Kubernetes.
  7. Aplikacja internetowa Node.js używa bazy danych Cosmos jako zaplecza. Metryki raportów Cosmos DB i Azure Kubernetes Service do usługi Azure Monitor.
  8. Wystąpienie narzędzia Grafana udostępnia wizualne pulpity nawigacyjne wydajności aplikacji na podstawie danych z usługi Azure Monitor.

Składniki

  • Jenkins to serwer automatyzacji typu open source, który może integrować się z usługami platformy Azure w celu włączenia ciągłej integracji (CI) i ciągłego wdrażania (CD). W tym scenariuszu usługa Jenkins organizuje tworzenie nowych obrazów kontenerów na podstawie zatwierdzeń kontroli źródła, wypycha te obrazy do Azure Container Registry, a następnie aktualizuje wystąpienia aplikacji w Azure Kubernetes Service.
  • Azure Linux Virtual Machines to platforma IaaS używana do uruchamiania wystąpień serwera Jenkins i narzędzia Grafana.
  • Azure Container Registry przechowuje obrazy kontenerów używane przez klaster Azure Kubernetes Service i zarządza nimi. Obrazy są bezpiecznie przechowywane i mogą być replikowane do innych regionów przez platformę Azure, aby przyspieszyć czas wdrażania.
  • Azure Kubernetes Service to zarządzana platforma Kubernetes, która umożliwia wdrażanie konteneryzowanych aplikacji i zarządzanie nimi bez wiedzy na temat orkiestracji kontenerów. Jako hostowana usługa Kubernetes, platforma Azure obsługuje krytyczne zadania, takie jak monitorowanie kondycji i konserwacja.
  • Usługa Azure Cosmos DB to globalnie rozproszona, wielomodelowa baza danych, która umożliwia wybór spośród różnych modeli bazy danych i spójności zgodnie z potrzebami. Dzięki Cosmos DB dane mogą być replikowane globalnie i nie ma składników zarządzania klastrem ani replikacji do wdrażania i konfigurowania.
  • Usługa Azure Monitor pomaga śledzić wydajność, utrzymywać bezpieczeństwo i identyfikować trendy. Metryki uzyskane przez monitor mogą być używane przez inne zasoby i narzędzia, takie jak Grafana.
  • Grafana to rozwiązanie typu open source do wykonywania zapytań, wizualizacji, alertów i zrozumienia metryk. Wtyczka źródła danych dla usługi Azure Monitor umożliwia aplikacji Grafana tworzenie wizualnych pulpitów nawigacyjnych w celu monitorowania wydajności aplikacji działających w Azure Kubernetes Service i używania Cosmos DB.

Alternatywy

  • Azure Pipelines pomóc w zaimplementowaniu potoku ciągłej integracji, testowania i wdrażania (CD) dla dowolnej aplikacji.
  • Platforma Kubernetes może być uruchamiana bezpośrednio na maszynach wirtualnych platformy Azure zamiast za pośrednictwem usługi zarządzanej, jeśli chcesz mieć większą kontrolę nad klastrem.
  • Service Fabric to inny alternatywny koordynator kontenerów, który może zastąpić AKS.

Zagadnienia do rozważenia

Dostępność

Aby monitorować wydajność aplikacji i zgłaszać problemy, ten scenariusz łączy usługę Azure Monitor z aplikacją Grafana na potrzeby wizualnych pulpitów nawigacyjnych. Te narzędzia umożliwiają monitorowanie i rozwiązywanie problemów z wydajnością, które mogą wymagać aktualizacji kodu, które następnie można wdrożyć za pomocą potoku ciągłej integracji/ciągłego wdrażania.

W ramach klastra Azure Kubernetes Service moduł równoważenia obciążenia dystrybuuje ruch aplikacji do co najmniej jednego kontenera (zasobników), który uruchamia aplikację. Takie podejście do uruchamiania konteneryzowanych aplikacji na platformie Kubernetes zapewnia klientom infrastrukturę o wysokiej dostępności.

Skalowalność

Azure Kubernetes Service umożliwia skalowanie liczby węzłów klastra w celu spełnienia wymagań aplikacji. W miarę zwiększania się aplikacji można skalować w poziomie liczbę węzłów Kubernetes, na których jest uruchamiana usługa.

Dane aplikacji są przechowywane w usłudze Azure Cosmos DB, globalnie rozproszonej, wielomodelowej bazie danych, która może być skalowana globalnie. Cosmos DB abstrahuje konieczność skalowania infrastruktury, tak jak w przypadku tradycyjnych składników bazy danych, i możesz wybrać replikację Cosmos DB globalnie w celu spełnienia wymagań klientów.

Aby zapoznać się z innymi tematami dotyczącymi skalowalności, zobacz listę kontrolną wydajności dostępną w Centrum architektury platformy Azure.

Zabezpieczenia

Aby zminimalizować ślad ataku, ten scenariusz nie uwidacznia wystąpienia maszyny wirtualnej jenkins za pośrednictwem protokołu HTTP. W przypadku wszystkich zadań zarządzania, które wymagają interakcji z usługą Jenkins, należy utworzyć bezpieczne połączenie zdalne przy użyciu tunelu SSH z komputera lokalnego. Tylko uwierzytelnianie za pomocą klucza publicznego SSH jest dozwolone dla wystąpień maszyn wirtualnych jenkins i Grafana. Logowania oparte na hasłach są wyłączone. Aby uzyskać więcej informacji, zobacz Run a Jenkins server on Azure (Uruchamianie serwera Jenkins na platformie Azure).

W celu rozdzielenia poświadczeń i uprawnień w tym scenariuszu jest używana dedykowana jednostka usługi Azure Active Directory (AD). Poświadczenia dla tej jednostki usługi są przechowywane jako bezpieczny obiekt poświadczeń w usłudze Jenkins, dzięki czemu nie są bezpośrednio widoczne w skryptach lub potoku kompilacji.

Aby uzyskać ogólne wskazówki dotyczące projektowania bezpiecznych rozwiązań, zobacz dokumentację zabezpieczeń platformy Azure.

Odporność

W tym scenariuszu użyto Azure Kubernetes Service dla aplikacji. Wbudowane w rozwiązanie Kubernetes to składniki odporności, które monitorują i ponownie uruchamiają kontenery (zasobniki), jeśli wystąpi problem. W połączeniu z uruchomionym wieloma węzłami Kubernetes aplikacja może tolerować niedostępność zasobnika lub węzła.

Aby uzyskać ogólne wskazówki dotyczące projektowania odpornych rozwiązań, zobacz Projektowanie niezawodnych aplikacji platformy Azure.

Wdrażanie tego scenariusza

Wymagania wstępne

  • Musisz mieć istniejące konto platformy Azure. Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

  • Potrzebna jest para kluczy publicznych SSH. Aby uzyskać instrukcje dotyczące tworzenia pary kluczy publicznych, zobacz Tworzenie i używanie pary kluczy SSH dla maszyn wirtualnych z systemem Linux.

  • Do uwierzytelniania usługi i zasobów potrzebna jest jednostka usługi Azure Active Directory (AD). W razie potrzeby możesz utworzyć jednostkę usługi za pomocą polecenia az ad sp create-for-rbac

    az ad sp create-for-rbac --name myDevOpsScenario \
                        --role Contributor \
                        --scopes /subscriptions/mySubscriptionID
    

    Zanotuj identyfikator appId i hasło w danych wyjściowych tego polecenia. Te wartości należy podać do szablonu podczas wdrażania scenariusza.

  • Znajdź obsługiwane wersje rozwiązania Kubernetes dla regionu wdrażania, uruchamiając polecenie az aks get-versions. Następujące polecenie pobiera domyślną wersję interfejsu wiersza polecenia :

    az aks get-versions -l <region> --query "orchestrators[?default!=null].orchestratorVersion" -o tsv
    

Bramek

Aby wdrożyć ten scenariusz przy użyciu szablonu usługi Azure Resource Manager, wykonaj następujące kroki.

  1. Kliknij poniższy link, aby wdrożyć rozwiązanie.

    Deploy to Azure

  2. Poczekaj na otwarcie wdrożenia szablonu w Azure Portal, a następnie wykonaj następujące kroki:

    • Wybierz pozycję Utwórz nową grupę zasobów, a następnie podaj nazwę, taką jak myAKSDevOpsScenario w polu tekstowym.
    • Wybierz region z listy rozwijanej Lokalizacja .
    • Wprowadź identyfikator i hasło jednostki usługi z az ad sp create-for-rbac polecenia .
    • Podaj nazwę użytkownika i bezpieczne hasło dla wystąpienia serwera Jenkins i konsoli narzędzia Grafana.
    • Podaj klucz SSH, aby zabezpieczyć logowania do maszyn wirtualnych z systemem Linux.
    • Wprowadź wersję rozwiązania Kubernetes z az aks get-versions polecenia .
    • Zapoznaj się z warunkami i postanowieniami, a następnie sprawdź , czy wyrażam zgodę na powyższe warunki i postanowienia.
    • Wybierz przycisk Kup .

Ukończenie wdrożenia może potrwać od 15 do 20 minut.

Cennik

Aby poznać koszt działania tego scenariusza, wszystkie usługi są wstępnie skonfigurowane w kalkulatorze kosztów. Aby zobaczyć, jak ceny zmienią się dla konkretnego przypadku użycia, zmień odpowiednie zmienne, aby odpowiadały oczekiwanemu ruchowi.

Udostępniliśmy trzy przykładowe profile kosztów na podstawie liczby obrazów kontenerów do przechowywania i węzłów Kubernetes do uruchamiania aplikacji.

  • Mały: ten przykład cenowy jest skorelowany z 1000 kompilacjami kontenerów miesięcznie.
  • Średni: ten przykład cenowy jest skorelowany z 100 000 kompilacji kontenerów miesięcznie.
  • Duży: ten przykład cenowy jest skorelowany z 1 000 000 kompilacji kontenerów miesięcznie.

Następne kroki

W tym scenariuszu użyto Azure Container Registry i Azure Kubernetes Service do przechowywania i uruchamiania aplikacji opartej na kontenerze. Azure Container Instances można również użyć do uruchamiania aplikacji opartych na kontenerach bez konieczności aprowizowania żadnych składników aranżacji. Aby uzyskać więcej informacji, zobacz omówienie Azure Container Instances.

Dokumentacja produktu:

Moduły platformy Microsoft Learn: