kubernetes之部署springboot项目jar项目(三)
kubernetes之部署war项目(三)
k8s系列 源自我工作上的实际场景,记录于此。
k8s部署springboot项目
假设我的jar项目是:myjar.jar
用到的环境
centos 7.9 + docker + docker harbor + k8s
1、编写Dockerfile
harbor 是写在hosts中的域名
FROM harbor/openjdk:8-jdk-alpine
ADD *.jar app.jar
EXPOSE 8097
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Duser.timezone=GMT+08","-jar","/app.jar"]
将jar与Dockerfile放在同一文件夹
执行构建镜像:
docker build -t harbor/myjar:2021102101 .
推送到私服
docker push harbor/myjar:2021102101
导出镜像
docker save harbor/myjar:2021102101 | gzip > myjar-2021102101.tar.gz
2、编写yaml
编写k8s的yaml,myjar.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: myjar
name: myjar-service
spec:
ports:
- port: 8097
protocol: TCP
# 指向dockerfile暴露的端口
targetPort: 8097
selector:
app: myjar
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: myjar
managedFields:
name: myjar-deployment
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: myjar
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: myjar
spec:
containers:
# 需要注意修改对应的镜像
- image: harbor/myjar:2021102101
imagePullPolicy: IfNotPresent
name: myjar
resources:
limits:
cpu: 500m
memory: 1Gi
requests:
cpu: 10m
memory: 256Mi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /application.yml
name: application-yml
subPath: application.yml
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: default
serviceAccountName: default
terminationGracePeriodSeconds: 30
volumes:
- configMap:
defaultMode: 420
name: myjar-configmap
name: application-yml
---
apiVersion: v1
kind: ConfigMap
metadata:
labels:
app: myjar-configmap
name: myjar-configmap
# 配置application.yml,注意根据实际情况修改数据DNS库域名、端口和数据库的名称
data:
application.yml: |
DB_DOMAIN: 10.8.6.125
DB_PORT: 3306
DB_NAME: temp
TOKEN_STORE_STYLE: memory # memory | redis | db
AUTH-CENTER: http://10.8.6.125:8070
BASEDIR: /data/${spring.application.name}
server:
port: 8097
tomcat:
basedir: ${BASEDIR}/tmp
spring:
application:
name: preometheus-console
main:
allow-bean-definition-overriding: true
datasource:
name: druidDatasource
type: com.alibaba.druid.pool.DruidDataSource
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://${DB_DOMAIN}:${DB_PORT}/${DB_NAME}?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
username: root
password: root
min-idle: 1
max-active: 100
max-open-prepared-statements: 50
max-pool-prepared-statement-per-connection-size: 20
max-wait: 60000
min-evictable-idle-time-millis: 300000
pool-prepared-statements: true
test-while-idle: true
time-between-eviction-runs-millis: 60000
validation-query: select 'x'
jpa:
hibernate:
ddl-auto: none
properties:
hibernate:
# dialect: org.hibernate.dialect.Oracle12cDialect (数据库方言,oracle时使用)
# org.hibernate.dialect.PostgreSQL9Dialect (opengauss数据库使用方言)
dialect: org.hibernate.dialect.MySQL8Dialect
show-sql: false
open-in-view: false
messages:
cache-duration: 3600
encoding: UTF-8
cloud:
inetutils:
timeoutSeconds: 30
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
# redis:
# host: localhost
# port: 6379
#policy:
# password:
# update:
# userStatus: false
security:
oauth2:
resource:
user-info-uri: ${AUTH-CENTER}/current
prometheus:
prometheus-config-name: alerts.yml
alertmanager-config-name: alertmanager.yml
variables:
config:
- name: "cluster_id"
zhName: "集群"
promQL: "label_values(jvm_memory_used_bytes,cluster_id)"
isMulti: false
sort: 1
- name: "instance"
zhName: "节点"
promQL: "label_values(jvm_memory_used_bytes{cluster_id=~'$cluster_id'},instance)"
isMulti: false
sort: 2
- name: "service_name"
zhName: "服务"
promQL: "label_values(agree_afa_engine_runtime_milliseconds{cluster_id=~'$cluster_id'},service_name)"
isMulti: false
sort: 3
- name: "scene_name"
zhName: "场景"
promQL: "label_values(agree_afa_engine_svc_scene_executed_milliseconds{service_name=~'$service_name'},scene_name)"
isMulti: false
sort: 4
mail:
# smtp服务器地址
host: smtp.163.com
# smtp服务器端口
port: 25
# smtp是否使用ssl
smtp-ssl-enable: false
# 邮箱名
mail-username:
# 邮箱密码
mail-password:
mail-debug: false
is-open: false #是否开启邮件
logging.file: ${BASEDIR}/logs/mnt.log
logging.file.max-size: 10MB
logging.file.max-history: 15 # 默认保存15天的日志
logging.pattern.file: '%d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n'
注意修改上面的数据库连接账号密码
部署k8s:
kubectl create -f myjar.yaml
查看项目部署日志
kubectl get pod
# 查看对应的pod
kubectl logs myjar-deployment-679bfdcbfc-sk4pc
到此部署完成,查看对外开放的端口
kubectl get svc

访问:http://10.8.4.181:31186/actuator/info
效果:

