当前位置: 首页 > news >正文

quarkus 生产环境与k8s集成总结

quarkus 生产环境与k8s集成总结

大纲

  • 基础准备
  • quarkus2.13.7脚手架工程配置
  • GraalVM-java11 安装配置
  • 配置maven3.8.7
  • linux环境下云原生二进制文件打包环境搭建
  • 编译运行quarkus二进制文件
  • quarkus二进制文件制作为docker镜像并运行
  • 使用k8s部署quarkus二进制文件

基础准备

生产环境:

  • 1 ubuntu18.04
  • 2 quarkus2.13.7.Final项目(my-quarkus-demo)
  • 3 graalvm-ce-java11-linux-amd64-22.3.0.tar.gz
  • 4 maven-3.8.7
  • 5 docker环境
  • 6 kubernetes环境

quarkus2.13.7脚手架工程配置

关于quarkus2.13.7脚手架工程配置可以直接参考上一篇文章 《quarkus 搭建与基础开发环境配置总结》

这里默认已经存在一个可以运行的my-quarkus-demo项目,并且 docker环境 kubernetes环境 都安装完成

GraalVM-java11 安装配置

quarkus2.13.7.Final (my-quarkus-demo)项目

  • 1 需要java版本11

  • 2 需要GraalVM版本为22.3.0

    GraalVM下载地址: https://github.com/graalvm/graalvm-ce-builds/releases/tag/vm-22.3.0

GraalVM 选择对应的版本

在这里插入图片描述

native-image 注意需要和GraalVM 版本 平台一致

在这里插入图片描述

linux环境

  • graalvm-ce-java11-linux-amd64-22.3.0.tar.gz
  • native-image-installable-svm-java11-linux-amd64-22.3.0.jar

GraalVM 添加jre

创建一个空的文件夹ops 解压graalvm-ce-java11-linux-amd64-22.3.0.tar.gz

root@note4:/ops# tar -zxvf graalvm-ce-java11-linux-amd64-22.3.0.tar.gz

使用jlink 添加jre

./bin/jlink --module-path jmods --add-modules   com.oracle.graal.graal_enterprise,com.oracle.svm_enterprise.ml_dataset,com.oracle.svm.svm_enterprise,com.oracle.truffle.regex,com.oracle.truffle.truffle_nfi,com.oracle.truffle.truffle_nfi_libffi,java.base,java.compiler,java.datatransfer,java.desktop,java.instrument,java.logging,java.management,java.management.rmi,java.naming,java.net.http,java.prefs,java.rmi,java.scripting,java.security.jgss,java.security.sasl,java.se,java.smartcardio,java.sql,java.sql.rowset,java.transaction.xa,java.xml.crypto,java.xml,jdk.accessibility,jdk.attach,jdk.charsets,jdk.compiler,jdk.crypto.cryptoki,jdk.crypto.ec,jdk.dynalink,jdk.editpad,jdk.hotspot.agent,jdk.httpserver,jdk.internal.ed,jdk.internal.jvmstat,jdk.internal.le,jdk.internal.opt,jdk.internal.vm.ci,jdk.internal.vm.compiler,jdk.internal.vm.compiler.management,jdk.internal.vm.compiler.truffle.jfr,jdk.jartool,jdk.javadoc,jdk.jcmd,jdk.jconsole,jdk.jdeps,jdk.jdi,jdk.jdwp.agent,jdk.jfr,jdk.jlink,jdk.jshell,jdk.jsobject,jdk.jstatd,jdk.localedata,jdk.management.agent,jdk.management.jfr,jdk.management,jdk.naming.dns,jdk.naming.ldap,jdk.naming.rmi,jdk.net,jdk.pack,jdk.rmic,jdk.scripting.nashorn,jdk.scripting.nashorn.shell,jdk.sctp,jdk.security.auth,jdk.security.jgss,jdk.unsupported.desktop,jdk.unsupported,jdk.xml.dom,jdk.zipfs,org.graalvm.js.scriptengine,org.graalvm.locator,org.graalvm.sdk,org.graalvm.truffle --output jre

在这里插入图片描述

添加环境变量

vi /etc/profile添加环境变量
export JAVA_HOME=/ops/graalvm-ce-java11-22.3.0
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
export JRE_HOME=$JAVA_HOME/jresource /etc/profile

在这里插入图片描述

安装native-image

使用 gu install 命令安装native-image 注意需要在 native-image.jar 所在文件夹执行命令

