OpenShift 4.4 - 用CodeReady开发云原生应用(1)- 将可执行Quarkus应用部署到OpenShift

文章目录

  • 创建CodeReady项目
  • Live Coding
  • 打包Java应用
  • 编译成可执行应用
  • 配置服务健康检查
  • 向OpenShift部署Quarkus应用

说明:

  1. 本系列参考了https://github.com/RedHat-Middleware-Workshops/quarkus-workshop。
  2. 运行环境OpenShift 4.4+CodeReady Workspaces。
  3. 通过Operator创建CodeReady Workspaces运行环境请参见“《OpenShift 4 之 用CodeReady Workspaces开发Quarkus云原生应用》的第一节说明”。

创建CodeReady项目

  1. 登录CRW后进入“Get Start”,选中Quarkus Tools区域,然后点击CREATE & OPEN按钮右侧下拉菜单,进入Create & Processed Editing。
    OpenShift 4.4 - 用CodeReady开发云原生应用(1)- 将可执行Quarkus应用部署到OpenShift_第1张图片
  2. 将NAME设为Quarkus-Workshop,在SELECT STACK区域选中Quarkus Tools。然后在PROJECTS区域点击Remove,删除quarkus-quickstarts项目。
    在这里插入图片描述
  3. 在Add or Import Project中的Git一栏中填入“https://github.com/RedHat-Middleware-Workshops/quarkus-workshop-labs”,然后点击Add。
    在这里插入图片描述
  4. 点击New Workspace页面上方CREATE & OPEN按钮右侧,在下拉菜单中点击Create & Proceed Editing,此时进入以下界面。在Quarkus-Worshop的Workspace中进入Devfile栏目,将以下内容替换原有“commands”的所有内容。Save内容后Open这个Workspace。
components:
 - id: redhat/quarkus-java11/latest
    type: chePlugin
 - mountSources: true
    endpoints:
      - name: quarkus-development-server
        port: 8080
      - name: hello-greeting-endpoint
        port: 8080
        attributes:
          path: /hello/greeting/che-user
    memoryLimit: 4Gi
    type: dockerimage
    volumes:
      - name: m2
        containerPath: /home/jboss/.m2
    alias: maven
    image: >-
      quay.io/openshiftlabs/quarkus-workshop-stack:2.1
    env:
      - value: /home/jboss/.m2
        name: MAVEN_CONFIG
      - value: >-
          -Xmx4G -Xss128M -XX:MetaspaceSize=1G -XX:MaxMetaspaceSize=2G
          -XX:+CMSClassUnloadingEnabled
        name: MAVEN_OPTS
apiVersion: 1.0.0
commands:
  - name: Run Tests
    actions:
      - workdir: '${CHE_PROJECTS_ROOT}'
        type: exec
        command: 'mvn verify -f ${CHE_PROJECTS_ROOT}/quarkus-workshop-labs'
        component: maven
  - name: Start Live Coding
    actions:
      - workdir: '${CHE_PROJECTS_ROOT}'
        type: exec
        command: >-
          mvn clean compile quarkus:dev -f
          ${CHE_PROJECTS_ROOT}/quarkus-workshop-labs
        component: maven
  - name: Package App for OpenShift
    actions:
      - workdir: '${CHE_PROJECTS_ROOT}'
        type: exec
        command: >-
          mvn package -DuberJar=true -DskipTests -f
          ${CHE_PROJECTS_ROOT}/quarkus-workshop-labs
        component: maven
  - name: Build Native App
    actions:
      - workdir: '${CHE_PROJECTS_ROOT}'
        type: exec
        command: >-
          mvn package -Pnative -DskipTests -f
          ${CHE_PROJECTS_ROOT}/quarkus-workshop-labs
        component: maven
  - name: Start Debugger on 5005
    actions:
      - referenceContent: |
          {
            "version": "0.2.0",
            "configurations": [
              {
                "type": "java",
                "request": "attach",
                "name": "Attach to App",
                "hostName": "localhost",
                "port": 5005
              }
            ]
          }
        type: vscode-launch

OpenShift 4.4 - 用CodeReady开发云原生应用(1)- 将可执行Quarkus应用部署到OpenShift_第2张图片

Live Coding

  1. 在Quakus-Workshop中打开quakus-workshop-labs项目中的src/main/java/org/acme/people/rest/GreetingResource.java文件查看代码。
  2. 击窗口右侧的Start Live Codeing,然后在下方的窗口查看编译输出。
    OpenShift 4.4 - 用CodeReady开发云原生应用(1)- 将可执行Quarkus应用部署到OpenShift_第3张图片
  3. 在编译过程中打Open Link(会打开PREVIEW窗口),并允许使用5005端口。
    OpenShift 4.4 - 用CodeReady开发云原生应用(1)- 将可执行Quarkus应用部署到OpenShift_第4张图片
  4. 在Workspace中的PREVIEW中的地址栏最后添加"/hello",然后确认页面返回hello。另外还可通过打开一个“_ New Terminal”,在其中运行以下命令查看运行。
$ curl http://localhost:8080/hello

