Wdrażanie aplikacji Spring Boot w Azure Kubernetes Service

Notatka

W przypadku aplikacji Spring Boot użyj Azure Container Apps. Można jednak nadal używać usługi Azure Kubernetes Service jako miejsca docelowego. Aby uzyskać więcej informacji, zobacz Wybieranie odpowiednich usług platformy Azure dla aplikacji Java.

W tym samouczku pokazano, jak używać Kubernetes i Dockera do tworzenia oraz wdrażania aplikacji Spring Boot na platformie Microsoft Azure. W szczególności używasz Spring Boot do tworzenia aplikacji, Kubernetes na potrzeby wdrażania kontenerów oraz usługi Azure Kubernetes Service (AKS) do hostowania aplikacji.

kubernetes i docker to rozwiązania typu open source, które ułatwiają deweloperom automatyzowanie wdrażania, skalowania i zarządzania aplikacjami działającymi w kontenerach.

Warunki wstępne

Notatka

Ze względu na wymagania dotyczące wirtualizacji tego samouczka nie można wykonać kroków opisanych w tym artykule na maszynie wirtualnej. Należy użyć komputera fizycznego z włączonymi funkcjami wirtualizacji.

Tworzenie aplikacji internetowej Spring Boot na platformie Docker — wprowadzenie

Poniższe kroki przeprowadzą Cię przez proces tworzenia aplikacji internetowej Spring Boot i testowania jej lokalnie.

  1. Otwórz wiersz polecenia i utwórz katalog lokalny do przechowywania aplikacji i przejdź do tego katalogu; na przykład:

    mkdir C:\SpringBoot
    cd C:\SpringBoot
    

    -- lub --

    mkdir /users/$USER/SpringBoot
    cd /users/$USER/SpringBoot
    
  2. Sklonuj przykładowy projekt Spring Boot na platformie Docker Getting Started do katalogu.

    git clone https://github.com/spring-guides/gs-spring-boot-docker.git
    
  3. Zmień katalog na ukończony projekt.

    cd gs-spring-boot-docker
    cd complete
    
  4. Użyj narzędzia Maven, aby skompilować i uruchomić przykładową aplikację.

    mvn package spring-boot:run
    
  5. Przetestuj aplikację internetową, przechodząc do http://localhost:8080lub za pomocą następującego polecenia curl:

    curl http://localhost:8080
    
  6. Zostanie wyświetlony następujący komunikat: Hello Docker World

    przeglądaj przykładową aplikację lokalnie

Tworzenie usługi Azure Container Registry przy użyciu interfejsu wiersza polecenia platformy Azure

  1. Otwórz wiersz polecenia.

  2. Zaloguj się do swojego konta platformy Azure:

    az login
    
  3. Wybierz subskrypcję Azure:

    az account set -s <YourSubscriptionID>
    
  4. Utwórz grupę zasobów dla zasobów platformy Azure używanych w tym samouczku.

    az group create --name=wingtiptoys-kubernetes --location=eastus
    
  5. Utwórz prywatny rejestr kontenerów platformy Azure w grupie zasobów. Samouczek publikuje przykładową aplikację jako obraz Docker do tego rejestru w późniejszych krokach. Zastąp wingtiptoysregistry unikatową nazwą rejestru.

    az acr create --resource-group wingtiptoys-kubernetes --location eastus \
     --name wingtiptoysregistry --sku Basic
    