gu install -L native-image-installable-svm-java11-linux-amd64-22.3.0.jar

在这里插入图片描述

native-image --version
GraalVM 22.3.0 Java 11 CE (Java Version 11.0.17+8-jvmci-22.3-b08)
表示安装完成

到此GraalVM环境配置完成

配置maven3.8.7

下载maven-3.8.7

https://archive.apache.org/dist/maven/maven-3/3.8.7/binaries/apache-maven-3.8.7-bin.tar.gz

创建/ops/repository 文件夹作为本地仓库

解压maven3.8.7 修改setting.xml

指定本地仓库
<localRepository>/ops/repository</localRepository>配置镜像仓库<mirror><id>huaweicloud</id><name>huaweicloud maven</name><mirrorOf>*</mirrorOf><url>https://mirrors.huaweicloud.com/repository/maven/</url></mirror>

在这里插入图片描述

添加环境变量

vi /etc/profile
添加环境变量
export PATH=/ops/apache-maven-3.8.7/bin:$PATHsource /etc/profile

在这里插入图片描述

到此maven环境配置完成

linux环境下云原生二进制文件打包环境搭建

ubuntu环境GraalVM静态编译注意事项

  • 1 安装 gcc build-essential libz-dev zlib1g-dev
  • 2 指定quarkus.native.builder-image graalvm路径

ubuntu环境GraalVM静态编译 可参考 《Java GraalVM 环境搭建 class文件springboot项目 静态编译二进制文件 入门就看这一篇》

安装 gcc build-essential libz-dev zlib1g-dev 编译工具

安装编译工具
apt-get install gcc
apt-get install zlib1g-dev
apt-get install build-essential libz-dev 

缺乏相关编译工具quarkus -Pnative 编译时会出现一些如下错误

缺乏 gcc
Error: Default native-compiler executable 'gcc' not found via environment variable PATH
Error: Use -H:+ReportExceptionStackTraces to print stacktrace of underlying exception
Error: Image build request failed with exit status 1

在这里插入图片描述

缺乏 zlib1g-dev 
1. It appears as though libz.a is missing. Please install it.

在这里插入图片描述

缺乏 libz-dev 
1. It appears as though libstdc++.a is missing. Please install it.

在这里插入图片描述

指定quarkus.native.builder-image graalvm路径

linux 环境打包需要指定quarkus.native.builder-image路径

mvn package  -Dquarkus.native.builder-image=/ops/graalvm-ce-java11-22.3.0/bin

也可以在application.properties写入配置

quarkus.native.builder-image=/ops/graalvm-ce-java11-22.3.0/bin

否则报错

SRCFG00011: Could not expand value platform.quarkus.native.builder-image in property quarkus.native.

在这里插入图片描述

编译运行quarkus二进制文件

使用git clone 拉取项目 my-quarkus-demo (quarkus2.13.7.Final)

在这里插入图片描述

编译项目 第一次会下载大量的jar

执行 
mvn clean install

编译生成二进制文件

mvn clean package -Pnative -Dquarkus.native.builder-image=/ops/graalvm-ce-java11-22.3.0/bin

在这里插入图片描述

**编译成功 得到my-quarkus-demo-1.0.0-SNAPSHOT-runner **

在这里插入图片描述

在这里插入图片描述

运行程序 看到成功访问

在这里插入图片描述

quarkus二进制文件制作为docker镜像并运行

创建Dockerfile 可参考项目 src/main/docker 下面的各种Dockerfile

创建一个文件夹保存数据

  • Dockerfile
  • my-quarkus-demo-1.0.0-SNAPSHOT-runner

Dockerfile内容如下

FROM ubuntu:18.04
MAINTAINER liuyijiang
WORKDIR "/data/service"
EXPOSE 8848
COPY my-quarkus-demo-1.0.0-SNAPSHOT-runner my-quarkus-demo-1.0.0-SNAPSHOT-runner
CMD ["./my-quarkus-demo-1.0.0-SNAPSHOT-runner", "-Dquarkus.http.host=0.0.0.0"]

使用my-quarkus-demo-1.0.0-SNAPSHOT-runner 创建镜像

在这里插入图片描述

运行镜像 成功
在这里插入图片描述

使用k8s部署quarkus二进制文件

推送quarkus镜像到阿里云私库

将创建的my-quarkus-demo镜像推送到阿里云私库

阿里云私库配置见文章 《阿里云docker私库使用总结》

