云原生应用持续交付入门:基于云效部署java应用到kubernetes集群

简介: 一般来说,使用K8S部署场景如下:对源代码进行一定的质量检测,例如单元测试、代码扫描等。将源代码构建成为可交付的制品,也就是容器镜像。对制品进行测试环境验证。使用完成验证的制品进行线上部署。使用基础设施即代码的方式,在代码库中管理与应用相关的所有YAML文件。

背景知识

一般来说,使用K8S部署场景如下:

对源代码进行一定的质量检测,例如单元测试、代码扫描等。
将源代码构建成为可交付的制品,也就是容器镜像。
对制品进行测试环境验证。
使用完成验证的制品进行线上部署。
使用基础设施即代码的方式,在代码库中管理与应用相关的所有YAML文件。
上述活动需要有不同角色的参与:开发、测试、运维。如何保证不同参与者可以使用统一的交付流程来进行协作,是云效Flow交付流水线要解决的主要问题。

通过云效持续交付流水线和kubernetes很好的结合在一起,为应用的持续交付提供了很好的基础保障。
在这里插入图片描述
开发者提交代码变更到代码仓库,云效在监听代码库的变动,一旦代码发生变化,将自动触发云效持续部署流水线一次构建任务的运行,包括代码检查、构建、测试部署、测试验证和生产环境部署等过程。

其中,在构建完之后,生成Docker镜像,并自动上传至应用镜像仓库,在部署阶段时,获取当前流水线实例构建出来的镜像版本,通过kubernetes进行容器编排部署。而这一切,都是通过自动化的手段进行完成。

导入示例源代码

1.前往:云效代码管理Codeup 超链接:

https://codeup.aliyun.com?channel=yy_yc_flowlab

2.点击【导入代码库】
在这里插入图片描述

  1. 选择【URL导入】,源代码库地址填写: https://code.aliyun.com/flow-example/spring-boot.git
    在这里插入图片描述创建流水线
    1.点击左侧九宫格图标,选择【流水线】,进入云效流水线。
    在这里插入图片描述
  2. 单击右上角新建流水线,进入流水线创建向导页面。
    在这里插入图片描述
  3. 选择模板Java·测试、构建镜像,发布到kubernets集群/阿里云容器服务,并单击创建。
    在这里插入图片描述

配置代码库

创建流水线之后会自动弹出添加代码源的窗口,选择Codeup,代码仓库选择前面我们导入的spring-boot
在这里插入图片描述
勾选【开启代码源触发】,过滤条件填写 .*
这样后续master分支一旦进行了修改,将会自动触发流水线构建、测试、部署。
在这里插入图片描述

创建镜像仓库

在配置云效流水线的镜像构建任务前,需要先创建容器镜像仓库,以便存储镜像。

如果您已有阿里云容器镜像仓库,本步骤可以省略。

前往:阿里云容器镜像服务台,选择【个人实例】
在这里插入图片描述
选择【创建个人版】
在这里插入图片描述
设置阿里云Docker Registry登录密码,然后单击确定。

在这里插入图片描述
在这里插入图片描述
设置完密码后,开始创建镜像仓库。注意下方图片中的区域可以自由选择,但在下一步配置云效流水线时需要用到。

如下图,此处我们选择华东2(上海)
在这里插入图片描述
在这里插入图片描述
填写命名空间、仓库名称,自定义即可
在这里插入图片描述
在这里插入图片描述
选择本地仓库,点击【创建镜像仓库】,即可完成镜像仓库的创建
在这里插入图片描述

配置流水线构建任务

已有容器镜像仓库后,我们继续来配置云效流水线。
在这里插入图片描述
如上图,单击【Java 构建Docker镜像并推送镜像仓库】流程配置。

单击展开镜像构建并推送至阿里云镜像仓库,然后单击新建服务授权。同意授权之后,云效流水线Flow会被授予前面的阿里云镜像仓库权限。

在弹出的云资源授权页面单击同意授权。
在这里插入图片描述
接下来完成区域、仓库的配置。标签填入“${DATETIME}”,表示以流水线触发时的时间戳作为镜像的标签。Dockerfile路径填入 Dockerfile2
在这里插入图片描述

获取kubernetes集群配置文件

