Udostępnij za pośrednictwem


Wdrażanie aplikacji Spring Boot w usłudze Azure Kubernetes Service

Notatka

W przypadku aplikacji Spring Boot zalecamy używanie usługi 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.

Ten samouczek przeprowadzi Cię przez połączenie platformy Kubernetes i platformy Docker w celu tworzenia i 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

  • Subskrypcja platformy Azure; Jeśli nie masz jeszcze subskrypcji platformy Azure, możesz aktywować korzyści dla subskrybentów MSDN lub zarejestrować się w celu uzyskania bezpłatnego konta platformy Azure .
  • Interfejs wiersza polecenia (CLI) platformy Azure Command-Line.
  • Obsługiwany Java Development Kit (JDK). Aby uzyskać więcej informacji na temat zestawów JDK dostępnych do użycia podczas tworzenia aplikacji na platformie Azure, zobacz obsługa języka Java na platformie Azure i w usłudze Azure Stack.
  • Narzędzie do kompilacji Maven apache (wersja 3).
  • Klient Git.
  • Klient Docker .
  • Pomocnik do zarządzania poświadczeniami ACR Docker .

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, a następnie 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. Powinien zostać 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 konta platformy Azure:

    az login
    
  3. Wybierz subskrypcję platformy 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 usługi Azure Container Registry z poziomu interfejsu wiersza polecenia platformy Azure.

    # 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; na przykład programu Visual Studio Code.

    code pom.xml
    
  3. Zaktualizuj kolekcję <properties> w pliku pom.xml, wstawiając nazwę Rejestru dla swojego Azure Container Registry oraz najnowszą wersję 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. Należy pamiętać, że używamy obrazu podstawowego z rejestru Microsoft Container Registry (MCR): mcr.microsoft.com/openjdk/jdk:11-ubuntu, który zawiera oficjalnie obsługiwany zestaw JDK dla platformy Azure. W przypadku innych obrazów podstawowych MCR z oficjalnie obsługiwanymi zestawami JDK zobacz Install the Microsoft Build of OpenJDK (Instalowanie zestawu 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 ukończonego katalogu 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ędu na obawy dotyczące zabezpieczeń Azure CLI, usługi Azure Container Registry poświadczenie utworzone przez az acr login jest ważne przez 1 godzinę. Jeśli zostanie wyświetlony błąd 401 Unauthorized, możesz ponownie uruchomić polecenie az acr login --name <your registry name> w celu ponownego uwierzytelnienia. Jeśli zostanie wyświetlony błąd Read timed out, możesz spróbować zwiększyć limity czasu z mvn -Djib.httpTimeout=7200000 jib:dockerBuildlub -Djib.httpTimeout=0 dla nieskończonego limitu czasu.

Tworzenie klastra Kubernetes w usłudze AKS przy użyciu interfejsu wiersza polecenia platformy Azure

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

    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ą musieć poprzedzić to polecenie sudo, ponieważ wdraża ono interfejs wiersza polecenia platformy Kubernetes do /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 kubectl, a następnie umożliwia eksplorowanie wdrożenia za pośrednictwem 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:

    • Nazwa kontenera gs-spring-boot-docker jest określana natychmiast po run polecenia

    • 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:

    • Nazwa kontenera gs-spring-boot-docker jest określana natychmiast po expose pod polecenia.

    • 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 ją 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 Deployment, jak powyżej, wybierz Dodaj u dołu edytora YAML, aby wdrożyć Service za pomocą następującego 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. Następnie zobaczysz 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ą dodatkowe informacje 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ą dodatkowe informacje o korzystaniu z platformy Kubernetes z platformą Azure:

Więcej informacji na temat korzystania z interfejsu wiersza polecenia Kubernetes znajduje się w przewodniku użytkownika na stronie 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ć dodatkowe przykłady używania niestandardowych obrazów platformy Docker z platformą Azure, zobacz Używanie niestandardowego obrazu Docker dla aplikacji internetowej Azure na Linuksie.

Aby uzyskać więcej informacji na temat iteracyjnego uruchamiania i debugowania kontenerów bezpośrednio w usłudze Azure Kubernetes Service (AKS) w usłudze Azure Dev Spaces, zobacz Rozpoczynanie pracy z usługą Azure Dev Spaces przy użyciu języka Java