Wypchnij swoją aplikację do rejestru kontenerów za pomocą narzędzia Jib

  1. Zaloguj się do Azure Container Registry z Azure CLI.

    # set the default name for Azure Container Registry, otherwise you need to specify the name in "az acr login"
    az config set defaults.acr=wingtiptoysregistry
    az acr login
    
  2. Otwórz plik pom.xml za pomocą edytora tekstów, takiego jak Visual Studio Code.

    code pom.xml
    
  3. <properties> Zaktualizuj kolekcję w pliku pom.xml przy użyciu nazwy rejestru usługi Azure Container Registry i najnowszej wersji programu jib-maven-plugin.

    <properties>
       <!-- Note: If your ACR name contains upper case characters, be sure to convert them to lower case characters. -->
       <docker.image.prefix>wingtiptoysregistry.azurecr.io</docker.image.prefix>
       <jib-maven-plugin.version>2.5.2</jib-maven-plugin.version>
       <java.version>1.8</java.version>
    </properties>
    
  4. Zaktualizuj kolekcję <plugins> w pliku pom.xml, tak aby element <plugin> zawierał wpis jib-maven-plugin, jak pokazano w poniższym przykładzie. Użyj obrazu podstawowego z Microsoft Container Registry (MCR): mcr.microsoft.com/openjdk/jdk:11-ubuntu, który zawiera oficjalnie obsługiwany zestaw JDK dla Azure. W przypadku innych obrazów podstawowych MCR z oficjalnie obsługiwanymi środowiskami JDK zobacz Instalowanie kompilacji Microsoft Build of OpenJDK.

    <plugin>
      <artifactId>jib-maven-plugin</artifactId>
      <groupId>com.google.cloud.tools</groupId>
      <version>${jib-maven-plugin.version}</version>
      <configuration>
         <from>
             <image>mcr.microsoft.com/openjdk/jdk:11-ubuntu</image>
         </from>
         <to>
             <image>${docker.image.prefix}/gs-spring-boot-docker</image>
         </to>
      </configuration>
    </plugin>
    
  5. Przejdź do katalogu ukończonego projektu aplikacji Spring Boot i uruchom następujące polecenie, aby skompilować obraz i wypchnąć obraz do rejestru:

    az acr login && mvn compile jib:build
    

Notatka

Ze względów bezpieczeństwa poświadczenie utworzone przy użyciu az acr login jest ważne przez jedną godzinę. Jeśli zobaczysz błąd 401 Unauthorized, uruchom ponownie polecenie az acr login --name <your registry name>, aby ponownie się uwierzytelnić. Jeśli pojawi się błąd Read timed out, spróbuj zwiększyć wartość limitu czasu za pomocą polecenia mvn -Djib.httpTimeout=7200000 jib:dockerBuild lub użyć -Djib.httpTimeout=0, aby ustawić nieskończony limit czasu.

Tworzenie klastra Kubernetes w usłudze AKS przy użyciu Azure CLI

  1. Utwórz klaster Kubernetes w usłudze Azure Kubernetes Service. Następujące polecenie tworzy klaster Kubernetes w grupie zasobów wingtiptoys-kubernetes, o nazwie wingtiptoys-akscluster, z dołączonym rejestrem Azure Container Registry (ACR) wingtiptoysregistry oraz z prefiksem DNS wingtiptoys-kubernetes:

    az aks create --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster \
     --attach-acr wingtiptoysregistry \
     --dns-name-prefix=wingtiptoys-kubernetes --generate-ssh-keys
    

    Wykonanie tego polecenia może zająć trochę czasu.

  2. Zainstaluj kubectl przy użyciu interfejsu wiersza polecenia platformy Azure. Użytkownicy systemu Linux mogą potrzebować poprzedzić to polecenie elementem sudo, ponieważ instaluje ono narzędzie wiersza polecenia Kubernetes w /usr/local/bin.

    az aks install-cli
    
  3. Pobierz informacje o konfiguracji klastra, aby można było zarządzać klastrem z interfejsu internetowego Kubernetes i kubectl.

    az aks get-credentials --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster
    

Wdróż obraz do swojego klastra Kubernetes

Ten samouczek wdraża aplikację przy użyciu programu kubectl, a następnie możesz eksplorować wdrożenie za pomocą interfejsu internetowego platformy Kubernetes.

Wdrażanie za pomocą narzędzia kubectl

  1. Otwórz wiersz polecenia.

  2. Uruchom kontener w klastrze Kubernetes przy użyciu polecenia kubectl run. Nadaj nazwę usługi dla swojej aplikacji na rzecz Kubernetes oraz podaj pełną nazwę obrazu. Na przykład:

    kubectl run gs-spring-boot-docker --image=wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest
    

    W tym poleceniu:

    • Nazwę kontenera gs-spring-boot-docker należy określić bezpośrednio po poleceniu run .

    • Parametr --image określa połączony serwer logowania i nazwę obrazu jako wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest.

  3. Uwidaczniaj klaster Kubernetes zewnętrznie przy użyciu polecenia kubectl expose. Określ nazwę usługi, publiczny port TCP używany do uzyskiwania dostępu do aplikacji oraz wewnętrzny port docelowy, na którym nasłuchuje aplikacja. Na przykład:

    kubectl expose pod gs-spring-boot-docker --type=LoadBalancer --port=80 --target-port=8080
    

    W tym poleceniu:

    • Nazwę kontenera gs-spring-boot-docker należy określić bezpośrednio po poleceniu expose pod .

    • Parametr --type określa, że klaster używa modułu równoważenia obciążenia.

    • Parametr --port określa publiczny port TCP 80. Uzyskujesz dostęp do aplikacji na tym porcie.

    • Parametr --target-port określa wewnętrzny port TCP 8080. Moduł równoważenia obciążenia przekazuje żądania do aplikacji na tym porcie.

  4. Po wdrożeniu aplikacji w klastrze wykonaj zapytanie o zewnętrzny adres IP i otwórz go w przeglądarce internetowej:

