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

Uwaga

W przypadku aplikacji Spring Boot zalecamy używanie usługi Azure Spring 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. Mówiąc dokładniej, za pomocą rozwiązania Spring Boot utworzysz aplikację, platforma Kubernetes pomoże Ci we wdrożeniu kontenera, a usługa Azure Kubernetes Service (AKS) będzie hostować Twoją aplikację.

Kubernetes i Docker to rozwiązania open source, które pomagają deweloperom zautomatyzować wdrażanie i skalowanie aplikacji uruchomionych w kontenerach oraz zarządzanie nimi.

Wymagania wstępne

Uwaga

Ze względu na wymagania tego samouczka dotyczące wirtualizacji 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 on Docker Getting Started

Poniższa procedura przeprowadzi Cię przez proces kompilowania aplikacji internetowej Spring Boot i testowania jej lokalnie.

  1. Otwórz wiersz polecenia i utwórz katalog lokalny, w którym będzie przechowywana aplikacja, 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 do katalogu przykładowy projekt Spring Boot on Docker Getting Started.

    git clone https://github.com/spring-guides/gs-spring-boot-docker.git
    
  3. Przejdź do katalogu ukończonego projektu.

    cd gs-spring-boot-docker
    cd complete
    
  4. Za pomocą narzędzia Maven skompiluj i uruchom przykładową aplikację.

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

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

    Przeglądanie przykładowej aplikacji lokalnie

Tworzenie usługi Azure Container Registry za pomocą 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 na potrzeby zasobów platformy Azure używanych w tym samouczku.

    az group create --name=wingtiptoys-kubernetes --location=eastus
    
  5. W grupie zasobów utwórz prywatny rejestr kontenerów platformy Azure. Samouczek wypchnie później przykładową aplikację jako obraz platformy Docker do tego rejestru. Zastąp wartość wingtiptoysregistry unikatową nazwą rejestru.

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

Wypychanie aplikacji do rejestru kontenerów za pośrednictwem 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 Visual Studio Code.

    code pom.xml
    
  3. Zaktualizuj kolekcję <properties> w pliku pom.xml za pomocą nazwy rejestru usługi Azure Container Registry i najnowszej wersji wtyczki 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 dla jib-maven-plugin, jak pokazano w poniższym przykładzie. Pamiętaj, że korzystamy z obrazu podstawowego z usługi Microsoft Container Registry (MCR): mcr.microsoft.com/openjdk/jdk:11-ubuntu, który zawiera oficjalnie obsługiwany zestaw JDK dla platformy Azure. Aby zapoznać się z innymi obrazami podstawowymi MCR z oficjalnie obsługiwanymi zestawami JDK, zobacz Instalowanie kompilacji microsoft 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ąć go do rejestru:

    az acr login && mvn compile jib:build
    

Uwaga

Ze względu na obawy dotyczące zabezpieczeń interfejsu wiersza polecenia platformy Azure i usługi Azure Container Registry poświadczenie utworzone przez az acr login usługę jest ważne przez 1 godzinę. Jeśli zostanie wyświetlony błąd 401 Brak autoryzacji , możesz ponownie uruchomić az acr login --name <your registry name> polecenie, aby ponownie uwierzytelnić. Jeśli zostanie wyświetlony błąd przekroczenia limitu czasu odczytu, możesz spróbować zwiększyć limity czasu za pomocą mvn -Djib.httpTimeout=7200000 jib:dockerBuildparametru lub -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łączonym usługą Azure Container Registry (ACR) wingtiptoysregistry i 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 chwilę potrwać.

  2. Przy użyciu interfejsu wiersza polecenia platformy Azure zainstaluj polecenie kubectl. W przypadku użytkowników systemu Linux może być konieczne poprzedzenie tego polecenia poleceniem sudo, ponieważ wdraża ono interfejs wiersza polecenia platformy Kubernetes w katalogu /usr/local/bin.

    az aks install-cli
    
  3. Pobierz informacje o konfiguracji klastra, aby umożliwić zarządzanie klastrem za pomocą interfejsu internetowego platformy Kubernetes i polecenia kubectl.

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

Wdrażanie obrazu w klastrze Kubernetes

Ten samouczek wdraża aplikację przy użyciu metody kubectl, a następnie umożliwia eksplorowanie wdrożenia za pośrednictwem interfejsu internetowego platformy Kubernetes.

Wdrażanie za pomocą polecenia kubectl

  1. Otwórz wiersz polecenia.

  2. Uruchom kontener w klastrze Kubernetes, używając polecenia kubectl run. Nadaj nazwę usługi aplikacji w klastrze Kubernetes i 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 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. Uwidocznij klaster Kubernetes zewnętrznie, używając polecenia kubectl expose. Określ nazwę usługi, publiczny port TCP służący 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 bezpośrednio po poleceniu expose pod.

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

    • Parametr --port określa publiczny port TCP 80. Na tym porcie uzyskuje się dostęp do aplikacji.

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

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

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

    Przeglądanie przykładowej aplikacji 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 platformy 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 w dolnej części edytora YAML, aby wdrożyć aplikację.

    Widok zasobów platformy Kubernetes, dodaj zasób.

    Po wdrożeniu elementu Deployment, podobnie jak powyżej, 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 pozycję Zewnętrzny adres IP. Następnie zobaczysz aplikację Spring Boot działającą na platformie Azure.

    Przeglądanie przykładowej aplikacji na platformie Azure

Następne kroki

Aby dowiedzieć się więcej na temat oprogramowania Spring i platformy Azure, przejdź do centrum dokumentacji dotyczącej oprogramowania Spring na platformie Azure.

Zobacz też

Aby uzyskać więcej informacji o korzystaniu z aplikacji Spring Boot na platformie Azure, zobacz następujące artykuły:

Aby uzyskać więcej informacji na temat korzystania z platformy Azure przy użyciu języka Java, zapoznaj się z tematami Platforma Azure dla deweloperów języka Java oraz Praca z narzędziami Azure DevOps i językiem Java.

Aby uzyskać więcej informacji na temat wdrażania aplikacji Java na platformie Kubernetes za pomocą programu Visual Studio Code, zobacz Samouczki języka Java — Visual Studio Code.

Aby uzyskać więcej informacji na temat przykładowego projektu aplikacji Spring Boot na platformie Docker, zobacz Spring Boot na platformie Docker — wprowadzenie.

Poniższe linki zawierają dodatkowe informacje na temat tworzenia aplikacji Spring Boot:

  • Aby uzyskać więcej informacji na temat tworzenia prostej aplikacji Spring Boot, zapoznaj się z narzędziem Spring Initializr na stronie https://start.spring.io/.

Poniższe linki zawierają dodatkowe informacje na temat korzystania z rozwiązania Kubernetes na platformie Azure:

Więcej informacji na temat korzystania z interfejsu wiersza polecenia platformy Kubernetes znajduje się w podręczniku użytkownika polecenia kubectl w witrynie https://kubernetes.io/docs/reference/kubectl/.

W witrynie internetowej platformy Kubernetes znajduje się kilka artykułów, w których omówiono używanie obrazów w rejestrach prywatnych:

Aby uzyskać dodatkowe przykłady użycia niestandardowych obrazów platformy Docker z platformą Azure, zobacz Używanie niestandardowego obrazu Docker dla usługi Azure Web App w systemie Linux.

Aby uzyskać więcej informacji na temat iteracyjnego 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 z językiem Java