现在Quarkus 被称为 Supersonic Subatomic Java。它提供了许多功能来促进构建和部署。我尽我最大的努力创建了一个带有 quarkus 的小型博客应用程序,并安装了以下功能:rest-client、security、spring-data-jpa、smallrye-health和openapi、Kubernetes和AWS部署以进行实际尝试。
如果他们有兴趣从 Quarkus 系统中获得尽可能多的生命,那么他们可以做很多事情。重要的是要了解先决条件以及系统此时可以做什么和不能做什么。在您了解这一点之前,要完成所有事情当然并不容易。
今天,我们将探讨您需要做什么才能使用 Quarkus系统有所作为。我们还将查看此时启动和运行所需的所有技术规范。当您努力充分利用您遇到的每个编码程序时,这应该对您有所帮助。
Quarkus 为构建(和推送)容器镜像提供了扩展。目前支持 Jib、S2I、Docker。
要使用 Docker 容器化,请添加Gradle 依赖项:
implementation 'io.quarkus:quarkus-container-image-docker'
在以下位置配置 docker 镜像和远程注册表 :application.properties
Dockerfile
1quarkus.container-image.name=blog-api2quarkus.container-image.tag=latest3quarkus.container-image.registry=docker.io4quarkus.container-image.username=5quarkus.container-image.password=6quarkus.container-image.push=true 或覆盖 Gradle 命令上的属性:
Dockerfile
./gradlew quarkusBuild 2 -Dquarkus.container-image.username= \3 -Dquarkus.container-image.password= \4 -Dquarkus.container-image.push=true 因为可以创建一个多级Dockerfile来避免打包:
Dockerfile
####2# This Dockerfile.multistage is used in order to build a container that runs the Quarkus application in JVM mode3# docker build -t quarkus-quickstart:jvm -f src/main/docker/Dockerfile.multistage .4# docker run -i --rm -p 8080:8080 quarkus-quickstart:jvm5###67# Build jar with gradle8FROM gradle:jdk11 AS build_image910ENV APP_HOME=/root/dev/myapp/11USER root12RUN mkdir -p $APP_HOME/src/main/java13WORKDIR $APP_HOME14COPY build.gradle gradlew gradlew.bat $APP_HOME15COPY gradle $APP_HOME/gradle16COPY . .17RUN ./gradlew -PawsLambdaEnabled=false quarkusBuild1819FROM registry.access.redhat.com/ubi8/ubi-minimal:8.12021ARG JAVA_PACKAGE=java-11-openjdk-headless22ARG RUN_JAVA_VERSION=1.3.52324ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en'2526# Install java and the run-java script27# Also set up permissions for user `1001`28RUN microdnf install curl ca-certificates ${JAVA_PACKAGE} \29 && microdnf update \30 && microdnf clean all \31 && mkdir /deployments \32 && chown 1001 /deployments \33 && chmod "g+rwX" /deployments \34 && chown 1001:root /deployments \35 && curl https://repo1.maven.org/maven2/io/fabric8/run-java-sh/${RUN_JAVA_VERSION}/run-java-sh-${RUN_JAVA_VERSION}-sh.sh -o /deployments/run-java.sh \36 && chown 1001 /deployments/run-java.sh \37 && chmod 540 /deployments/run-java.sh \38 && echo "securerandom.source=file:/dev/urandom" >> /etc/alternatives/jre/lib/security/java.security3940# Configure the JAVA_OPTIONS, you can add -XshowSettings:vm to also display the heap size.41ENV JAVA_OPTIONS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"42COPY --from=build_image /root/dev/myapp/build/lib/* /deployments/lib/43COPY --from=build_image /root/dev/myapp/build/*-runner.jar /deployments/app.jar4445EXPOSE 809046USER 10014748ENTRYPOINT [ "/deployments/run-java.sh" ]要在没有 Quarkus 的情况下在 Openshift 上部署,可以定义 template.yaml:
YAML
apiVersion: v12kind: Template3metadata:4 name: my-template5objects:6- kind: DeploymentConfig7 apiVersion: v18 metadata:9 labels:10 ${TAG}: ${SELECTOR_APP_NAME}11 name: ${APP_NAME}12 namespace: ${NAMESPACE_NAME}13 spec:14 replicas: 115 revisionHistoryLimit: 1016 selector:17 app: ${APP_NAME}18 deploymentconfig: ${APP_NAME}19 strategy:20 activeDeadlineSeconds: 2160021 resources: {}22 rollingParams:23 intervalSeconds: 124 maxSurge: 25%25 maxUnavailable: 25%26 timeoutSeconds: 60027 updatePeriodSeconds: 128 type: Rolling29 template:30 metadata:31 annotations:32 openshift.io/generated-by: OpenShiftNewApp33 creationTimestamp: null34 labels:35 app: ${APP_NAME}36 deploymentconfig: ${APP_NAME}37 spec:38 containers:39 - env:40 name: ${APP_NAME}41 ports:42 - containerPort: 809043 protocol: TCP44 resources: {}45 dnsPolicy: ClusterFirst46 restartPolicy: Always47 schedulerName: default-scheduler48 securityContext: {}49 terminationGracePeriodSeconds: 3050 test: false51 triggers:52 - type: ConfigChange53 - imageChangeParams:54 automatic: true55 containerNames:56 - ${APP_NAME}57 from:58 kind: ImageStreamTag59 name: 'blog-api:latest'60 namespace: ${NAMESPACE_NAME}61 type: ImageChange62- kind: Service63 apiVersion: v164 metadata:65 labels:66 ${TAG}: ${SELECTOR_APP_NAME}67 name: ${APP_NAME}68 namespace: ${NAMESPACE_NAME}69 spec:70 ports:71 - name: 80-tcp72 port: 8073 protocol: TCP74 targetPort: 809075 selector:76 app: ${APP_NAME}77 deploymentconfig: ${APP_NAME}78 sessionAffinity: None79 type: ClusterIP80 status:81 loadBalancer: {}82- kind: Route83 apiVersion: v184 metadata:85 labels:86 ${TAG}: ${SELECTOR_APP_NAME}87 name: ${APP_NAME}88 namespace: ${NAMESPACE_NAME}89 spec:90 host: ${HOST_NAME}91 port:92 targetPort: 80-tcp93 to:94 kind: Service95 name: ${APP_NAME}96 weight: 10097 wildcardPolicy: None98parameters:99- name: NAMESPACE_NAME100- name: SELECTOR_APP_NAME101- name: APP_NAME102 value: quarkus-blog-api103- name: HOST_NAME104- name: TAG105 value: app并处理:
Dockerfile
oc tag elvaliev/blog-api:latest23oc process NAMESPACE_NAME= \4 SELECTOR_APP_NAME= \5 HOST_NAME= \6 -f template.yaml | oc apply -f- 通过使用 docker 容器化,还可以使用来自 docker 注册表的镜像流来部署应用程序。
Dockerfile
oc new-app elvaliev/blog-api:latest23oc expose svc/blog-api但是,Quarkus 提供了自动生成Kubernetes 资源的能力。它目前支持为 Kubernetes、OpenShift 和 Knative 生成资源。
摇篮依赖:
implementation 'io.quarkus:quarkus-kubernetes'
要生成必要的模板,您需要将目标包含在 application.properties:
quarkus.kubernetes.deployment-target=kubernetes,openshift
或者,您可以为模板设置自定义配置:
Dockerfile
quarkus.kubernetes.annotations.app=blog2quarkus.kubernetes.labels.app=blog34# To create route for your application5quarkus.openshift.expose=true打包 quarkus 后生成目标模板:
通过命令部署应用程序:
oc create -f build/kubernetes/openshift.yml
此外,还可以使用S2I进行部署。
Dockerfile
oc new-app quay.io/quarkus/ubi-quarkus-native-s2i:19.3.1-java11~ 2 --context-dir=. --name=quarkus-blog-api3 4oc expose svc/quarkus-blog-a 注意:仅使用最新版本的 quarkus — 1.4.1。
Gradle的依赖:
implementation 'io.quarkus:quarkus-amazon-lambda-http'
打包 quarkus 后为 AWS 生成 sam 模板:
要将应用程序部署为 AWS Lambda,请使用构建中的模板。对于本机构建使用模板build/sam.native.yaml。
我遵循了 quarkus-documentation:
Dockerfile
sam local start-api --template build/sam.jvm.yaml23sam package --template-file build/sam.jvm.yaml --output-template-file packaged.yaml --s3-bucket 45sam deploy --template-file packaged.yaml --capabilities CAPABILITY_IAM --stack-name
注意:为了避免超时错误(502 - BAD GATEWAY) - Timeout 增加 build/sam.jvm.yaml
注意:要使用 Docker 容器化,您需要排除quarkus-amazon-lambda-http对 jar 打包的依赖(使用条件属性awsLambdaEnabled=false进行 打包gradle.properties ):
Dockerfile
1if (project.property(“awsLambdaEnabled”) != “true”) { 2 configurations { 3 runtime.exclude group: ‘io.quarkus’, 4 module: ‘quarkus-amazon-lambda-http’ 5 }6}Github: https ://github.com/ElinaValieva/quarkus-quickstarts
| 留言与评论(共有 0 条评论) “” |