kubectl get services -o=jsonpath='{.items[*].status.loadBalancer.ingress[0].ip}'

Przeglądaj przykładową aplikację na platformie Azure

Wdrażanie za pomocą widoku zasobów platformy Kubernetes

  1. Wybierz pozycję Dodaj z dowolnego z widoków zasobów (przestrzeń nazw, obciążenia, usługi i ruch przychodzący, magazyn lub konfiguracja).

    widok zasobów kubernetes.

  2. Wklej następujący kod YAML:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: gs-spring-boot-docker
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: gs-spring-boot-docker
      template:
        metadata:
          labels:
            app: gs-spring-boot-docker
        spec:
          containers:
          - name: gs-spring-boot-docker
            image: wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest
    
  3. Wybierz pozycję Dodaj u dołu edytora YAML, aby wdrożyć aplikację.

    Przeglądaj zasoby Kubernetes, dodaj zasób.

    Po wdrożeniu elementu Deployment, podobnie jak w poprzednim kroku, wybierz pozycję Dodaj w dolnej części edytora YAML, aby wdrożyć Service przy użyciu następującego kodu YAML:

    apiVersion: v1
    kind: Service
    metadata:
      name: gs-spring-boot-docker
    spec:
      type: LoadBalancer
      ports:
      - port: 80
        targetPort: 8080
      selector:
        app: gs-spring-boot-docker
    
  4. Po dodaniu pliku YAML przeglądarka zasobów wyświetli aplikację Spring Boot. Usługa zewnętrzna zawiera połączony zewnętrzny adres IP, dzięki czemu można łatwo wyświetlić aplikację w przeglądarce.

    widok zasobów platformy Kubernetes, lista usług.

    widok zasobów platformy Kubernetes, lista usług, wyróżnione zewnętrzne punkty końcowe.

  5. Wybierz zewnętrzny adres IP. Widzisz swoją aplikację Spring Boot działającą na platformie Azure.

    Przeglądaj przykładową aplikację na platformie Azure

Następne kroki

Aby dowiedzieć się więcej na temat platformy Spring i platformy Azure, przejdź do Centrum dokumentacji platformy Azure.

Zobacz też

Aby uzyskać więcej informacji na temat korzystania z platformy Spring Boot na platformie Azure, zobacz następujący artykuł:

Aby uzyskać więcej informacji na temat korzystania z platformy Azure z językiem Java, zobacz Azure for Java Developers oraz Praca z usługami Azure DevOps i Java.

Aby uzyskać więcej informacji na temat wdrażania aplikacji Java na platformie Kubernetes przy użyciu programu Visual Studio Code, zobacz Samouczki java programu Visual Studio Code.

Aby uzyskać więcej informacji na temat przykładowego projektu Spring Boot on Docker, zobacz Spring Boot on Docker Getting Started.

Poniższe linki zawierają więcej informacji na temat tworzenia aplikacji Spring Boot:

  • Aby uzyskać więcej informacji na temat tworzenia prostej aplikacji Spring Boot, zobacz spring initializr pod adresem https://start.spring.io/.

Poniższe linki zawierają więcej informacji na temat korzystania z platformy Kubernetes z Azure:

Aby uzyskać więcej informacji na temat korzystania z interfejsu wiersza polecenia platformy Kubernetes, zobacz przewodnik użytkownika narzędzia kubectl pod adresem https://kubernetes.io/docs/reference/kubectl/.

Witryna internetowa platformy Kubernetes zawiera kilka artykułów, które omawiają używanie obrazów w prywatnych rejestrach:

Aby uzyskać więcej przykładów używania niestandardowych obrazów platformy Docker z Azure, zobacz Using a custom Docker image for Azure Web App on Linux (Używanie niestandardowego obrazu platformy Docker dla aplikacji internetowej Azure w systemie Linux).

Aby uzyskać więcej informacji na temat iteratywnego uruchamiania i debugowania kontenerów bezpośrednio w usłudze Azure Kubernetes Service (AKS) za pomocą usługi Azure Dev Spaces, zobacz Wprowadzenie do usługi Azure Dev Spaces za pomocą usługi Java.