OpenShift 4.4 - 用CodeReady开发云原生应用(1)- 将可执行Quarkus应用部署到OpenShift_第5张图片
5. 修改GreetingResource.java的代码,将"hello"改为“hola”。保存后按照(8)确认返回结果已经变为“Hola”。

打包Java应用

  1. 点击Workshop的“Package App for OpenShift”,OpenShift会打开新窗口将应用打包,最后在项目中的target目录中可以看到people-1.0-SNAPSHOT-runner.jar文件。
    OpenShift 4.4 - 用CodeReady开发云原生应用(1)- 将可执行Quarkus应用部署到OpenShift_第6张图片
  2. 为了区别缺省使用的8080端口,运行以下命令,运行编译好的jar文件,并监听在8081端口。
$ java -Dquarkus.http.port=8081 -jar $CHE_PROJECTS_ROOT/quarkus-workshop-labs/target/*-runner.jar
  1. 打开另一个Terminal,然后运行以下命令,确认可正常返回结果。
$ curl http://localhost:8081/hello

OpenShift 4.4 - 用CodeReady开发云原生应用(1)- 将可执行Quarkus应用部署到OpenShift_第7张图片

编译成可执行应用

  1. 点击Workshop的“Build Native
    App”,OpenShift会打开新窗口将应用打包,最后在项目中的target目录中可以看到people-1.0-SNAPSHOT-runner可执行程序。
    OpenShift 4.4 - 用CodeReady开发云原生应用(1)- 将可执行Quarkus应用部署到OpenShift_第8张图片
  2. 打开一个Terminal,然后运行可执行程序。
$ $CHE_PROJECTS_ROOT/quarkus-workshop-labs/target/people-1.0-SNAPSHOT-runner -Dquarkus.http.port=8081 
  1. 在打开一个新的Terminal,然后运行以下命令,确认可以返回结果。
$ curl http://localhost:8081/hello

配置服务健康检查

  1. 在Terminal中执行以下命令,为项目添加health的扩展。
$ mvn quarkus:add-extension -Dextensions="health" -f $CHE_PROJECTS_ROOT/quarkus-workshop-labs

在添加为后,在项目的pom.xml文件中确认增加了以下代码。

>
    >io.quarkus>
    >quarkus-smallrye-health>
>
  1. 在Terminal中执行以下命令,确认返回结果。
$ curl http://localhost:8080/health/ready
{
    "status": "UP",
    "checks": [
    ]
}
$ curl http://localhost:8080/health/live
{
    "status": "UP",
    "checks": [
    ]
}

OpenShift 4.4 - 用CodeReady开发云原生应用(1)- 将可执行Quarkus应用部署到OpenShift_第9张图片
2. 在org.acme.people.health中增加以下内容的SimpleHealthCheck.java,然后再次执行上一步确认live和ready。

package org.acme.people.health;
 
import org.eclipse.microprofile.health.HealthCheck;
import org.eclipse.microprofile.health.HealthCheckResponse;
import org.eclipse.microprofile.health.Readiness;
import javax.enterprise.context.ApplicationScoped;
 
@ApplicationScoped
@Readiness
public class SimpleHealthCheck implements HealthCheck {
 
    @Override
    public HealthCheckResponse call() {
        return HealthCheckResponse.named("Simple health check").up().build();
    }
}

OpenShift 4.4 - 用CodeReady开发云原生应用(1)- 将可执行Quarkus应用部署到OpenShift_第10张图片

向OpenShift部署Quarkus应用

  1. 打开一个新的Terminal,然后执行以下命令登录OpenShift。
$ oc login https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_SERVICE_PORT --insecure-skip-tls-verify=true
  1. 创建一个新项目。
$ oc new-project <USER_ID>-project
  1. 执行命令,基于ubi-quarkus-native-binary-s2i:19.3.1镜像,部署和运行people-1.0-SNAPSHOT-runner可执行应用。
$ oc new-build quay.io/quarkus/ubi-quarkus-native-binary-s2i:19.3.1 --binary --name=people -l app=people
$ oc start-build people --from-file $CHE_PROJECTS_ROOT/quarkus-workshop-labs/target/*-runner --follow
$ oc new-app people -l "app.openshift.io/runtime=quarkus,app.kubernetes.io/part-of=people"
$ oc expose svc/people
$ oc rollout status -w dc/people
  1. 访问部署的应用。
$ curl $(oc get route people --template='{{ .spec.host }}')/hello
  1. 在该用户的OpenShift的Developer控制台中,可以在Topology视图中看到该部署的基于Quarkus应用。
    OpenShift 4.4 - 用CodeReady开发云原生应用(1)- 将可执行Quarkus应用部署到OpenShift_第11张图片
  2. 执行命令,配置健康检查。
$ oc set probe dc/people --readiness --initial-delay-seconds=5 --period-seconds=5 --failure-threshold=20 --get-url=http://:8080/health/ready
$ oc set probe dc/people --liveness --initial-delay-seconds=5 --period-seconds=5 --failure-threshold=20  --get-url=http://:8080/health/live

你可能感兴趣的:(OpenShift,4,Quarkus,CodeReady)