将Spring Boot程序部署到Azure Kubernetes

将Spring Boot程序部署到Azure Kubernetes

Kubernetes和 Docker是开源解决方案,可帮助开发人员自动化其在容器中运行的应用程序的部署,扩展和管理.

技术开发 编程 技术框架 技术发展

 

将Spring Boot程序部署到Azure Kubernetes

Kubernetes和 Docker是开源解决方案,可帮助开发人员自动化其在容器中运行的应用程序的部署,扩展和管理.

Kubernetes和 Docker是开源解决方案,可帮助开发人员自动化其在容器中运行的应用程序的部署,扩展和管理。

本教程将引导您结合使用这两种流行的开源技术,以开发Spring Boot应用程序并将其部署到Microsoft Azure。更具体地说,您使用Spring Boot进行应用程序开发,使用Kubernetes进行容器部署,并使用Azure Kubernetes服务(AKS)托管应用程序。

先决条件

  • Azure订阅;如果您还没有Azure订阅,则可以激活MSDN订阅者权益或注册免费的Azure帐户。

  • 在Azure的命令行界面(CLI) 。

  • 受支持的Java开发工具包(JDK)。有关在Azure上进行开发时可用的JDK的更多信息,请参见https://aka.ms/azure-jdks。

  • Apache的Maven构建工具(版本3)。

  • 一个Git客户。

  • 一个码头工人的客户端。

  • 该ACR泊坞窗凭证帮手。

 注意

由于本教程对虚拟化的要求,您不能在虚拟机上按照本文中的步骤进行操作。您必须使用启用了虚拟化功能的物理计算机。

在Docker入门Web应用程序上创建Spring Boot

以下步骤将引导您构建Spring Boot Web应用程序并在本地对其进行测试。

打开命令提示符并创建一个本地目录来保存您的应用程序,然后切换到该目录;例如:

mkdir C:SpringBoot

cd C:SpringBoot


mkdir /users/$USER/SpringBoot

cd /users/$USER/SpringBoot

将Docker入门指南上的Spring Boot示例项目克隆到该目录中。


git clone https://github.com/spring-guides/gs-spring-boot-docker.git

将目录更改为完成的项目。


cd gs-spring-boot-docker

cd complete

使用Maven构建和运行示例应用程序。


mvn package spring-boot:run

通过浏览到http://localhost:8080或使用以下curl命令来测试Web应用程序:


curl http://localhost:8080

您应该看到显示以下消息:Hello Docker World

sb01.png


使用Azure CLI创建Azure容器注册表

打开命令提示符。


登录到您的Azure帐户:

Azure CLI

az login

选择您的Azure订阅:

Azure CLI

az account set -s <YourSubscriptionID>

为本教程中使用的Azure资源创建资源组。

Azure CLI

az group create --name=wingtiptoys-kubernetes --location=eastus

在资源组中创建一个私有Azure容器注册表。本教程在后续步骤中将示例应用程序作为Docker映像推送到此注册表。用wingtiptoysregistry注册表的唯一名称替换。

Azure CLI

az acr create --resource-group wingtiptoys-kubernetes --location eastus

 --name wingtiptoysregistry --sku Basic

通过Jib将您的应用程序推送到容器注册表

从Azure CLI登录到Azure容器注册表。

Azure CLI

# set the default name for Azure Container Registry, otherwise you will need to specify the name in "az acr login"

az configure --defaults acr=wingtiptoysregistry

az acr login

用文本编辑器打开pom.xml文件。例如VS Code。

code pom.xml

使用Azure容器注册表的注册表名称和最新版本的jib-maven-plugin更新pom.xml文件中的<properties>集合。

XML格式

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

更新pom.xml文件中的<plugins>集合,以便该元素包含的条目,如以下示例所示。请注意,我们使用的是Microsoft容器注册表(MCR)中的基本映像:该映像包含正式支持的Azure JDK。有关具有官方支持的JDK的其他MCR基本映像,请参阅Java SE JDK,Java SE JRE,Java SE Headless JRE以及Java SE JDK和Maven。<plugin>jib-maven-pluginmcr.microsoft.com/java/jdk:8-zulu-alpine

XML格式

<plugin>

  <artifactId>jib-maven-plugin</artifactId>

  <groupId>com.google.cloud.tools</groupId>

  <version>${jib-maven-plugin.version}</version>

  <configuration>

     <from>

         <image>mcr.microsoft.com/java/jdk:8-zulu-alpine</image>

     </from>

     <to>

         <image>${docker.image.prefix}/${project.artifactId}</image>

     </to>

  </configuration>

</plugin>

导航到您的Spring Boot应用程序的完成的项目目录,然后运行以下命令来构建映像并将映像推送到注册表:


az acr login && mvn compile jib:build

注意

由于Azure Cli和Azure容器注册表的安全问题,创建的凭据az acr login有效期为1个小时,如果遇到401未经授权错误,则可以az acr login -n <your registry name>再次运行命令以重新进行身份验证。

使用Azure CLI在AKS上创建Kubernetes群集

