Wdrażanie w usłudze Azure Kubernetes Service (AKS) przy użyciu serwera Jenkins i niebieskiego/zielonego wzorca wdrażaniaDeploy to Azure Kubernetes Service (AKS) by using Jenkins and the blue/green deployment pattern

Usługa Azure Kubernetes Service (AKS) zarządza hostowanym środowiskiem Kubernetes, dzięki czemu można szybko i łatwo wdrażać konteneryzowane aplikacje i zarządzać nimi.Azure Kubernetes Service (AKS) manages your hosted Kubernetes environment, making it quick and easy to deploy and manage containerized applications. Nie wymaga to specjalistycznej wiedzy z zakresu aranżacji kontenerów.You don't need expertise in container orchestration. Usługa AKS eliminuje również uciążliwości związane z bieżącą obsługą i konserwacją dzięki aprowizowaniu, uaktualnianiu i skalowaniu zasobów na żądanie.AKS also eliminates the burden of ongoing operations and maintenance, by provisioning, upgrading, and scaling resources on demand. Nie ma potrzeby przełączania aplikacji do trybu offline.You don't need to take your applications offline. Więcej informacji o usłudze AKS można znaleźć w dokumentacji usługi AKS.For more information about AKS, see the AKS documentation.

Wdrażanie niebieskie/zielone to wzorzec ciągłego dostarczania usługi Azure DevOps, który polega na utrzymywaniu działającej istniejącej wersji (niebieska) podczas wdrażania nowej (zielona).Blue/green deployment is an Azure DevOps Continuous Delivery pattern that relies on keeping an existing (blue) version live, while a new (green) one is deployed. Zazwyczaj ten wzorzec wykorzystuje równoważenie obciążenia, aby skierować zwiększający się ruch do zielonego wdrożenia.Typically, this pattern employs load balancing to direct increasing amounts of traffic to the green deployment. Jeśli funkcja monitorowania wykryje zdarzenie, ruch może zostać skierowany do niebieskiego wdrożenia, które nadal działa.If monitoring discovers an incident, traffic can be rerouted to the blue deployment, which is still running. Aby uzyskać więcej informacji na temat ciągłego dostarczania, zobacz Czym jest ciągłe dostarczanie?.For more information about Continuous Delivery, see What is Continuous Delivery.

W tym samouczku wyjaśniono, jak wykonać następujące zadania:In this tutorial, you learn how to perform the following tasks:

  • Uzyskiwanie informacji o niebieskim/zielonym wzorcu wdrażaniaLearn about the blue/green deployment pattern
  • Tworzenie zarządzanego klastra KubernetesCreate a managed Kubernetes cluster
  • Uruchamianie przykładowego skryptu w celu skonfigurowania klastra KubernetesRun a sample script to configure a Kubernetes cluster
  • Ręczne konfigurowanie klastra KubernetesManually configure a Kubernetes cluster
  • Tworzenie i uruchamianie zadania serwera JenkinsCreate and run a Jenkins job

Wymagania wstępnePrerequisites

  • Konto usługi GitHub: musisz mieć konto usługi GitHub, aby móc sklonować przykładowe repozytorium.GitHub account : You need a GitHub account to clone the sample repo.
  • Interfejs wiersza polecenia platformy Azure w wersji 2.0: interfejs wiersza polecenia platformy Azure w wersji 2.0 jest używany do tworzenia klastra Kubernetes.Azure CLI 2.0 : You use the Azure CLI 2.0 to create the Kubernetes cluster.
  • Chocolatey: menedżer pakietów używany do zainstalowania interfejsu kubectl.Chocolatey: A package manager you use to install kubectl.
  • kubectl: interfejs wiersza polecenia używany do uruchamiania poleceń w klastrach Kubernetes.kubectl: A command-line interface you use for running commands against Kubernetes clusters.
  • jq: uproszczony procesor JSON wiersza polecenia.jq: A lightweight, command-line JSON processor.

Klonowanie przykładowej aplikacji z usługi GitHubClone the sample app from GitHub

