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/jre

source /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:$PATH

source /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: 1
  selector:
    matchLabels: 
      app: my-quarkus-demo
  template:
    metadata:
      labels:
        app: my-quarkus-demo
    spec:
      imagePullSecrets:
        - name: myaliyunsecret
      containers:
        - name: my-quarkus-demo-runtime 
          image: registry.cn-hangzhou.aliyuncs.com/jimliu/my-quarkus-demo:latest
          imagePullPolicy: Always
          ports: #定义容器端口列表
            - containerPort: 8848 
              protocol: TCP 
              name: http 
  
---

apiVersion: v1
kind: Service
metadata:
  name: my-quarkus-demo-service
spec:
  ports:
    - protocol: TCP
      port: 18848
      targetPort: 8848
      nodePort: 28848
      name: http
  selector:
    app: my-quarkus-demo
  type: NodePort

kubectl apply -f deploy.yaml 部署应用

集群内部访问

在这里插入图片描述

外部访问

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寂寞的4角钱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值