学网站建设有什么用,保定建设银行网站首页,门户网站的自身的特性,网页制作软件电脑quarkus 生产环境与k8s集成总结
大纲
基础准备quarkus2.13.7脚手架工程配置GraalVM-java11 安装配置配置maven3.8.7linux环境下云原生二进制文件打包环境搭建编译运行quarkus二进制文件quarkus二进制文件制作为docker镜像并运行使用k8s部署quarkus二进制文件
基础准备
生产…quarkus 生产环境与k8s集成总结
大纲
基础准备quarkus2.13.7脚手架工程配置GraalVM-java11 安装配置配置maven3.8.7linux环境下云原生二进制文件打包环境搭建编译运行quarkus二进制文件quarkus二进制文件制作为docker镜像并运行使用k8s部署quarkus二进制文件
基础准备
生产环境
1 ubuntu18.042 quarkus2.13.7.Final项目my-quarkus-demo3 graalvm-ce-java11-linux-amd64-22.3.0.tar.gz4 maven-3.8.75 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.gznative-image-installable-svm-java11-linux-amd64-22.3.0.jar
GraalVM 添加jre
创建一个空的文件夹ops 解压graalvm-ce-java11-linux-amd64-22.3.0.tar.gz
rootnote4:/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.jarnative-image --version
GraalVM 22.3.0 Java 11 CE (Java Version 11.0.178-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配置镜像仓库mirroridhuaweicloud/idnamehuaweicloud maven/namemirrorOf*/mirrorOfurlhttps://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-dev2 指定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
创建一个文件夹保存数据
Dockerfilemy-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.host0.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:latestk8s部署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: NodePortkubectl apply -f deploy.yaml 部署应用
集群内部访问 外部访问