传统Java Web系统上云(K8S)详细步骤

简介: 传统的Java Web应用迁移到云环境托管K8S环境,可以享受到K8S的应用管理便利及公有云的强大扩容能力。这里提供一个迁移云的详细步骤。

对很多公司来说,有不少传统的Java Web应用需要迁移到云环境继续运营,但是暂时没有按云原生的方式重构系统的迫切需要,这样我们需要一个想对简单的方法,迁移这些Java应用系统到云托管的K8S上,这里就说说这个迁移的详细过程,给有类似需要的同学一个参考。

作者这里需要迁移的Java Web应用,都是Spring Boot的Java Web应用的。迁移的详细操作如下:

第一步,确保上云操作的是maven项目,如果不是请自行转成maven。

对于java项目转maven项目的方法,有很多文章可以参考,请自行处理好,保证项目可以打成一个含了tomcat的单独全包的。


第二步,在环境变量里配置本地docker环境.

1、准备docker私有镜像仓库的证书文件:docker_pem.zip,把这个文件下载到本地电脑的一个目录,假定证书路径是: /usr/local/docker_pem

2、设置环境变量。

Windows:

# 在环境变量->系统变量->新建 
DOCKER_HOST=tcp://192.168.74.82:2376
DOCKER_CERT_PATH=/usr/local/docker_pem
DOCKER_TLS_VERIFY=1

MacOS:

# vim ~/.bash_profile 
export DOCKER_HOST=tcp://192.168.74.82:2376
export DOCKER_CERT_PATH=/usr/local/docker_pem
export DOCKER_TLS_VERIFY=1
 # source ~/.bash_profile

3、如无生效,重启电脑。


值得注意的是配置的是系统变量,在装docker时用户变量那里会有一个默认docker仓库的配置,记得要将用户变量与docker相关的配置删掉,已新增的系统变量为准

这是我本地的系统变量,仅供参考

aliyun-01.png

配置好系统变量后,记得重启电脑。怎样检查配置是否生效呢,去到docker服务器192.168.74.82,在根目录下输入docker images,列出当前所有镜像,如果列出一堆镜像则说明配置生效了,如果一个镜像都没请检查环境变量里的系统变量配置是否正确,确保用户变量的默认配置删掉。


第三步,将项目打包成docker镜像

其实只需要改动maven项目的pom.xml文件、在项目的跟目录下新建Dockerfile文件,Dock而file文件内容如下。

FROM xxx/rdgroup-jdk6-resin3.1.8:v1-utf8
ARG WEB_PATH
ADD $WEB_PATH /data/web
ENTRYPOINT ["/resin-pro-3.1.8/bin/httpd.sh", "-Xmx512m", "-Xms512m"]

FROM后面是resin3.1.8和jdk6的基础镜像,就是我们的项目是基于这个基础镜像创建的。基础镜像分为GBK、UTF-8两个版本,根据自己的项目编码选择基础镜像,gbk版本:xxx/rdgroup-jdk6-resin3.1.8:v1-gbk,utf8版本:xxx/rdgroup-jdk6-resin3.1.8:v1-utf8。ENTRYPOINT的内存设置根据现有项目resin里配置来设置。

pom.xml文件增加dockerfile插件:dockerfile-maven-plugin,注意goals标签里的内容是注释掉的,如果不注释掉,maven每回package都会推送镜像到开发环境,也就是说maven的clean和package两个命令指示单纯的打包,推送镜像另外写命令来推。

pom.xml文件内容如下:

<plugin>
         <groupId>com.spotify</groupId>
         <artifactId>dockerfile-maven-plugin</artifactId>
         <version>${dockerfile-maven-plugin.version}</version>
         <executions>
             <execution>
                 <id>default</id>
                 <!--<goals>
                     <goal>build</goal>
                     <goal>push</goal>
                 </goals>-->
             </execution>
         </executions>
         <configuration>
             <repository>${docker.host.dev}/${project.artifactId}</repository>
             <tag>${project.version}</tag><!-- docker默认使用pom版本 -->
             <!-- 使用maven setting.xml里的配置 -->
             <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
             <buildArgs>
                 <WEB_PATH>./target/${project.artifactId}-${project.version}</WEB_PATH>
             </buildArgs>
         </configuration>
     </plugin>
 </plugins>
<pluginManagement>
    <plugins>
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>dockerfile-maven-plugin</artifactId>
        </plugin>
    </plugins>
</pluginManagement>

pom.xml的properties里增加:

<maven.compiler.source>1.6</maven.compiler.source>
<maven.compiler.target>1.6</maven.compiler.target>
<docker.host.dev>192.168.74.82:5000</docker.host.dev>
<dockerfile-maven-plugin.version>1.3.6</dockerfile-maven-plugin.version> <!-- dockerfilec插件 -->

第四步,推送项目镜像到开发环境

maven项目package完后,检查target目录下是否生成了上图所示的目录aliyun-02.png,如没生成请核对下pom.xml文件,没问题就用命令clean package dockerfile:build dockerfile:push -e推送镜像。镜像推送成功后,会在IDEA的控制台上显示success字样的,看到success字样后去192.168.74.82服务上查看是否有推送成功,查看项目推送的镜像:

