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. CAP项目集成带身份和证书验证的MongoDB

    大家好,我是Edison. 最近,在使用CAP事件总线时,碰到了这样一个需求:微服务采用的是MongoDB,而且还是带身份验证 和 SSL根证书验证的.由于目前网上能找到的资料,都是不带身份验证的Mo ...

  2. Vue2系列(lqz)——Vue基础

    文章目录 Vue介绍 一 模板语法 1.1 插值 1.1.1 概述 1.1.2 案例 二 指令 2.1 文本相关指令 2.2 事件指令 2.3 属性指令 三 class与style 3.1 class ...

  3. Django框架——forms组件、cookie与session

    文章目录 1 forms 组件 1 校验字段功能 2 渲染标签功能 渲染方式1 渲染方式2 渲染方式3 3 渲染错误信息功能 视图 模板 4 组件的参数配置 5 局部钩子 6 全局钩子 2 cooki ...

  4. .NET 数据库大数据 方案(插入、更新、删除、查询 、插入或更新)

    1.功能介绍 (需要版本5.0.45) 海量数据操作ORM性能瓶颈在实体转换上面,并且不能使用常规的Sql去实现 当列越多转换越慢,SqlSugar将转换性能做到极致,并且采用数据库最佳API 操作数 ...

  5. Graph RAG: 知识图谱结合 LLM 的检索增强

    本文为大家揭示 NebulaGraph 率先提出的 Graph RAG 方法,这种结合知识图谱.图数据库作为大模型结合私有知识系统的最新技术栈,是 LLM+ 系列的第三篇,加上之前的图上下文学习.Te ...

  6. 麒麟系统开发笔记(十三):在国产麒麟系统上编译OSG库、搭建基础开发环境和移植测试Demo

    前言   在国产麒麟系统上实现C++三维仿真,使用OSG技术,其他基于web的技术也是可以但是交互上鼠标拽托等交互相对差一些,所以这块需要斟酌选择到底是何种技术来取舍.  本篇在厂家指定的麒麟系统上编 ...

  7. P1182 数列分段 Section II 题解

    Problem 考察知识点:二分.贪心. 题目描述 对于给定的一个数组,现要将其分成 \(M\) 段,并要求每段连续,且每段和的最大值最小. 思路 二分答案出每段和最大值的最小值,然后贪心检验是否满足 ...

  8. AttributeError: module 'sqlalchemy' has no attribute '__all__'

    升级组件 pip install --upgrade flask-sqlalchemy

  9. InfiniBand 的前世今生

    今年,以 ChatGPT 为代表的 AI 大模型强势崛起,而 ChatGPT 所使用的网络,正是 InfiniBand,这也让 InfiniBand 大火了起来.那么,到底什么是 InfiniBand ...

  10. Go 接口:nil接口为什么不等于nil?

    Go 接口:nil接口为什么不等于nil? 本文主要内容:深入了解接口类型的运行时表示层. 目录 Go 接口:nil接口为什么不等于nil? 一.Go 接口的地位 二.接口的静态特性与动态特性 2.1 ...