W repozytorium firmy Microsoft w serwisie GitHub można znaleźć przykładową aplikację, która przedstawia sposób wdrażania w usłudze AKS za pomocą serwera Jenkins i wzorca niebieski/zielony.On the Microsoft repo in GitHub, you can find a sample app that illustrates how to deploy to AKS by using Jenkins and the blue/green pattern. W tej sekcji utworzysz rozwidlenie tego repozytorium w Twojej witrynie GitHub i sklonujesz aplikacji do systemu lokalnego.In this section, you create a fork of that repo in your GitHub, and clone the app to your local system.

  1. Przejdź do repozytorium GitHub aplikacji przykładowej todo-app-java-on-azure.Browse to the GitHub repo for the todo-app-java-on-azure sample app.

    Zrzut ekranu przedstawiający przykładową aplikację w repozytorium GitHub firmy Microsoft

  2. Utwórz rozwidlenie repozytorium, wybierając pozycję Fork (Rozwidlenie) w prawym górnym rogu strony, i postępuj zgodnie z instrukcjami, aby utworzyć rozwidlenie repozytorium na swoim koncie usługi GitHub.Fork the repo by selecting Fork in the upper right of the page, and follow the instructions to fork the repo in your GitHub account.

    Zrzut ekranu przedstawiający opcję rozwidlenia repozytorium GitHub

  3. Po utworzeniu rozwidlenia repozytorium zobaczysz, że nazwa konta zmieni się na nazwę Twojego konta. Zostanie również wyświetlona informacja wskazująca, skąd repozytorium zostało rozwidlone (Microsoft).After you fork the repo, you see that the account name changes to your account name, and a note indicates from where the repo was forked (Microsoft).

    Zrzut ekranu przedstawiający nazwę konta GitHub i informację

  4. Wybierz przycisk Clone or download (Sklonuj lub pobierz).Select Clone or download.

    Zrzut ekranu przedstawiający opcję sklonowania lub pobrania repozytorium w usłudze GitHub

  5. W oknie Clone with HTTPS (Klonowanie przy użyciu protokołu HTTPS) wybierz ikonę kopiowania.In the Clone with HTTPS window, select the copy icon.

    Zrzut ekranu przedstawiający opcję skopiowania do schowka adresu URL klonowania w usłudze GitHub

  6. Otwórz okno terminalu lub powłoki Git Bash.Open a terminal or Git Bash window.

  7. Przejdź do katalogu, w którym ma być przechowywana lokalna kopia (klon) repozytorium.Change directories to the desired location where you want to store the local copy (clone) of the repo.

  8. Za pomocą polecenia git clone sklonuj adres URL, który został wcześniej skopiowany.Using the git clone command, clone the URL you copied previously.

    Zrzut ekranu powłoki Git Bash z poleceniem git clone

  9. Naciśnij klawisz Enter, aby rozpocząć proces klonowania.Press the Enter key to start the clone process.

    Zrzut ekranu powłoki Git Bash z wynikami polecenia git clone

  10. Przejdź do nowo utworzonego katalogu, który zawiera sklonowane źródło aplikacji.Change directories to the newly created directory that contains the clone of the app source.

Tworzenie i konfigurowanie zarządzanego klastra KubernetesCreate and configure a managed Kubernetes cluster

W tej sekcji wykonasz następujące kroki:In this section, you perform the following steps:

  • Użyjesz interfejsu wiersza polecenia platformy Azure w wersji 2.0 w celu utworzenia zarządzanego klastra Kubernetes.Use the Azure CLI 2.0 to create a managed Kubernetes cluster.
  • Dowiesz się, jak skonfigurować klaster przy użyciu skryptu konfiguracji lub ręcznie.Learn how to set up a cluster, either by using the setup script or manually.
  • Utworzysz wystąpienie usługi Azure Container Registry.Create an instance of the Azure Container Registry service.

Używanie interfejsu wiersza polecenia platformy Azure w wersji 2.0 w celu utworzenia zarządzanego klastra KubernetesUse the Azure CLI 2.0 to create a managed Kubernetes cluster

