kubernetes之部署war项目(二)

k8s系列 源自我工作上的实际场景,记录于此。
现在老项目是war包形式,需要基于tomcat部署,因此在打包镜像时将tomcat带上的。
假设我的war项目是:mywar.war,值得注意的是,我的war项目采用JNDI数据源形式。

用到的环境

centos 7.9 + docker + docker harbor + k8s

1、编写Dockerfile

harbor 是写在hosts中的域名

FROM harbor/tomcat:8.5.37
WORKDIR /usr/local
COPY context.xml /usr/local/tomcat/conf/context.xml
COPY mywar.war /usr/local/tomcat/webapps/mywar.war
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

此处需要注意,若你的war项目需要替换里面的某个配置,应该修改COPY配置将war的解压文件打进镜像,而不是上面的mywar.war整个打进去。参考解压war命令:unzip mywar.war -d mywar
将war与Dockerfile放在同一文件夹,将context.xml也放进去,context.xml可以随意找个tomcat服务器的copy进去。
执行构建镜像:

docker build -t harbor/mywar:2021102101 .

推送到私服

docker push harbor/mywar:2021102101

导出镜像

docker save harbor/mywar:2021102101 | gzip > mywar-2021102101.tar.gz

2、编写yaml

编写k8s的yaml,mywar.yaml

apiVersion: v1
kind: Service
metadata:
labels:
app: mywar
name: mywar-service
spec:
ports:
- port: 8080
protocol: TCP
# 指向dockerfile暴露的端口
targetPort: 8080
selector:
app: afa-console
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: mywar
managedFields:
name: mywar-deployment
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: mywar
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: afa-console
spec:
containers:
# 需要注意修改对应的镜像
- image: harbor/mywar:2021102101
imagePullPolicy: IfNotPresent
name: afa-console
resources:
limits:
cpu: '2'
memory: 2048Mi
requests:
cpu: '1'
memory: 1024Mi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /usr/local/tomcat/conf/context.xml
name: context-xml
subPath: context.xml
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: default
serviceAccountName: default
terminationGracePeriodSeconds: 30
volumes:
- configMap:
defaultMode: 420
name: mywar-configmap
name: context-xml
---
apiVersion: v1
kind: ConfigMap
metadata:
labels:
app: mywar-configmap
name: mywar-configmap
# 配置context.xml,注意根据实际情况修改数据DNS库域名、端口和数据库的名称
data:
context.xml: |
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<Resource name="afa-main"
validationQuery="select 1"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://10.8.6.125:3306/temp?useSSL=false&amp;useUnicode=true&amp;characterEncoding=utf8&amp;serverTimezone=GMT"
username="root"
password="root" maxTotal="60" maxIdle="10"/>
</Context>

注意修改上面的数据库连接账号密码
部署k8s:

kubectl create -f mywar.yaml

查看项目部署日志

kubectl get pod

# 查看对应的pod
kubectl logs mywar-deployment-679bfdcbfc-sk4pc


到此部署完成,查看对外开放的端口

kubectl get svc


可以看到对外开放的端口是30947,访问: http://10.8.4.181:30947/ 可以看到tomcat页面。
访问我们的项目:http://10.8.4.181:30947/mywar

至此,部署完毕!
删除对应的pod、service等:

kubectl delete configmaps mywar-configmap -n
kubectl delete deployments.apps mywar-deployment
kubectl delete svc mywar-service

觉得对你有帮助,点个赞再走吧 ~