将镜像推送到私库
docker tag my-quarkus-demo registry.cn-hangzhou.aliyuncs.com/jimliu/my-quarkus-demo
docker push registry.cn-hangzhou.aliyuncs.com/jimliu/my-quarkus-demo:latest

k8s部署quarkus应用

deploy.yaml 文件内容如下

apiVersion: apps/v1
kind: Deployment
metadata:name: my-quarkus-demo
spec:replicas: 1selector:matchLabels: app: my-quarkus-demotemplate:metadata:labels:app: my-quarkus-demospec:imagePullSecrets:- name: myaliyunsecretcontainers:- name: my-quarkus-demo-runtime image: registry.cn-hangzhou.aliyuncs.com/jimliu/my-quarkus-demo:latestimagePullPolicy: Alwaysports: #定义容器端口列表- containerPort: 8848 protocol: TCP name: http ---apiVersion: v1
kind: Service
metadata:name: my-quarkus-demo-service
spec:ports:- protocol: TCPport: 18848targetPort: 8848nodePort: 28848name: httpselector:app: my-quarkus-demotype: NodePort

kubectl apply -f deploy.yaml 部署应用

集群内部访问

在这里插入图片描述

外部访问

在这里插入图片描述

相关文章:

quarkus 生产环境与k8s集成总结

quarkus 生产环境与k8s集成总结 大纲 基础准备quarkus2.13.7脚手架工程配置GraalVM-java11 安装配置配置maven3.8.7linux环境下云原生二进制文件打包环境搭建编译运行quarkus二进制文件quarkus二进制文件制作为docker镜像并运行使用k8s部署quarkus二进制文件 基础准备 生产…...

蓝桥杯训练day2

day21.二分(1)789. 数的范围(2)四平方和&#xff08;1&#xff09;哈希表做法&#xff08;2&#xff09;二分做法(3)1227. 分巧克力&#xff08;4&#xff09;113. 特殊排序(5)1460. 我在哪&#xff1f;2.双指针(1)1238. 日志统计(2)1240. 完全二叉树的权值&#xff08;3&#…...

为什么99%的程序员都做不好SQL优化?

连接层 最上层是一些客户端和链接服务&#xff0c;包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于 TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程 池的概念&#xff0c;为通过认证安全接入的客户端提供线程。同样…...

Jenkins最新版安装调试

清理旧的jenkins&#xff1a; find / -name jenkins* 一项一项的清理&#xff1a;rm -rf /var/log/jenkins* 下载最新版jenkins镜像&#xff1a;jenkins-redhat-stable安装包下载_开源镜像站-阿里云 上传到服务器&#xff1a; 安装命令&#xff1a; yum install -y jenkins…...

简略说一下go的sync.RWMutex锁

在简略的说之前&#xff0c;首先要对RW锁的结构有一个大致的了解 type RWMutex struct {w Mutex // 写锁互斥锁&#xff0c;只锁写锁&#xff0c;和读锁无关writerSem uint32 // sema锁--用于“写协程”排队等待readerSem uint32 // sema锁--用于“读协程”排队…...

软考马上要报名了,出现这些问题怎么办?

目前&#xff0c;四川、山东、山西、辽宁、河北等地已经率先发布了2023年上半年软考报名通知。 四川&#xff1a;2023年3月13日-4月4日 山东&#xff1a;2023年3月17日9:00-4月3日16:00 山西&#xff1a;2023年3月14日9:00-3月28日11:00 辽宁&#xff1a;2023年3月14日8:30…...

单链表(增删查改)

目录一、什么是单链表&#xff1f;二、单链表的增删查改2.1 结构体变量的声明2.2 申请新结点2.2 链表的头插2.3 链表的尾插2.4 链表的头删2.5 链表的尾删2.6 链表的查找2.7 链表的任意位置后面插入2.8 链表的任意位置后面删除2.9 链表的销毁2.10 链表的打印三、代码汇总3.1 SLi…...

端口复用(bind error: Address already in use 问题)

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 端口复用专栏&#xff1a;《Linux从小白到大神》《网络编程》 在前面讲解TCP状态转换中提到过一个2MSL…...

数字化引领乡村振兴,VR全景助力数字乡村建设

一、数字乡村建设加速经济发展随着数字化建设的推进&#xff0c;数字化农业产业正在成为农业产业发展的主导力量&#xff0c;因此数字化技术赋予农业产业竞争力的能力不可小觑。数字化乡村建设背景下&#xff0c;数字化信息技术将全面改造升级农村产业&#xff0c;从农业、养殖…...

