传统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搭建和管理企业级网站应用
目录
相关文章
|
4月前
|
前端开发 安全 JavaScript
构建高效Web应用的五个关键步骤
【9月更文挑战第21天】本文将引导读者通过五个核心步骤来构建一个高效的Web应用。我们将从选择合适的技术栈开始,到实现响应式设计、优化性能、保证安全性,最后确保可维护性和扩展性。每个步骤都配备了具体的代码示例,帮助理解如何在实践中应用这些概念。
|
4天前
|
Kubernetes 网络协议 Nacos
OpenAI 宕机思考丨Kubernetes 复杂度带来的服务发现系统的风险和应对措施
Kubernetes 体系基于 DNS 的服务发现为开发者提供了很大的便利,但其高度复杂的架构往往带来更高的稳定性风险。以 Nacos 为代表的独立服务发现系统架构简单,在 Kubernetes 中选择独立服务发现系统可以帮助增强业务可靠性、可伸缩性、性能及可维护性,对于规模大、增长快、稳定性要求高的业务来说是一个较理想的服务发现方案。希望大家都能找到适合自己业务的服务发现系统。
|
22天前
|
弹性计算 Java 关系型数据库
Web应用上云经典架构实践教学
Web应用上云经典架构实践教学
Web应用上云经典架构实践教学
|
22天前
|
弹性计算 Java 数据库
Web应用上云经典架构实战
本课程详细介绍了Web应用上云的经典架构实战,涵盖前期准备、配置ALB、创建服务器组和监听、验证ECS公网能力、环境配置(JDK、Maven、Node、Git)、下载并运行若依框架、操作第二台ECS以及验证高可用性。通过具体步骤和命令,帮助学员快速掌握云上部署的全流程。
|
2月前
|
存储 消息中间件 缓存
构建互联网高性能WEB系统经验总结
如何构建一个优秀的高性能、高可靠的应用系统对每一个开发者至关重要
33 2
|
22天前
|
弹性计算 负载均衡 安全
云端问道-Web应用上云经典架构方案教学
本文介绍了企业业务上云的经典架构设计,涵盖用户业务现状及挑战、阿里云业务托管架构设计、方案选型配置及业务初期低门槛使用等内容。通过详细分析现有架构的问题,提出了高可用、安全、可扩展的解决方案,并提供了按量付费的低成本选项,帮助企业在业务初期顺利上云。
|
2月前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
49 2
|
2月前
|
存储 消息中间件 缓存
构建互联网高性能WEB系统经验总结
构建互联网高性能WEB系统经验总结
67 16
|
3月前
|
机器学习/深度学习 数据处理 数据库
基于Django的深度学习视频分类Web系统
基于Django的深度学习视频分类Web系统
70 4
基于Django的深度学习视频分类Web系统
|
2月前
|
负载均衡 监控 算法
论负载均衡技术在Web系统中的应用
【11月更文挑战第4天】在当今高并发的互联网环境中,负载均衡技术已经成为提升Web系统性能不可或缺的一环。通过有效地将请求分发到多个服务器上,负载均衡不仅能够提高系统的响应速度和处理能力,还能增强系统的可扩展性和稳定性。本文将结合我参与的一个实际软件项目,从项目概述、负载均衡算法原理以及实际应用三个方面,深入探讨负载均衡技术在Web系统中的应用。
128 2