在Azure AKS集群上使用Helm部署Java Springboot应用(一)

前言

本文主要基于通过使用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工作流。
在这里插入图片描述
下一节将继续介绍具体咋做。

  • 20
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值