注意:本步骤所有操作均需新建无痕窗口,并使用第一步创建好的阿里云RAM账号

1.打开浏览器的无痕模式窗口,浏览器地址栏输入 www.aliyun.com

Goole Chrome浏览器打开无痕模式的快捷键为Ctrl/Cmd+Shift+N。
2.使用左侧云产品资源列表中提供的子用户名称和子用户密码登录阿里云
在这里插入图片描述
选择【RAM用户登录】,用户名和密码填写左侧云产品资源的子用户名和子用户密码
在这里插入图片描述
在这里插入图片描述

  1. 继续在无痕窗口内操作,浏览器前往阿里云ACK控制台:
    https://cs.console.aliyun.com

可以看到,已成功为您创建一台ACK资源。

在这里插入图片描述
单击控制台左侧导航栏的集群,然后在集群列表中单击详情。
在这里插入图片描述
在集群详情页中,选择集群信息 > 连接信息 > 公网访问,然后单击复制,将集群配置文件内容保存下来,接下来的云效流水线配置部署任务将会用到集群连接信息。
在这里插入图片描述

配置流水线部署任务

1.切回原来的云效流水线配置窗口, 单击kubernets发布任务,进入配置,然后单击新建连接。
在这里插入图片描述

  1. 集群类型选择自定义集群,填写集群名称,然后将步骤二中保存的集群配置文件内容粘贴到集群配置文件文本框中,最后单击保存。
    在这里插入图片描述
  2. YAML路径修改为app-configs/manifest-app。
    在这里插入图片描述
  3. 单击添加参数,参数类型选择上游输出,参数名填入IMAGE,参数值选择镜像构建并推送到阿里云镜像仓库.镜像VPC地址。
    这样在运行时,云效Flow会把YAML路径下的所有文件中的${IMAGE}都替换成镜像的地址,然后再进行kubectl发布。
    示例代码库中的文件https://code.aliyun.com/flow-example/spring-boot/blob/master/app-configs/manifest-app/app.yaml的内容如下,所以其中的${IMAGE}就会被替换成实际的镜像地址。

    在这里插入图片描述
  4. 再次单击添加参数,参数类型选择自定义,参数名称填入HOST,参数值填入ACK集群的测试域名。
    这样yaml文件中的${HOST}就会被替换成实际的测试地址。
    示例代码库中的文件https://code.aliyun.com/flow-example/spring-boot/blob/master/app-configs/manifest-app/ingress.yaml的内容如下,所以其中的${HOST}就会被替换成实际的测试地址。

在这里插入图片描述

请参考以下步骤查询集群的测试域名:

返回之前打开的无痕窗口,在集群详情页,单击集群信息 > 基本信息,然后单击复制测试域名,如下图所示。
在这里插入图片描述
说明:粘贴时请将测试域名的前缀*.去掉,例如cc96863588562483e873ee0c367a579b5.cn-shanghai.alicontainer.com。

添加参数后的配置页面如下所示。
在这里插入图片描述
继续点击【添加步骤】,选择【其他】-【云效运营活动验证】
在这里插入图片描述
下面的集群连接需要与上一步kubectl的发布保持一致,如下图,我们和前面保持一致填入test ,点击保存

在这里插入图片描述

运行流水线

配置完成后,单击配置页面右上角保存并运行,触发流水线。
在这里插入图片描述

访问SpringBoot示例应用

1.集群发布成功后,点击 Kubectl发布 查看集群发布日志,可以看到发布成功的HOSTS和ADDRESS地址。
在这里插入图片描述
2.以管理员身份打开本地C:\Windows\System32\drivers\etc\hosts文件,将Host地址和Address加入hosts文件(中间以空格隔开),如下图所示,最后按下Ctrl+S键保存文件。
说明: Linux和Mac系统请修改/etc/hosts文件。
在这里插入图片描述
3.在浏览器打开域名,返回页面如下所示,表示SpringBoot示例应用部署成功。
在这里插入图片描述

修改任意代码,触发持续交付