Aby można było utworzyć zarządzany klaster Kubernetes za pomocą interfejsu wiersza polecenia platformy Azure w wersji 2.0, należy używać interfejsu wiersza polecenia platformy Azure w wersji 2.0.25 lub nowszej.In order to create a managed Kubernetes cluster with the Azure CLI 2.0, ensure that you are using the Azure CLI version 2.0.25 or later.

  1. Zaloguj się do swojego konta platformy Azure.Sign in to your Azure account. Po wprowadzeniu następującego polecenia otrzymasz instrukcje z wyjaśnieniem, jak zakończyć proces logowania.After you enter the following command, you receive instructions that explain how to complete the sign-in.

    az login
    
  2. Po uruchomieniu polecenia az login z poprzedniego kroku zostanie wyświetlona lista wszystkich Twoich subskrypcji platformy Azure (wraz z ich identyfikatorami subskrypcji).When you run the az login command in the previous step, a list of all your Azure subscriptions appears (along with their subscription IDs). W tym kroku ustawisz domyślną subskrypcję platformy Azure.In this step, you set the default Azure subscription. Zastąp symbol zastępczy <your-subscription-id> identyfikatorem odpowiedniej subskrypcji platformy Azure.Replace the <your-subscription-id> placeholder with the desired Azure subscription ID.

    az account set -s <your-subscription-id>
    
  3. Utwórz grupę zasobów.Create a resource group. Zastąp symbol zastępczy <your-resource-group-name> nazwą nowej grupy zasobów, a symbol zastępczy <your-location> swoja lokalizacją.Replace the <your-resource-group-name> placeholder with the name of your new resource group, and replace the <your-location> placeholder with the location. Polecenie az account list-locations wyświetla wszystkie lokalizacje platformy Azure.The command az account list-locations displays all Azure locations. W okresie obowiązywania wersji zapoznawczej usługi AKS nie wszystkie lokalizacje są dostępne.During the AKS preview, not all locations are available. Jeśli wprowadzisz lokalizację, która nie jest prawidłowa w tym momencie, zostanie wyświetlony komunikat o błędzie zawierający listę dostępnych lokalizacji.If you enter a location that is not valid at this time, the error message lists the available locations.

    az group create -n <your-resource-group-name> -l <your-location>
    
  4. Utwórz klaster Kubernetes.Create the Kubernetes cluster. Zastąp symbol zastępczy <your-resource-group-name> nazwą grupy zasobów utworzonej w poprzednim kroku, a symbol zastępczy <your-kubernetes-cluster-name> nazwą Twojego nowego klastra.Replace the <your-resource-group-name> with the name of the resource group created in the previous step, and replace the <your-kubernetes-cluster-name> with the name of your new cluster. Ten proces może potrwać kilka minut.(This process can take several minutes to complete.)

    az aks create -g <your-resource-group-name> -n <your-kubernetes-cluster-name> --generate-ssh-keys --node-count 2
    

Konfigurowanie klastra usługi KubernetesSet up the Kubernetes cluster

Niebieskie/zielone wdrożenie można skonfigurować w usłudze AKS ręcznie lub za pomocą skryptu konfiguracji dostarczonego w sklonowanym wcześniej przykładzie.You can set up a blue/green deployment in AKS manually, or with a setup script provided in the sample cloned earlier. W tej sekcji opisano obie te metody.In this section, you see how to do both.

Konfigurowanie klastra Kubernetes za pomocą przykładowego skryptu konfiguracjiSet up the Kubernetes cluster via the sample setup script

  1. Zmodyfikuj plik deploy/aks/setup/setup.sh, zastępując następujące symbole zastępcze odpowiednimi wartościami dla danego środowiska:Edit the deploy/aks/setup/setup.sh file, replacing the following placeholders with the appropriate values for your environment:

    • <your-resource-group-name><your-resource-group-name>

    • <your-kubernetes-cluster-name><your-kubernetes-cluster-name>

    • <your-location><your-location>

    • <your-dns-name-suffix><your-dns-name-suffix>

      Zrzut ekranu przedstawiający skrypt setup.sh w powłoce bash z wyróżnionymi kilkoma symbolami zastępczymi

  2. Uruchom skrypt konfiguracji.Run the setup script.

    sh setup.sh
    