kubernetes之部署war项目(二)的更多相关文章

  1. SpringBoot启动方式讲解和部署war项目到tomcat9

    1.SpringBoot启动方式讲解和部署war项目到tomcat9简介:SpringBoot常见启动方式讲解和部署war项目Tomcat 1.ide启动 2.jar包方式启动 maven插件: &l ...

  2. tomcat从manager部署war项目上传失败

    tomcat从manager部署war项目上传失败, 查看manager.2018-07-17.log 日志,可以看到如下信息. less manager.2018-07-17.log 17-Jul- ...

  3. 【SpringBoot】单元测试进阶实战、自定义异常处理、t部署war项目到tomcat9和启动原理讲解

    ========================4.Springboot2.0单元测试进阶实战和自定义异常处理 ============================== 1.@SpringBoot ...

  4. SpringBoot 2.x (5):异常处理与部署WAR项目

    异常处理: SpringBoot的异常处理是不友好的,前端只会显示最基本的错误名称 后端控制台会报出具体的错误,那么我们如何告知前端具体的错误信息呢? 1:对全局异常进行处理 一个测试的Control ...

  5. 小D课堂 - 零基础入门SpringBoot2.X到实战_第5节 SpringBoot部署war项目到tomcat9和启动原理讲解_22、SpringBoot启动方式和部署war项目到tomcat9

    笔记 1.SpringBoot启动方式讲解和部署war项目到tomcat9 简介:SpringBoot常见启动方式讲解和部署war项目Tomcat 1.ide启动     2.jar包方式启动    ...

  6. CentOS 6.8 部署django项目二

    CentOS 6.8 部署django项目一 1.项目部署后发现部分页面的样式丢失,是因为在nginx中配置的static路径中未包含. 解决:在settinfs.py中添加: STATIC_ROOT ...

  7. 利用Kubernetes(K8S)部署JAVA项目

    一.jar包和war包区别 首先简单介绍一下jar包和war包区别,当时就没分清,导致部署总是傻傻分不清楚. jar包:jar包就是java的类进行编译生成的class文件就行打包的压缩包.里面是一些 ...

  8. Kubernetes 服务部署最佳实践(二) ——如何提高服务可用性

    引言 上一篇文章我们围绕如何合理利用资源的主题做了一些最佳实践的分享,这一次我们就如何提高服务可用性的主题来展开探讨. 怎样提高我们部署服务的可用性呢?K8S 设计本身就考虑到了各种故障的可能性,并提 ...

  9. kubernetes中部署kube-prometheus项目解决ControllerManager与Scheduler无法监控问题

    文章转载自:https://www.kococ.cn/20210302/cid=697.html 一.问题描述 在部署 kube-prometheus 到 kubernetes 集群中总会遇到一个问题 ...

  10. tomcat 部署war项目

    前提是 jdk环境已配好 把项目war包放到tomcat的webapps目录下 启动tomcat: 这里我把8080端口修改成了80 IP也修改了 如果没修改直接输入localhost:8080/te ...

随机推荐

  1. 使用 gopkg.in/yaml.v3 解析 YAML 数据

    YAML(YAML Ain't Markup Language)是一种人类可读的数据序列化格式,常用于配置文件和数据交换.在 Go 语言中,你可以使用 gopkg.in/yaml.v3 包来解析和生成 ...

  2. 如何创建可引导的 macOS Sonoma 安装介质

    2023 年 9 月 26 日(北京时间 27 日凌晨)macOS Sonoma 正式版现已发布. 如何创建可引导的 macOS Sonoma 安装介质 如何创建可引导的 macOS 安装器 | 如何 ...

  3. 算法1:寻找完数(JS)

    任务一:寻找完数 打印10000以内的完数 完数:与自己所有因子之和相等的数. 1 let sum = 0, i, j; // 定义变量sum.i和j 2 3 for (i = 1; i < 1 ...

  4. 判断两个数a,b,输出较大数的平方值。所谓平方值就是两个相同的数相乘的积。

    平方值   描述 判断两个数a,b,输出较大数的平方值.所谓平方值就是两个相同的数相乘的积. 输入 两个数a和b 输出 输出较大数的平方值. 输入样例 1 1 2 输出样例 1 4 a,c = map ...

  5. Java基础知识1-10

    测试要点 一.Java基础 1.常用设计模式有哪些?在项目中有哪里用的到?单例中懒汉饿汉优缺点? 软件设计模式分为三类分别为创建型.结构型.行为型. 1.1创建型 1.1.1单例模式(singleto ...

  6. eclipse使用技巧和插件

    eclipse使用技巧和插件 本篇文章只列举了一部分技巧和插件,并没有包括大家都知道的快捷键和技巧,而是一些不经常用但又很方便的功能. 一,技巧 给Eclipse添加更方便的提示功能:Windows– ...

  7. 简述location规则优先级-实现域名跳转-不同语言-终端跳转-错误页面返回首页-腾讯公益首页

    1.简述location的常见规则优先级,并且逐个验证: = :精确匹配(必须全部相等) #精准匹配优先级最高 ~ :大小写敏感(正则表达式) #一般使用~*忽略大小写匹配 (正则表达式 有上下区分, ...

  8. 基于Echart的前端可视化

    GitHub 上有许多关于低代码自助可视化的项目,前端使用 Vue 和 ECharts 的示例.以下是一些可能符合你要求的项目: DataV: 项目链接:DataV 描述:DataV 是一款基于 Vu ...

  9. [学习笔记]TypeScript查缺补漏(二):类型与控制流分析

    @ 目录 类型约束 基本类型 联合类型 控制流分析 instanceof和typeof 类型守卫和窄化 typeof判断 instanceof判断 in判断 内建函数,或自定义函数 赋值 布尔运算 保 ...

  10. DM数据库 回表优化案例

    京华开发一哥们找我优化条SQL,反馈在DM数据库执行时间很慢需要 40s 才能出结果,安排. 原SQL: SELECT A.IND_CODE, A.IND_NAME AS "specialN ...