前言
本文主要基于通过使用Azure Kubernetes服务,在集群上部署Java Spingboot应用。通过本文能够更好的了解Azure云,Azure Kubernetes Service(AKS),建立基础的Devops环境。
为什么要写这篇文章?
网上大多数介绍AKS或Kubenetes的文章强调于安装实践,本文将从流程意义上进行阐述。
1. 先建立最简单的Java Springboot工程
我们首先通过idea新建一个Java Springboot工程,在创建之前先敲重点(如果面试java工程师,有一些面试官肯定会问Java Springboot 和 Spingcloud区别):
Spring Boot和Spring Cloud是两个不同的Spring项目,它们为开发者提供了不同的功能和服务。
Spring Boot:
Spring Boot是一个用于简化Spring应用程序初始搭建以及开发过程的工具。它主要是为了解决Spring应用管理依赖、配置文件的繁琐和重复的问题。Spring Boot帮助开发者快速搭建单个微服务。
Spring Cloud:
Spring Cloud是一套完整的微服务解决方案,它提供了服务发现注册、配置中心、负载均衡、断路器、分布式消息传递等一系列的功能。Spring Cloud构建于Spring Boot之上,使得开发者能够快速搭建一套符合微服务架构的应用系统。
主要区别:
Spring Boot专注于快速、便捷地开发单个微服务,而Spring Cloud关注全局微服务架构的整体解决方案。
Spring Boot可以独立使用,开发时选择适合的Spring Boot Starter即可。而Spring Cloud需要结合Spring Boot使用,并且依赖于Spring Boot的自动配置原理。
Spring Cloud为开发者提供了工具,如Spring Cloud Config用于配置管理,Spring Cloud Netflix提供的开箱即用的服务如Eureka、Hystrix、Zuul等。
Spring Cloud为开发者提供了与外部系统交互的抽象,如Spring Cloud Stream为消息传递服务提供抽象。
使用Spring Boot和Spring Cloud的例子:
Spring Boot Starter依赖(在pom.xml中):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Spring Cloud依赖(在pom.xml中):
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
简言之:Springboot快速轻量微服务框架,主要用于快速启动,而Spring Cloud提供了整套微服务架构的解决方案。
那么如果面试官再问,什么是微服务?你可以和他说,一百个人有一百个哈姆雷特,咱是来干活的,不是来论文答辩的。我也不能全部解释清楚微服务,在我看来以往一个服务器部署一个应用,现在可以通过微服务框架建立多个接口,每个应用就是接口对外进行服务,对内可以连接数据等等。
回到正题。建立应用。New Projet,然后一定要注意Server URL,springboot是通过下载方式建立框架。默认用https://start.spring.io/ 创建,但有个问题,在springboot 3.0之后没办法支持Java1.8版本,所以建议换成阿里的start.aliyun.com
好了,接下来还有一坑。打开pom.xml文件,把这行注释掉,要不然打包后运行提示“jar中没有主清单属性”,网上鬼扯的方法一堆,只有这个最有效。
然后我们打开BaseController,创建一个接口,通过接口能访问出现Hello World!
然后我们进行maven打包。
然后运行通过maven打包好的springboot jar文件。用最简单的命令行命令 java -jar 加上jar包的名称。运行成功。
打开浏览器输入 http://127.0.0.1:8080/test,查看结果
2. 开始申请Azure账户
首先,要有一个微软的账号,然后登录到 https://portal.azure.com/ 一般新用户可以12个月免费使用。具体申请流程有很多教程,动手能力强的可以直接通过https://azure.microsoft.com/en-us/free/ 申请免费资源,如果不行的话可以参考:https://blog.51cto.com/misaka/5982584
当登录https://portal.azure.com/ 出现以下界面就可以了。
- 开始准备Azure本地环境
本文使用win10环境,要在本地安装 - Azure CLI
有啥用?
https://learn.microsoft.com/zh-cn/cli/azure/
Azure 命令行接口 (Azure CLI) 是一组用来创建和管理 Azure 资源的命令。 Azure CLI 可用于各种 Azure 服务,可用来快速使用 Azure(侧重于自动化)。
安装办法:
https://learn.microsoft.com/zh-cn/cli/azure/install-azure-cli-windows?tabs=azure-cli - Helm
- kubectl
有啥用和怎么安装?请参考:https://zhuanlan.zhihu.com/p/75765266
3. 开始介绍AKS+helm+springboot框架原理
我们要做的是devops,CI/CD。
我们有了代码,代码需要提交到代码库(github…), 然后代码库和Azure需要建立关联,然后进行自动化任务,创建Azure pipeline。
先创建CI pipeline。
Azure提供CI 构建pipeline,整合github这样的代码库,通过打包工具maven把代码打包成Jar文件,然后通过docker把应用达成镜像包。敲重点,镜像包不是直接给云服务器(VM)使用,而是放到ACR(Azure Container Registry)镜像仓库,就是push到ACR。push还没有完事,你还需要告诉别人你东西放到哪里了,怎么做的?push之后就是一个artifact了,需要copy到这个位置,最终还要有一个drop任务。以上就是构建干的活。那么Helm干啥了?Helm负责的是打包,不要和maven打包混了,Helm打包的是image,在Azure pipeline里会指定chart yaml文件,这个文件是我们定义好怎么打包,打包到什么位置(ACR)。
然后我们创建CD自动化任务pipeline,我们CI构建了镜像,怎么把镜像发布到云服务器就是CD做的工作。CD pipeline需要和AKS(Azure Kubernates service)进行绑定,还记得Helm吗?Helm的chart文件指定了ACR镜像的位置,就是之前的artifact位置。需要指定AKS,指定Auzre订阅,指定资源组,目的就是要自动化工作流知道把镜像发布到哪里,怎么发布,有多少replica,就是多少个worker nodes。这里面POD就是Kubernetes的最小工作单元。我们的springboot应用最终就是要部署进pod中。
下图非常清晰的展示了整个CICD工作流。
下一节将继续介绍具体咋做。