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”,也就是通过对应用组件的封装.分发.部署.运行等生命周期 ...
随机推荐
- Harry Potter RPG_1
RPG--Harry Potter 博主最近迷上了<Harry Potter> So 我制作了一款RPG对话模拟游戏, 目前主线以进行到了分院以后: 有兴趣的小伙伴可以看看,能点个关注就更 ...
- tiptopGP5.2链接所有表或报不存在函数处理
修改交易的表时需要特别注意,改完要关联所有有关的表r.rb.rb pja_file 当链接提示不存在的函数调用,又无法确定具体是那个关联程序时, 可以在本函数内先定义这个报错的函数,重新链接时,系统会 ...
- maven error
1 [INFO] Assembling webapp [crm9] in [/home/wukongcrm/72crm-java/target/ROOT] 2 [INFO] Processing wa ...
- for遍历
for遍历 一:常规方式 1.遍历数组 int arr[10] = {1,2,3,4,5,6,7,8,9,10}; for(int i = 0;i<10;i++) { cout<<a ...
- Tinyalsa PCM API 实现深度剖析
高级 Linux 音频架构 (ALSA) 用于为 Linux 操作系统提供音频和 MIDI 功能.它可以高效地支持所有类型的音频接口,从消费者声卡到专业的多通道音频接口.它支持全模块化的音频驱动.它是 ...
- Unity 在Preferences或Project Setting窗口创建自定义配置
官方文档链接 https://docs.unity3d.com/2020.3/Documentation/ScriptReference/SettingsProvider.html 一直不习惯使用Un ...
- c#中建造者设计模式详解
基础介绍: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 说白了就是将一个复杂的对象拆分成一个一个零件,然后按照既定顺序和规则进行组装,最终形成这个相对复杂的对象 ...
- JAVA架构师
https://github.com/zq99299/note-architect https://zq99299.github.io/note-architect/hc/ https://zq992 ...
- [Python急救站课程]等边三角形的绘制
等边三角形的绘制 from turtle import * penup() fd(-50) pendown() pensize(25) seth(60) fd(100) seth(-60) fd(10 ...
- Apache Hudi Timeline:支持 ACID 事务的基础
Apache Hudi 维护在给定表上执行的所有操作的Timeline(时间线),以支持以符合 ACID 的方式高效检索读取查询的数据. 在写入和表服务期间也会不断查阅时间线,这是表正常运行的关键. ...