至此,部署完毕!
删除对应的pod、service等:
kubectl delete configmaps myjar-configmap -n
kubectl delete deployments.apps myjar-deployment
kubectl delete svc myjar-service
觉得对你有帮助,点个赞再走吧 ~
kubernetes之部署springboot项目jar项目(三)的更多相关文章
- 使用winsw部署spring boot jar 项目
参考:用winsw让任何Windows程序都能运行为服务 简介在linux下部署springboot项目是一件很简单的事,直接后台运行就行了,最多写个shell脚本开机自启就行了.我们最近做的项目需要 ...
- docker部署 springboot 多模块项目+vue
之前学习了docker,今天就来试试将这个项目打包成docker镜像并通过运行一个镜像来运行项目.这里使用的项目是el-admin.是一个开源的springboot后端管理框架(前端vue),有兴趣的 ...
- jenkins#自动构建并部署springboot的jar包
1.GitLab 8.0.0(版本比较低,配置比较简单) 配置 点击项目 --> settings --> web Hooks 2.jenkins配置
- jenkins#构建并部署springboot的jar包
0. 前提是有一个可以用的没有问题的Jenkins环境,这是基础 1. 安装publish over ssh 插件,(如果网速太慢,请去github 克隆代码,然后自己构建,然后上传安装此插件) 2. ...
- windos上安装jenkins部署springboot的jar包(未运行,只是在打包并上传linux成功了)
流程: 从linux上的svn拉取代码,到本地(windos)jenkins的工作区间的workspace,然后通过构建,打包,部署到linux上 环境: windos上安装:maven jdk je ...
- 基于【 springBoot +springCloud+vue 项目】三 || 项目部署
前言 今天所要讲的项目部署,并非正式环境部署,而是作为开发中的测试环境部署.随着项目模块的增多,启动的模块也随之增多,本人的电脑启动四个模块就已经卡的不行了,为了减轻电脑压力,不得不自己学着搭建一个项 ...
- 部署SpringBoot项目jar包到云服务器
前言 做安卓开发也有三四年了,但是对网络这块什么http.tcp/ip之类的一直不理解.并且想自己做一些小项目练练手的时候,数据库直接存在apk里总不是滋味,所以这次站在安卓开发的角度尝试着做一做简单 ...
- linux小白成长之路9————打包部署SpringBoot项目
[内容指引] SpringBoot项目介绍: 打包SpringBoot项目: 1.pom.xml: 2.application.properties配置: 3.application-dev.prop ...
- docker部署springboot项目
本文介绍一下docker如何部署springboot项目. 前提条件: 1.可以运行jar包的环境 2.机器上已经安装了docker 3.准备部署的springboot的jar包 4.Dockerfi ...
- Docker快速上手之部署SpringBoot项目
Docker是基于Go语言实现的云开源项目. Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装.分发.部署.运行等生命周期 ...
随机推荐
- 485modbus转profinet网关连接威纶通与三菱变频器modbus通讯
485modbus转profinet网关连三菱变频器modbus通讯触摸屏监控 本案例介绍了如何通过485modbus转profinet网关连接威纶通与三菱变频器进行modbus通讯.485modbu ...
- 2023版:深度比较几种.NET Excel导出库的性能差异
引言 背景和目的 本文介绍了几个常用的电子表格处理库,包括EPPlus.NPOI.Aspose.Cells和DocumentFormat.OpenXml,我们将对这些库进行性能测评,以便为开发人员提供 ...
- chatgpt与搜索结合,百度会在这股浪潮下掘金吗?
年末,在百度内部沟通会上,百度创始人李彦宏提到最近他的朋友们问他如何看待ChatGPT,包括他周围同行业中的同一领域和跨境人士. 事实上,早在ChatGPT将他的对话能力和直观的互动方式展现给全世界 ...
- Java虚拟机(JVM):第五幕:自动内存管理 - HotSpot算法细节以及低延迟垃圾收集器
一.HotSpot算法细节 1.根节点枚举:所有的收集器在根节点枚举的时候,必须暂停用户线程,同时要保证一致性的快照中得以进行.一致性:整个枚举期间执行子系统看起来就像是冻结在某一个时间点上,不会出现 ...
- Linux下的网络输入输出流量的带宽控制(2015-11-23更新)
Linux下的网络输入输出流量的带宽控制 整理者:赤子玄心 QQ:280604597 Email:280604597@qq.com 大家有什么不明白的地方,或者想要详细了解的地方可以联系我,我会认真回 ...
- 关于AI时代的程序架构的变化
以ChatGPT为代表的AI出现,表示着AI的零点时刻已经突破.现在AI的使用已经不用再多说了,实际上是已经侵入到各行各业.所有人都在疯狂寻找本行业AI的使用场景,这样的盛景只在互联网刚出现的时候能感 ...
- 使用Github Copilot完成代码编写
上篇文章,我们使用VSCode创建了T.Global解决方案和两个类库工程,接下来我们使用Github Copilot完成代码编写 先说以下业务需求: 提供一个公共的本地化组件,支持对数字.货币.时间 ...
- 《最新出炉》系列初窥篇-Python+Playwright自动化测试-21-处理鼠标拖拽-番外篇
1.简介 前边宏哥拖拽有提到那个反爬虫机制,加了各种参数,以及加载js脚本文件还是有问题,偶尔宏哥好像发现了解决问题的办法,看到了黎明的曙光,宏哥就说试一下看看行不行,万一实现了.结果宏哥试了结果真的 ...
- vscode双击没反应,后台也看不到进程的解决方案
百度找的解决方案: cmd窗口执行 netsh winsock reset 重置命令. 删除Romaing下的Code文件夹 修改Code/User/locale.json(我没找到这个文件)中的&q ...
- k8s部署xxl-job-admin
概述 XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速.学习简单.轻量级.易扩展.现已开放源代码并接入多家公司线上产品线,开箱即用. 下载好要用到的镜像 docker pull ...