aliyun-03.png


第五步,k8s打包部署docker镜像

我们是Helm来部署应用到K8S上,下面是Helm的流程。其中database_conf.xml的修改,可以参考我另一篇文章“K8S部署传统应用镜像操作指南”。
helm发布流程:
   1、下载发布包feedback-20200107.2.tgz,根据项目需要,只需改动Chart.yaml、values.yaml,其他文件都已模板化。修改完打zip包上传到192.168.75.85的zx-news文件夹下,如果其他应用不放在这个命名空间下,需要重新新建命名空间。
   2、解压到当前目录,用helm package feedback打包生成.tgz包,部署到k8s用helm install  feedback --namespace zx-news --set image.repository=192.168.74.82:5000 feedback-20200107.2.tgz命令,查看发布结果,STATUS:DEPLOYED,表示已经部署成功。
   3、用k8s集合任何一台都可以访问,例如:http://IP:32700/xxx.jsp。每个应用端口不能重复,32700在values.yaml的service→port里设置。访问如果有报错,查看报错信息:kubectl -n trad-ns logs feedback-77bd44f49d-zwxjp,feedback-77bd44f49d-zwxjp这个是应用所在容器名称,查看运行容器命令kubectl -n zx-news get pods。


k8s部署的项目不会用到传统应用的resin_config.xml了,所以之前配置在该文件的数据都要抽取出来。values.yaml的containers-->env-->value配置的是dev,上线后这里记得改成prod,所以项目的配置文件要根据环境的不同设置不同配置文件,例:feedback-dev.properties,feedback-prod.properties。


至此,我们就把一个Java Web应用迁移到了阿里云的托管K8S上,可以享受到K8S的应用管理便利及公有云的强大扩容能力了。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
5月前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
529 1
|
5月前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
541 0
|
5月前
|
JavaScript Java 大数据
基于JavaWeb的销售管理系统设计系统
本系统基于Java、MySQL、Spring Boot与Vue.js技术,构建高效、可扩展的销售管理平台,实现客户、订单、数据可视化等全流程自动化管理,提升企业运营效率与决策能力。
|
6月前
|
消息中间件 Java Kafka
Java 事件驱动架构设计实战与 Kafka 生态系统组件实操全流程指南
本指南详解Java事件驱动架构与Kafka生态实操,涵盖环境搭建、事件模型定义、生产者与消费者实现、事件测试及高级特性,助你快速构建高可扩展分布式系统。
310 7
|
7月前
|
存储 Java 数据库连接
java 初学者必看的系统知识结构图详解
本文详解Java知识结构图,涵盖Java语言基础、JVM原理、集合框架、并发编程、网络通信及主流框架(如Spring Boot、MyBatis),并结合学生信息管理系统实例,帮助初学者构建完整知识体系,提升实战开发能力。
217 0
|
4月前
|
移动开发 监控 小程序
java家政平台源码,家政上门清洁系统源码,数据多端互通,可直接搭建使用
一款基于Java+SpringBoot+Vue+UniApp开发的家政上门系统,支持小程序、APP、H5、公众号多端互通。涵盖用户端、技工端与管理后台,支持多城市、服务分类、在线预约、微信支付、抢单派单、技能认证、钱包提现等功能,源码开源,可直接部署使用。
317 24
|
4月前
|
设计模式 消息中间件 传感器
Java 设计模式之观察者模式:构建松耦合的事件响应系统
观察者模式是Java中常用的行为型设计模式,用于构建松耦合的事件响应系统。当一个对象状态改变时,所有依赖它的观察者将自动收到通知并更新。该模式通过抽象耦合实现发布-订阅机制,广泛应用于GUI事件处理、消息通知、数据监控等场景,具有良好的可扩展性和维护性。
400 8
|
4月前
|
安全 前端开发 Java
使用Java编写UDP协议的简易群聊系统
通过这个基础框架,你可以进一步增加更多的功能,例如用户认证、消息格式化、更复杂的客户端界面等,来丰富你的群聊系统。
212 11
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
Java与生成式AI:构建内容生成与创意辅助系统
生成式AI正在重塑内容创作、软件开发和创意设计的方式。本文深入探讨如何在Java生态中构建支持文本、图像、代码等多种生成任务的创意辅助系统。我们将完整展示集成大型生成模型(如GPT、Stable Diffusion)、处理生成任务队列、优化生成结果以及构建企业级生成式AI应用的全流程,为Java开发者提供构建下一代创意辅助系统的完整技术方案。
276 10
|
4月前
|
人工智能 监控 Java
Java与AI智能体:构建自主决策与工具调用的智能系统
随着AI智能体技术的快速发展,构建能够自主理解任务、制定计划并执行复杂操作的智能系统已成为新的技术前沿。本文深入探讨如何在Java生态中构建具备工具调用、记忆管理和自主决策能力的AI智能体系统。我们将完整展示从智能体架构设计、工具生态系统、记忆机制到多智能体协作的全流程,为Java开发者提供构建下一代自主智能系统的完整技术方案。
631 4

推荐镜像

更多