【数据结构入门】-链表之双向循环链表

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【数据结构初阶&#xff08;C实现&#xff09;】 文章目录链表初始化打印链表尾插尾删新建一个节点头插头删查找在pos之前插入*删除pos位…...

Jenkins自动化部署入门

Jenkins自动化部署入门 一、简介 Jenkins是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件的持续集成变成可能。 Jenkins自动化部署实现原理 二、Jenkins部…...

Springboot 读取模板excel信息内容并发送邮件, 并不是你想想中的那么简单

Springboot 读取模板excel信息内容并发送邮件 背景技术选型搭建过程数据加密隐藏问题暴露背景追溯解决背景 在我们日常开发中, 会遇到这样一种场景, 就是读取表格中的数据, 并将数据以附件的形式通过邮箱发送到表格中的每个人 即: excel 读取 excel 写入 发送邮件(携带附件), 例…...

蓝桥杯真题31日冲刺 |第一天

蓝桥杯真题31日冲刺 |第一天 一&#xff1a;完全平方数 题目&#xff1a;[链接](完全平方数 - 蓝桥云课 (lanqiao.cn)) 思路&#xff1a; 将 每个 完全平方数都 消掉&#xff0c;剩下的就是 不能构成平方的数 以12 为例&#xff1a; 所以 12 只要再 乘个三 即可满足 代…...

STM32开发(18)----CubeMX配置RTC

CubeMX配置RTC前言一、什么是RTC&#xff1f;RTC时钟源RTC备份域二、实验过程1.CubeMX配置2.代码实现3.实验结果总结前言 本章介绍使用STM32CubeMX对RTC进行配置的方法&#xff0c;RTC的原理、概念和特点&#xff0c;配置各个步骤的功能&#xff0c;并通过实验方式验证。 一、…...

Qt 单例模式第一次尝试

文章目录摘要单例模式如何使用Qt 的属性系统总结关键字&#xff1a; Qt、 单例、 的、 Q_GLOBAL_STATIC、 女神节摘要 世界上第一位电脑程序设计师是名女性&#xff1a;Ada Lovelace (1815-1852)是一位英国数学家兼作家&#xff0c;她是第一位主张计算机不只可以用来算数的人…...

C语言--一维数组

数组概念 数组&#xff1a;是一种构造数据类型&#xff0c;用以处理批量的同种类型的数据。 主要特点&#xff1a;数据量大 &#xff0c;类型相同 一维数组的定义 语法&#xff1a; 类型说明符 数组名[整型常量表达式]&#xff1b; 注意&#xff1a; 方括号里面的内容用于指…...

DataGear 4.5.1 发布,数据可视化分析平台

DataGear 4.5.1 发布&#xff0c;严重 BUG 修复&#xff0c;具体更新内容如下&#xff1a; 修复&#xff1a;修复SQL数据集对于DB2、SQLite等数据源预览时会报错的BUG&#xff1b;修复&#xff1a;修复系统对于MySQL、MariaDB等数据源中无符号数值类型有时报错的BUG&#xff1…...

Springboot——@valid 做字段校验和自定义注解

文章目录前言注意实现测试环境验证自带的注解自定义valid注解自定义注解和处理类创建参数接收类&#xff0c;并增加字段注解接口中使用自测环节正常测试异常测试自定义全局异常监听扩展递归参数下valid不识别的坑前言 再项目开发中&#xff0c;针对前端传递的参数信息&#xf…...

c语言基础练习题详解

&#x1f49e;&#x1f49e; 1.C语言程序的基本单位是&#xff08;C&#xff09;。 A&#xff0e;程序行 B&#xff0e; 语句 C&#xff0e; 函数 D&#xff0e;字符 &#x1f49e;&#x1f49e; 2.已知各变量的类型说明如下&#xff1a; int m6,n,a,b; unsigned long w8;…...

C语言设计模式:实现简单工厂模式和工程创建

目录 一&#xff0c;设计模式概念引入 ① 什么是设计模式 ② 什么是类和对象 ③ 什么是工厂模式 二&#xff0c;C语言工厂模式的实现 ① 普通类和对象的代码实现 ② 工厂模式代码实现 ● cat.c ● dog.c ● person.c ● animal.h ● mainpro.c ● 完善mainpro.c …...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...