Ręczne konfigurowanie klastra KubernetesSet up a Kubernetes cluster manually

  1. Pobierz konfigurację Kubernetes do folderu profilu.Download the Kubernetes configuration to your profile folder.

    az aks get-credentials -g <your-resource-group-name> -n <your-kubernetes-cluster-name> --admin
    
  2. Przejdź do katalogu deploy/aks/setup.Change the directory to the deploy/aks/setup directory.

  3. Uruchom następujące polecenia kubectl, aby skonfigurować usługi na potrzeby publicznego punktu końcowego i dwóch testowych punktów końcowych.Run the following kubectl commands to set up the services for the public endpoint, and the two test endpoints.

    kubectl apply -f  service-green.yml
    kubectl apply -f  test-endpoint-blue.yml
    kubectl apply -f  test-endpoint-green.yml
    
  4. Zaktualizuj nazwy DNS dla publicznego i testowych punktów końcowych.Update the DNS name for the public and test endpoints. Podczas tworzenia klastra Kubernetes tworzona jest również dodatkowa grupa zasobów, a jej nazwa jest tworzona za pomocą wzorca nazewnictwa MC_<nazwa-grupy-zasobów> <nazwa-klastra-kubernetes> <lokalizacja> .When you create a Kubernetes cluster, you also create an additional resource group, with the naming pattern of MC_<your-resource-group-name><your-kubernetes-cluster-name><your-location>.

    Znajdź publiczne adresy IP w grupie zasobów.Locate the public IPs in the resource group.

    Zrzut ekranu przedstawiający publiczne adresy IP w grupie zasobów

    Dla każdej usługi znajdź zewnętrzny adres IP, uruchamiając następujące polecenie:For each of the services, find the external IP address by running the following command:

    kubectl get service todoapp-service
    

    Zaktualizuj nazwę DNS dla odpowiedniego adresu IP za pomocą następującego polecenia:Update the DNS name for the corresponding IP address with the following command:

    az network public-ip update --dns-name aks-todoapp --ids /subscriptions/<your-subscription-id>/resourceGroups/MC_<resourcegroup>_<aks>_<location>/providers/Microsoft.Network/publicIPAddresses/kubernetes-<ip-address>
    

    Powtórz wywołanie dla todoapp-test-blue i todoapp-test-green:Repeat the call for todoapp-test-blue and todoapp-test-green:

    az network public-ip update --dns-name todoapp-blue --ids /subscriptions/<your-subscription-id>/resourceGroups/MC_<resourcegroup>_<aks>_<location>/providers/Microsoft.Network/publicIPAddresses/kubernetes-<ip-address>
    
    az network public-ip update --dns-name todoapp-green --ids /subscriptions/<your-subscription-id>/resourceGroups/MC_<resourcegroup>_<aks>_<location>/providers/Microsoft.Network/publicIPAddresses/kubernetes-<ip-address>
    

    Nazwa DNS musi być unikatowa w ramach subskrypcji.The DNS name needs to be unique in your subscription. Aby zapewnić unikatowość, można użyć symbolu zastępczego <your-dns-name-suffix>.To ensure the uniqueness, you can use <your-dns-name-suffix>.

Tworzenie wystąpienia usługi Container RegistryCreate an instance of Container Registry

  1. Uruchom polecenie az acr create, aby utworzyć wystąpienie usługi Container Registry.Run the az acr create command to create an instance of Container Registry. W następnej sekcji możesz następnie użyć polecenia login server jako adresu URL rejestru platformy Docker.In the next section, you can then use login server as the Docker registry URL.

    az acr create -n <your-registry-name> -g <your-resource-group-name>
    
  2. Uruchom polecenie az acr credential, aby wyświetlić poświadczenia usługi Container Registry.Run the az acr credential command to show your Container Registry credentials. Zanotuj nazwę użytkownika i hasło rejestru platformy Docker, ponieważ będą one potrzebne w następnej sekcji.Note the Docker registry username and password, as you need them in the next section.

    az acr credential show -n <your-registry-name>
    

Przygotowywanie serwera JenkinsPrepare the Jenkins server

