Azure云K8S自动化部署
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
使用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配置网站在浏览器中打开时,选择链接以部署容器化的应用程序:
显示“ 资源创建”页面时,指定以下选项:
a。选择创建应用程序。
b。输入您的Spring Boot应用程序名称作为应用程序名称;例如:gs-spring-boot-docker。
C。从较早的位置输入您的登录服务器和容器映像作为容器映像 ; 例如:wingtiptoysregistry.azurecr.io/gs-spring-boot-docker : latest。
d。为服务选择外部。
e。在“ 端口”和“ 目标端口”文本框中指定外部和内部端口。
Kubernetes Configuration网站创建一个应用页面
选择部署以部署容器。
部署应用程序后,您将在“ 服务”下看到您的Spring Boot应用程序。
如果选择“ 外部端点”的链接,则可以看到您的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 。