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
- Subskrypcja platformy Azure. Jeśli nie masz jeszcze subskrypcji platformy Azure, możesz aktywować korzyści dla subskrybentów MSDN lub utworzyć bezpłatne konto platformy Azure.
- Interfejs wiersza polecenia platformy Azure.
- Obsługiwany zestaw 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 kompilacji Apache Maven (wersja 3).
- Klient usługi Git.
- Klient platformy Docker.
- Pomocnik poświadczeń platformy Docker usługi ACR.
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.
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
Sklonuj do katalogu przykładowy projekt Spring Boot on Docker Getting Started.
git clone https://github.com/spring-guides/gs-spring-boot-docker.git
Przejdź do katalogu ukończonego projektu.
cd gs-spring-boot-docker cd complete
Za pomocą narzędzia Maven skompiluj i uruchom przykładową aplikację.
mvn package spring-boot:run
Przetestuj aplikację internetową, przechodząc do witryny
http://localhost:8080
lub używając 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 za pomocą 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 na potrzeby zasobów platformy Azure używanych w tym samouczku.
az group create --name=wingtiptoys-kubernetes --location=eastus
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
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 Visual Studio Code.
code pom.xml
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>
Zaktualizuj kolekcję
<plugins>
w pliku pom.xml tak, aby element<plugin>
zawierał wpis dlajib-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>
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:dockerBuild
parametru 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 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ć.
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 poleceniemsudo
, ponieważ wdraża ono interfejs wiersza polecenia platformy Kubernetes w katalogu/usr/local/bin
.az aks install-cli
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
Otwórz wiersz polecenia.
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 poleceniurun
Parametr
--image
określa połączony serwer logowania i nazwę obrazu jakowingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest
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 poleceniuexpose 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.
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}'
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 w dolnej części edytora YAML, aby wdrożyć aplikację.
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
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 pozycję 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 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