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项目(三)的更多相关文章

  1. 使用winsw部署spring boot jar 项目

    参考:用winsw让任何Windows程序都能运行为服务 简介在linux下部署springboot项目是一件很简单的事,直接后台运行就行了,最多写个shell脚本开机自启就行了.我们最近做的项目需要 ...

  2. docker部署 springboot 多模块项目+vue

    之前学习了docker,今天就来试试将这个项目打包成docker镜像并通过运行一个镜像来运行项目.这里使用的项目是el-admin.是一个开源的springboot后端管理框架(前端vue),有兴趣的 ...

  3. jenkins#自动构建并部署springboot的jar包

    1.GitLab 8.0.0(版本比较低,配置比较简单) 配置 点击项目 --> settings --> web Hooks 2.jenkins配置

  4. jenkins#构建并部署springboot的jar包

    0. 前提是有一个可以用的没有问题的Jenkins环境,这是基础 1. 安装publish over ssh 插件,(如果网速太慢,请去github 克隆代码,然后自己构建,然后上传安装此插件) 2. ...

  5. windos上安装jenkins部署springboot的jar包(未运行,只是在打包并上传linux成功了)

    流程: 从linux上的svn拉取代码,到本地(windos)jenkins的工作区间的workspace,然后通过构建,打包,部署到linux上 环境: windos上安装:maven jdk je ...

  6. 基于【 springBoot +springCloud+vue 项目】三 || 项目部署

    前言 今天所要讲的项目部署,并非正式环境部署,而是作为开发中的测试环境部署.随着项目模块的增多,启动的模块也随之增多,本人的电脑启动四个模块就已经卡的不行了,为了减轻电脑压力,不得不自己学着搭建一个项 ...

  7. 部署SpringBoot项目jar包到云服务器

    前言 做安卓开发也有三四年了,但是对网络这块什么http.tcp/ip之类的一直不理解.并且想自己做一些小项目练练手的时候,数据库直接存在apk里总不是滋味,所以这次站在安卓开发的角度尝试着做一做简单 ...

  8. linux小白成长之路9————打包部署SpringBoot项目

    [内容指引] SpringBoot项目介绍: 打包SpringBoot项目: 1.pom.xml: 2.application.properties配置: 3.application-dev.prop ...

  9. docker部署springboot项目

    本文介绍一下docker如何部署springboot项目. 前提条件: 1.可以运行jar包的环境 2.机器上已经安装了docker 3.准备部署的springboot的jar包 4.Dockerfi ...

  10. Docker快速上手之部署SpringBoot项目

    Docker是基于Go语言实现的云开源项目. Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装.分发.部署.运行等生命周期 ...

随机推荐

  1. ISIS 协议常用基本配置总结

    转载请注明出处: 1.创建IS-IS进程,进入IS-IS进程 [Huawei] isis [process-id ] 参数process-id用来指定一个IS-IS进程.如果不指定参数process- ...

  2. Linux系列教程——Linux文件查找、Linux压缩打包、Linux软件管理

    @ 目录 1 Linux文件查找 1.find查找概述 2.find查找示例 1.find名称查找 2.find大小查找 3.find类型查找 4.find时间查找 5.find用户查找 6.find ...

  3. 深入理解java和dubbo的SPI机制

    1 SPI简介 1.1 SPI(Service Provider Interface) 本质:将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类.这样可以在运行时,动态为接口替 ...

  4. CalledFromWrongThreadException

    更新UI的位置不正确,线程解析数据    handler. mssage 中更新 android.view.ViewRootImpl$CalledFromWrongThreadException: O ...

  5. 小景的Dba之路--如何导出0记录表以及数据泵的使用

    小景最近在系统压测相关的工作,其中涉及了数据备份导出的操作.今天的问题是:exp命令不会导出0记录表,那么我们探讨下如何导出0记录表以及数据泵的使用. 首先,我们先刨析一下问题现象及原因: 在 Ora ...

  6. 让物体动起来,Unity的几种移动方式

    一.前言 在大部分的Unity游戏开发中,移动是极其重要的一部分,移动的手感决定着游戏的成败,一个优秀的移动手感无疑可以给游戏带来非常舒服的体验.而Unity中有多种移动方法,使用Transform, ...

  7. acwing第75场周赛

    这次题比较水,但是还是没能ak,自己小结一下吧 第一道题就是自己枚举相加就行 第二道题是一个多关键字排序,wa了几次,是因为优先级有两个是相同的需要特判一下,然后可以把字符转化为数字的优先级,我用了一 ...

  8. K8S 组合命令

    强制删除namespace kubectl get namespace [namespace-name] -o json | tr -d "\n" | sed "s/\& ...

  9. 花了三年时间开发的开源项目,终于500 个 Star 了!

    waynboot-mall 商城项目从疫情开始初期着手准备,到现在已经经过了 3 年多的时间,从项目初期到现在,一个人持续迭代,修复漏洞,添加功能,经历了前端开发工具从 vue2.vue-cli 切换 ...

  10. 题解 CF1264D2

    前言 建议大家看一下我对于 D1 的题解(传送门)后再看本题解,本题解是基于那篇题解的基础上书写的. 数学符号约定 \(\dbinom{n}{m}\):表示 \(n\) 选 \(m\) . 如非特殊说 ...