在Azure Kubernetes服务中创建Kubernetes群集。以下命令在wingtiptoys-kubernetes资源组中创建kubernetes群集,其中wingtiptoys-akscluster作为群集名称,并附加了Azure容器注册表(ACR),并且wingtiptoys-kubernetes作为DNS前缀:wingtiptoysregistry


Azure CLI

az aks create --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster

 --attach-acr wingtiptoysregistry

 --dns-name-prefix=wingtiptoys-kubernetes --generate-ssh-keys

该命令可能需要一段时间才能完成。

kubectl使用Azure CLI 安装。Linux用户可能必须在此命令前加上前缀,sudo因为它将Kubernetes CLI部署到/usr/local/bin。

Azure CLI

az aks install-cli

下载集群配置信息,以便您可以从Kubernetes Web界面和管理集群kubectl。

Azure CLI

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

将映像部署到您的Kubernetes集群

本教程使用部署应用程序kubectl,然后允许您通过Kubernetes Web界面探索部署。

用kubectl部署

打开命令提示符。

使用以下kubectl run命令在Kubernetes集群中运行容器。在Kubernetes中为您的应用提供服务名称以及完整的图像名称。例如:

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

在此命令中:

gs-spring-boot-docker在run命令后立即指定容器名称

该--image参数将组合的登录服务器和映像名称指定为wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest

使用该kubectl expose命令从外部公开Kubernetes集群。指定服务名称,用于访问应用程序的面向公众的TCP端口以及应用程序侦听的内部目标端口。例如:


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

在此命令中:


gs-spring-boot-docker在expose pod命令后立即指定容器名称。


该--type参数指定集群使用负载均衡器。


该--port参数指定面向公众的TCP端口80。您可以在此端口上访问应用程序。


该--target-port参数指定内部8080 TCP端口。负载均衡器将请求转发到此端口上的应用程序。


将应用程序部署到群集后,查询外部IP地址并在Web浏览器中将其打开:


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

在Azure上浏览示例应用

使用Kubernetes Web界面进行部署

打开命令提示符。

在默认浏览器中打开Kubernetes集群的配置网站:

Azure CLI

az aks browse --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster


如果您的AKS群集使用RBAC,则必须先创建ClusterRoleBinding,然后才能正确访问仪表板。默认情况下,Kubernetes仪表板的读取访问权限最少,并显示RBAC访问错误。Kubernetes仪表板当前不支持用户提供的凭据来确定访问级别,而是使用授予服务帐户的角色。集群管理员可以选择授予对kubernetes-dashboard服务帐户的其他访问权限,但是这可以作为特权升级的载体。您还可以集成Azure Active Directory身份验证以提供更精细的访问级别。


要创建绑定,请使用kubectl create clusterrolebinding命令。下面的示例演示如何创建示例绑定,但是,此示例绑定不应用任何其他身份验证组件,并且可能导致使用不安全。Kubernetes仪表板向任何有权访问URL的人开放。不要公开展示Kubernetes仪表板。


kubectl create clusterrolebinding kubernetes-dashboard --clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard

有关使用不同身份验证方法的更多信息,请参阅dashboard-authentication上的Kubernetes仪表板Wiki 。

当Kubernetes配置网站在浏览器中打开时,选择链接以部署容器化的应用程序:

kb01.png

显示“ 资源创建”页面时,指定以下选项:

a。选择创建应用程序。

b。输入您的Spring Boot应用程序名称作为应用程序名称;例如:gs-spring-boot-docker。

C。从较早的位置输入您的登录服务器和容器映像作为容器映像 ; 例如:wingtiptoysregistry.azurecr.io/gs-spring-boot-docker : latest。

d。为服务选择外部。

e。在“ 端口”和“ 目标端口”文本框中指定外部和内部端口。

kb02.png

Kubernetes Configuration网站创建一个应用页面

选择部署以部署容器。

kb05.png

部署应用程序后,您将在“ 服务”下看到您的Spring Boot应用程序。

kb07.png

如果选择“ 外部端点”的链接,则可以看到您的Spring Boot应用程序在Azure上运行。

Kubernetes网站,服务列表,外部端点

在Azure上浏览示例应用

下一步

要了解有关Spring和Azure的更多信息,请继续使用Spring on Azure文档中心。


其他资源

有关在Azure上使用Spring Boot的更多信息,请参见以下文章:


将Spring Boot应用程序部署到Azure App Service

有关将Azure与Java结合使用的更多信息,请参见Azure for Java Developers和使用Azure DevOps和Java。

有关使用Visual Studio Code将Java应用程序部署到Kubernetes的更多信息,请参见Visual Studio Code Java教程。

有关Docker上的Spring Boot示例项目的更多信息,请参阅Docker上的Spring Boot入门。

以下链接提供了有关创建Spring Boot应用程序的其他信息:

有关创建简单的Spring Boot应用程序的更多信息,请参见https://start.spring.io/上的Spring Initializr 。

技术开发 编程 技术框架 技术发展