因为我们在前面开启了代码源触发,所以当检测到master分支有代码进行变更,将会自动触发流水线的运行。

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
3月前
|
监控 Cloud Native Java
Quarkus 云原生Java框架技术详解与实践指南
本文档全面介绍 Quarkus 框架的核心概念、架构特性和实践应用。作为新一代的云原生 Java 框架,Quarkus 旨在为 OpenJDK HotSpot 和 GraalVM 量身定制,显著提升 Java 在容器化环境中的运行效率。本文将深入探讨其响应式编程模型、原生编译能力、扩展机制以及与微服务架构的深度集成,帮助开发者构建高效、轻量的云原生应用。
415 44
|
2月前
|
存储 Oracle Java
java零基础学习者入门课程
本课程为Java零基础入门教程,涵盖环境搭建、变量、运算符、条件循环、数组及面向对象基础,每讲配示例代码与实践建议,助你循序渐进掌握核心知识,轻松迈入Java编程世界。
315 0
|
3月前
|
Java
java入门代码示例
本文介绍Java入门基础,包含Hello World、变量类型、条件判断、循环及方法定义等核心语法示例,帮助初学者快速掌握Java编程基本结构与逻辑。
421 0
|
4月前
|
安全 Java 数据库连接
2025 年最新 Java 学习路线图含实操指南助你高效入门 Java 编程掌握核心技能
2025年最新Java学习路线图,涵盖基础环境搭建、核心特性(如密封类、虚拟线程)、模块化开发、响应式编程、主流框架(Spring Boot 3、Spring Security 6)、数据库操作(JPA + Hibernate 6)及微服务实战,助你掌握企业级开发技能。
661 3
|
6月前
|
Java API 微服务
2025 年 Java 从入门到精通学习笔记全新版
《Java学习笔记:从入门到精通(2025更新版)》是一本全面覆盖Java开发核心技能的指南,适合零基础到高级开发者。内容包括Java基础(如开发环境配置、核心语法增强)、面向对象编程(密封类、接口增强)、进阶技术(虚拟线程、结构化并发、向量API)、实用类库与框架(HTTP客户端、Spring Boot)、微服务与云原生(容器化、Kubernetes)、响应式编程(Reactor、WebFlux)、函数式编程(Stream API)、测试技术(JUnit 5、Mockito)、数据持久化(JPA、R2DBC)以及实战项目(Todo应用)。
387 5
|
3月前
|
前端开发 Java 数据库连接
帮助新手快速上手的 JAVA 学习路线最详细版涵盖从入门到进阶的 JAVA 学习路线
本Java学习路线涵盖从基础语法、面向对象、异常处理到高级框架、微服务、JVM调优等内容,适合新手入门到进阶,助力掌握企业级开发技能,快速成为合格Java开发者。
571 3
|
4月前
|
NoSQL Java 关系型数据库
Java 从入门到进阶完整学习路线图规划与实战开发最佳实践指南
本文为Java开发者提供从入门到进阶的完整学习路线图,涵盖基础语法、面向对象、数据结构与算法、并发编程、JVM调优、主流框架(如Spring Boot)、数据库操作(MySQL、Redis)、微服务架构及云原生开发等内容,并结合实战案例与最佳实践,助力高效掌握Java核心技术。
434 1
|
4月前
|
Java 测试技术 API
Java IO流(二):文件操作与NIO入门
本文详解Java NIO与传统IO的区别与优势,涵盖Path、Files类、Channel、Buffer、Selector等核心概念,深入讲解文件操作、目录遍历、NIO实战及性能优化技巧,适合处理大文件与高并发场景,助力高效IO编程与面试准备。
|
4月前
|
Java 编译器 API
Java Lambda表达式与函数式编程入门
Lambda表达式是Java 8引入的重要特性,简化了函数式编程的实现方式。它通过简洁的语法替代传统的匿名内部类,使代码更清晰、易读。本文深入讲解Lambda表达式的基本语法、函数式接口、方法引用等核心概念,并结合集合操作、线程处理、事件回调等实战案例,帮助开发者掌握现代Java编程技巧。同时,还解析了面试中高频出现的相关问题,助你深入理解其原理与应用场景。
|
3月前
|
Java API 数据库
2025 年最新 Java 实操学习路线,从入门到高级应用详细指南
2025年Java最新实操学习路线,涵盖从环境搭建到微服务、容器化部署的全流程实战内容,助你掌握Java 21核心特性、Spring Boot 3.2开发、云原生与微服务架构,提升企业级项目开发能力,适合从入门到高级应用的学习需求。
759 0