W tej sekcji zobaczysz, jak przygotować serwer Jenkins do uruchomienia kompilacji na potrzeby testowania.In this section, you see how to prepare the Jenkins server to run a build, which is fine for testing. Należy jednak użyć agenta maszyny wirtualnej platformy Azure lub agenta usługi Azure Container, aby wdrożyć agenta na platformie Azure w celu uruchomienia kompilacji.However, you should use an Azure VM agent or Azure Container agent to spin up an agent in Azure to run your builds. Aby uzyskać więcej informacji, zobacz artykuł w witrynie Jenkins dotyczący zagadnień bezpieczeństwa kompilowania w węźle głównym.For more information, see the Jenkins article on the security implications of building on master.

  1. Wdróż serwer główny Jenkins na platformie Azure.Deploy a Jenkins Master on Azure.

  2. Nawiąż połączenie z serwerem za pośrednictwem protokołu SSH i zainstaluj narzędzia do kompilacji na serwerze, na którym uruchamiasz kompilację.Connect to the server via SSH, and install the build tools on the server where you run your build.

    sudo apt-get install git maven 
    
  3. Zainstaluj platformę Docker.Install Docker. Upewnij się, że użytkownik jenkins ma uprawnienia do uruchamiania poleceń docker.Ensure that the user jenkins has permission to run the docker commands.

  4. Zainstaluj narzędzie kubectl.Install kubectl.

  5. Pobierz procesor jq.Download jq.

  6. Zainstaluj procesor jq przy użyciu następującego polecenia:Install jq with the following command:

    sudo apt-get install jq
    
  7. Zainstaluj wtyczki na serwerze Jenkins, wykonując następujące czynności na pulpicie nawigacyjnym serwera Jenkins:Install the plugins in Jenkins by performing the following steps within the Jenkins dashboard:

    1. Wybierz pozycję Manage Jenkins > Manage Plugins > Available (Zarządzanie usługą Jenkins > Zarządzanie wtyczkami > Dostępne).Select Manage Jenkins > Manage Plugins > Available.
    2. Wyszukaj i zainstaluj wtyczkę usługi Azure Container Service.Search for and install the Azure Container Service plug-in.
  8. Dodaj poświadczenia umożliwiające zarządzanie zasobami na platformie Azure.Add credentials to manage resources in Azure. Jeśli nie masz jeszcze wtyczki, zainstaluj wtyczkę usługi Azure Credential .If you don’t already have the plug-in, install the Azure Credential plug-in.

  9. Dodaj poświadczenia jednostki usługi platformy Azure jako typ Microsoft Azure Service Principal (Jednostka usługi Microsoft Azure).Add your Azure Service Principal credential as the type Microsoft Azure Service Principal.

  10. Dodaj nazwę użytkownika i hasło rejestru platformy Docker na platformie Azure (uzyskane w sekcji „Tworzenie wystąpienia usługi Container Registry”) jako typ Username with password (Nazwa użytkownika z hasłem).Add your Azure Docker registry username and password (as obtained in the section, "Create an instance of Container Registry") as the type Username with password.

Edytowanie pliku JenkinsfileEdit the Jenkinsfile

  1. Z poziomu własnego repozytorium przejdź do katalogu /deploy/aks/ i otwórz plik Jenkinsfile.In your own repo, go to /deploy/aks/, and open Jenkinsfile.

  2. Zaktualizuj plik w następujący sposób:Update the file as follows:

    def servicePrincipalId = '<your-service-principal>'
    def resourceGroup = '<your-resource-group-name>'
    def aks = '<your-kubernetes-cluster-name>'
    
    def cosmosResourceGroup = '<your-cosmodb-resource-group>'
    def cosmosDbName = '<your-cosmodb-name>'
    def dbName = '<your-dbname>'
    
    def dockerRegistry = '<your-acr-name>.azurecr.io'
    

    Zaktualizuj identyfikator poświadczeń usługi Container Registry:Update the Container Registry credential ID:

    def dockerCredentialId = '<your-acr-credential-id>'
    

Tworzenie zadaniaCreate the job

  1. Dodaj nowe zadanie o typie Pipeline (Potok).Add a new job in type Pipeline.

  2. Wybierz kolejno pozycje Pipeline > Definition > Pipeline script from SCM (Potok > Definicja > Skrypt potoku z SCM).Select Pipeline > Definition > Pipeline script from SCM.

  3. Wprowadź adres URL repozytorium SCM, zastępując symbol zastępczy <your-forked-repo> nazwą rozwidlonego repozytorium.Enter the SCM repo URL with your <your-forked-repo>.

  4. Wprowadź ścieżkę skryptu w postaci deploy/aks/Jenkinsfile.Enter the script path as deploy/aks/Jenkinsfile.

