OpenShift 4.4 - 用CodeReady開發雲原生應用(1)- 將可執行Quarkus應用部署到OpenShift


說明:

  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。
    在這裏插入圖片描述
  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

在這裏插入圖片描述

Live Coding

  1. 在Quakus-Workshop中打開quakus-workshop-labs項目中的src/main/java/org/acme/people/rest/GreetingResource.java文件查看代碼。
  2. 擊窗口右側的Start Live Codeing,然後在下方的窗口查看編譯輸出。
    在這裏插入圖片描述
  3. 在編譯過程中打Open Link(會打開PREVIEW窗口),並允許使用5005端口。
    在這裏插入圖片描述
  4. 在Workspace中的PREVIEW中的地址欄最後添加"/hello",然後確認頁面返回hello。另外還可通過打開一個“_ New Terminal”,在其中運行以下命令查看運行。
$ curl http://localhost:8080/hello

在這裏插入圖片描述
5. 修改GreetingResource.java的代碼,將"hello"改爲“hola”。保存後按照(8)確認返回結果已經變爲“Hola”。

打包Java應用

  1. 點擊Workshop的“Package App for OpenShift”,OpenShift會打開新窗口將應用打包,最後在項目中的target目錄中可以看到people-1.0-SNAPSHOT-runner.jar文件。
    在這裏插入圖片描述
  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

在這裏插入圖片描述

編譯成可執行應用

  1. 點擊Workshop的“Build Native
    App”,OpenShift會打開新窗口將應用打包,最後在項目中的target目錄中可以看到people-1.0-SNAPSHOT-runner可執行程序。
    在這裏插入圖片描述
  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文件中確認增加了以下代碼。

<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-smallrye-health</artifactId>
</dependency>
  1. 在Terminal中執行以下命令,確認返回結果。
$ curl http://localhost:8080/health/ready
{
    "status": "UP",
    "checks": [
    ]
}
$ curl http://localhost:8080/health/live
{
    "status": "UP",
    "checks": [
    ]
}

在這裏插入圖片描述
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部署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應用。
    在這裏插入圖片描述
  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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章