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.
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
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
Zmień katalog na ukończony projekt.
cd gs-spring-boot-docker cd complete
Użyj narzędzia Maven, aby skompilować i uruchomić przykładową aplikację.
mvn package spring-boot:run
Przetestuj aplikację internetową, przechodząc do
http://localhost:8080
lub za pomocą następującego poleceniacurl
:curl http://localhost:8080
Powinien zostać wyświetlony następujący komunikat: Hello Docker World
Tworzenie usługi Azure Container Registry przy użyciu interfejsu wiersza polecenia platformy Azure
Otwórz wiersz polecenia.
Zaloguj się do konta platformy Azure:
az login
Wybierz subskrypcję platformy Azure:
az account set -s <YourSubscriptionID>
Utwórz grupę zasobów dla zasobów platformy Azure używanych w tym samouczku.
az group create --name=wingtiptoys-kubernetes --location=eastus
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
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
Otwórz plik pom.xml za pomocą edytora tekstów; na przykład programu Visual Studio Code.
code pom.xml
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>
Zaktualizuj kolekcję
<plugins>
w pliku pom.xml, tak aby element<plugin>
zawierał wpisjib-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>
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:dockerBuild
lub -Djib.httpTimeout=0
dla nieskończonego limitu czasu.
Tworzenie klastra Kubernetes w usłudze AKS przy użyciu interfejsu wiersza polecenia platformy Azure
Utwórz klaster Kubernetes w usłudze Azure Kubernetes Service. Następujące polecenie tworzy klaster Kubernetes w grupie zasobów
wingtiptoys-kubernetes
, zwingtiptoys-akscluster
jako nazwą klastra, z dołączoną usługą Azure Container Registry (ACR)wingtiptoysregistry
orazwingtiptoys-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.
Zainstaluj
kubectl
przy użyciu interfejsu wiersza polecenia platformy Azure. Użytkownicy systemu Linux mogą musieć poprzedzić to poleceniesudo
, ponieważ wdraża ono interfejs wiersza polecenia platformy Kubernetes do/usr/local/bin
.az aks install-cli
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
Otwórz wiersz polecenia.
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 porun
poleceniaParametr
--image
określa połączony serwer logowania i nazwę obrazu jakowingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest
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 poexpose 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.
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}'
Wdrażanie za pomocą widoku zasobów platformy Kubernetes
Wybierz pozycję Dodaj z dowolnego z widoków zasobów (przestrzeń nazw, obciążenia, usługi i ruch przychodzący, magazyn lub konfiguracja).
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
Wybierz pozycję Dodaj u dołu edytora YAML, aby wdrożyć aplikację.
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
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.
Wybierz zewnętrzny adres IP. Następnie zobaczysz aplikację Spring Boot działającą 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