Uruchamianie zadaniaRun the job

  1. Upewnij się, że możesz pomyślnie uruchomić projekt w środowisku lokalnym.Verify that you can run your project successfully in your local environment. Instrukcja znajduje się w sekcji Run project on local machine (Uruchamianie projektu na komputerze lokalnym).Here's how: Run project on local machine.

  2. Uruchom zadanie serwera Jenkins.Run the Jenkins job. Podczas pierwszego uruchomienia zadania serwer Jenkins wdraża aplikację z listą zadań do wykonania w niebieskim środowisku, które domyślnie jest środowiskiem nieaktywnym.The first time you run the job, Jenkins deploys the todo app to the blue environment, which is the default inactive environment.

  3. Aby sprawdzić, czy zadanie zostało uruchomione, przejdź do następujących adresów URL:To verify that the job ran, go to these URLs:

    • Publiczny punkt końcowy: http://aks-todoapp<your-dns-name-suffix>.<your-location>.cloudapp.azure.comPublic end point: http://aks-todoapp<your-dns-name-suffix>.<your-location>.cloudapp.azure.com
    • Niebieski punkt końcowy — http://aks-todoapp-blue<your-dns-name-suffix>.<your-location>.cloudapp.azure.comBlue end point - http://aks-todoapp-blue<your-dns-name-suffix>.<your-location>.cloudapp.azure.com
    • Zielony punkt końcowy — http://aks-todoapp-green<your-dns-name-suffix>.<your-location>.cloudapp.azure.comGreen end point - http://aks-todoapp-green<your-dns-name-suffix>.<your-location>.cloudapp.azure.com

Publiczny i niebieski testowy punkt końcowy mają tę samą aktualizację, a w zielonym punkcie końcowym jest wyświetlany domyślny obraz tomcat.The public and the blue test end points have the same update, while the green end point shows the default tomcat image.

Jeśli kompilacja zostanie uruchomiona więcej niż jeden raz, jest ona umieszczana na przemian w niebieskim i zielonym wdrożeniu.If you run the build more than once, it cycles through blue and green deployments. Innymi słowy, jeśli bieżące środowisko jest niebieskie, zadanie przeprowadzi wdrożenie i testowanie w zielonym środowisku.In other words, if the current environment is blue, the job deploys and tests to the green environment. Następnie, jeśli testy przebiegną pomyślnie, zadanie zaktualizuje publiczny punkt końcowy aplikacji w taki sposób, aby ruch był kierowany do zielonego środowiska.Then, if tests are good, the job updates the application public endpoint to route traffic to the green environment.

Dodatkowe informacjeAdditional information

Więcej informacji dotyczących wdrażania bez jakichkolwiek przestojów można uzyskać z tego szablon szybkiego startu.For more on zero-downtime deployment, see this quickstart template.

Oczyszczanie zasobówClean up resources

Jeżeli nie potrzebujesz już zasobów utworzonych w ramach tego samouczka, możesz je usunąć.When you no longer need the resources you created in this tutorial, you can delete them.

az group delete -y --no-wait -n <your-resource-group-name>

Rozwiązywanie problemówTroubleshooting

Jeśli napotkasz jakiekolwiek usterki we wtyczkach narzędzia Jenkins, prześlij zgłoszenie za pomocą narzędzia Jenkins JIRA dla określonego składnika.If you encounter any bugs with the Jenkins plugins, file an issue in the Jenkins JIRA for the specific component.

Następne krokiNext steps

W ramach tego samouczka wyjaśniono, w jaki sposób można przeprowadzić wdrażanie w usłudze AKS przy użyciu serwera Jenkins i niebieskiego/zielonego wzorca wdrażania.In this tutorial, you learned how to deploy to AKS by using Jenkins and the blue/green deployment pattern. Aby dowiedzieć się więcej na temat dostawcy serwera Jenkins na platformie Azure, przejdź do witryny usługi Jenkins na platformie Azure.To learn more about the Azure Jenkins provider, see the Jenkins on Azure site.