传统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的应用管理便利及公有云的强大扩容能力了。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
2月前
|
Java 数据库
在Java中使用Seata框架实现分布式事务的详细步骤
通过以上步骤,利用 Seata 框架可以实现较为简单的分布式事务处理。在实际应用中,还需要根据具体业务需求进行更详细的配置和处理。同时,要注意处理各种异常情况,以确保分布式事务的正确执行。
|
2月前
|
监控 Java API
如何使用Java语言快速开发一套智慧工地系统
使用Java开发智慧工地系统,采用Spring Cloud微服务架构和前后端分离设计,结合MySQL、MongoDB数据库及RESTful API,集成人脸识别、视频监控、设备与环境监测等功能模块,运用Spark/Flink处理大数据,ECharts/AntV G2实现数据可视化,确保系统安全与性能,采用敏捷开发模式,提供详尽文档与用户培训,支持云部署与容器化管理,快速构建高效、灵活的智慧工地解决方案。
|
1月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
67 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
2月前
|
设计模式 消息中间件 搜索推荐
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
|
2月前
|
Java Maven Spring
Java Web 应用中,资源文件的位置和加载方式
在Java Web应用中,资源文件如配置文件、静态文件等通常放置在特定目录下,如WEB-INF或classes。通过类加载器或Servlet上下文路径可实现资源的加载与访问。正确管理资源位置与加载方式对应用的稳定性和可维护性至关重要。
64 6
|
2月前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
88 4
|
2月前
|
运维 自然语言处理 供应链
Java云HIS医院管理系统源码 病案管理、医保业务、门诊、住院、电子病历编辑器
通过门诊的申请,或者直接住院登记,通过”护士工作站“分配患者,完成后,进入医生患者列表,医生对应开具”长期医嘱“和”临时医嘱“,并在电子病历中,记录病情。病人出院时,停止长期医嘱,开具出院医嘱。进入出院审核,审核医嘱与住院通过后,病人结清缴费,完成出院。
129 4
|
2月前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
52 1
|
2月前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
3月前
|
移动开发 前端开发 JavaScript
java家政系统成品源码的关键特点和技术应用
家政系统成品源码是已开发完成的家政服务管理软件,支持用户注册、登录、管理个人资料,家政人员信息管理,服务项目分类,订单与预约管理,支付集成,评价与反馈,地图定位等功能。适用于各种规模的家政服务公司,采用uniapp、SpringBoot、MySQL等技术栈,确保高效管理和优质用户体验。