田辺  亮介

田辺 亮介

1658421660

如何開始使用 OpenShift 服務註冊表

Red Hat OpenShift Service Registry 是一項完全託管和託管的服務,它為微服務提供 API 和模式註冊表。OpenShift Service Registry 使開發團隊可以輕鬆發布、發現和重用 API 和模式。

定義良好的 API 和模式定義對於提供強大的微服務和事件流架構至關重要。開發團隊可以使用註冊表以各種格式管理這些工件,包括OpenAPIAsyncAPIApache AvroProtocol Buffers等。然後,數據生產者和消費者可以使用工件來驗證和序列化或反序列化數據。

本文將幫助您開始使用 OpenShift Service Registry。您將創建一個基於QuarkusJava應用程序,該應用程序使用註冊表來管理通過Apache Kafka集群中的主題發送的數據的模式。本教程應花費不到 30 分鐘,包括以下步驟:

  1. 創建一個紅帽混合雲帳戶。
  2. 供應 OpenShift 服務註冊表實例。
  3. 為 Apache Kafka 實例供應 OpenShift Streams。
  4. 創建 Kafka 主題。
  5. 創建一個服務帳戶以促進對您的 Kafka 和 Service Registry 實例的身份驗證訪問。
  6. 構建並運行 Java 應用程序。

注意:模式和 API 定義是代表解耦服務之間契約的元數據,因此它們必須是可發現的、記錄的和分配的版本,以跟踪它們隨時間的演變。

關於 OpenShift 服務註冊表

Red Hat OpenShift Service Registry 基於開源Apicurio Registry 項目。它提供了一個高度可用的服務註冊實例,該實例安全且與Confluent Schema Registry APICNCF Schema Registry API兼容。對於使用Red Hat OpenShift Streams for Apache KafkaRed Hat OpenShift API Management的應用程序,OpenShift Service Registry 也是一項完美的配套服務。

先決條件

您需要一個紅帽混合雲帳戶來運行本文中的示例。在console.redhat.com免費創建一個帳戶。您的開發環境中還需要以下工具:

  • Java 11 或更高版本
  • Maven 3.8.1 或更高版本
  • 吉特
  • 您最喜歡的 IDE 或文本編輯器

創建服務註冊實例

擁有紅帽混合雲帳戶的組織或個人有權獲得為期兩個月的 OpenShift Service Registry 試用實例。創建實例:

  1. 在console.redhat.com上登錄您的帳戶。
  2. 在用戶界面 (UI) 中,從左側菜單中選擇應用程序服務。
  3. 展開側面菜單上的Service Registry條目,然後單擊Service Registry Instances鏈接。確認它是 Beta 服務的警告。
  4. 單擊創建服務註冊表實例按鈕。將顯示一個模態對話框。
  5. 輸入 Service Registry 實例的名稱,然後單擊Create按鈕。

您的 OpenShift Service Registry 實例將在一兩分鐘內準備好使用。狀態列中將顯示一個綠色複選標記,以指示實例何時準備就緒,如圖 1 所示。

當 OpenShift Service Registry UI 中顯示綠色複選標記和 Ready 狀態時,可以打開 Service Registry 實例。

圖 1:OpenShift Service Registry UI 中列出的 Service Registry 實例。

 

一旦您的實例準備就緒,請在門戶中單擊其行以查看連接信息,如圖 2 所示。記下Core Registry API值,因為您很快就會需要它。

UI 中顯示的服務註冊表實例連接信息。

圖 2:UI 中顯示的 Service Registry 實例連接信息。

將 Java 應用程序與 Service Registry 集成

Kafka 生產者應用程序可以使用序列化程序對符合特定事件模式的消息進行編碼。然後,Kafka 消費者應用程序可以使用反序列化器來驗證消息是否基於特定的模式 ID 使用正確的模式進行了序列化。這個過程如圖 3 所示。您將使用連接到 Kafka 的 Java 生產者和消費者應用程序來測試序列化和反序列化。

Kafka 中的生產者和消費者都從 OpenShift 服務註冊表中獲取模式。

圖 3:Kafka 生產者和消費者應用程序使用 OpenShift Service Registry 共享模式。

預配託管 Kafka 實例並創建主題

首先,您需要創建一個 OpenShift Streams for Apache Kafka 實例和兩個主題:一個名為quote-requests,另一個名為quotes. 我們已經在本文中解釋瞭如何免費獲得這個運行時環境。

請記住記下您的 Kafka 實例的引導服務器 URL。您很快就會需要這個 URL。

創建服務帳號

需要服務帳戶才能將應用程序連接到 OpenShift Service Registry 和 OpenShift Streams for Apache Kafka 實例。服務帳戶提供應用程序用來針對雲服務進行身份驗證的客戶端 ID 和客戶端密碼。

要創建服務帳戶:

  1. 訪問console.redhat.com/beta/application-services/service-accounts
  2. 單擊創建服務帳戶按鈕。
  3. 輸入服務帳戶的名稱。
  4. 單擊創建按鈕。
  5. 將顯示客戶端 ID 和客戶端密碼。將這些複製到安全的地方。
  6. 關閉模態對話框。

部署生產者 Java 應用程序

此時你有:

  • OpenShift 服務註冊實例
  • OpenShift Streams for Apache Kafka 實例
  • 用於將應用程序連接到前兩個實例的服務帳戶
  • Kafka 主題用於保存生產者發布的消息

現在,是時候部署一個將消息發佈到 Kafka 主題的生產者應用程序了。此應用程序利用 Avro 模式以 Avro 格式對消息進行編碼。它還會將此模式發佈到您的 OpenShift 服務註冊表。消費者應用程序可以從 OpenShift Service Registry 獲取模式,以反序列化和驗證它們從您的 Kafka 主題中使用的記錄。

生產者和消費者的源代碼都可以在這個GitHub 存儲庫中找到。將其克隆到您的開發環境中:

$ git clone $REPOSITORY_URL rhosr-getting-started

rhosr-getting-started使用您首選的 IDE 或文本編輯器打開項目,然後打開producer/pom.xml文件。此文件包含用於連接到 Kafka 和公開 REST 服務的典型依賴項。該quarkus-apicurio-registry-avro依賴項用於根據 Avro 模式定義生成 Java 類。它還引入了使用服務註冊表所需的依賴項,例如服務註冊表感知的 Kafka 序列化器和反序列化器。

接下來,打開producer/src/main/avro/quote.avsc文件。此文件包含使用 JSON 定義的 Avro 模式。此模式可用於生成Quote.java擴展和實現必要的 Avro 類和接口的類。該類Quote用於將傳出消息序列化到底層 Kafka 主題,並由quotes通道反序列化傳入消息。target/generated-sources/Quota.java編譯應用程序或在開發模式下運行後,可以在文件中找到生成的類。

最後,檢查producer/src/main/resource/application.properties文件。此文件將應用程序配置為連接到 Kafka 實例,向註冊表註冊模式,並使用 Avro 序列化和反序列化。

運行生產者應用程序

您可以在任何地方運行生產者應用程序,包括在 OpenShift 集群上。我將演示如何在本地開發環境中運行生產者。

首先,在 shell 中定義以下環境變量。將<>尖括號中的文本替換為您在前幾節中找到的值:

# Used to authenticate against the registry and kafka cluster
export CLIENT_ID=<your-client-id>
export CLIENT_SECRET=<your-client-secret>

# Used to connect to and authenticate against the service registry
export OAUTH_SERVER_URL=https://sso.redhat.com/auth
export REGISTRY_URL=<core-service-registry-url>

# Used to connect to and authenticate against the kafka cluster
export BOOTSTRAP_SERVER=<kafka-bootstrap-url>
export OAUTH_TOKEN_ENDPOINT_URI=https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token

 

定義這些值後,您可以使用以下命令在同一 shell 中啟動生產者應用程序:

$ mvn quarkus:dev -f ./producer/pom.xml -Dquarkus-profile=prod

Quarkus 應用程序現在正在運行,並在http://localhost:8080/上公開了一個 HTTP 服務器。使用以下命令發送一個 POST 請求,該請求創建一個報價並將其發送到quote-requestsKafka 主題:

$ curl -X POST http://localhost:8080/quotes/request

您應該收到 JSON 格式的響應,其中包含唯一的報價id和 random price

在 Service Registry 中查看報價模式

當您啟動生產者應用程序並向/quotes/request端點發出請求時,生產者準備好將數據發送到您的 Kafka 主題。在發送數據之前,生產者檢查 Quote Avro 模式在 OpenShift Service Registry 中是否可用。如果未找到 Quote 模式,則生產者將模式發佈到註冊表。然後,生產者使用模式序列化傳出數據,並將註冊的模式 ID 包含在消息值中。

下游消費者應用程序可以使用在消息負載中找到的模式 ID 從註冊表中獲取必要的模式。消費者應用程序然後可以使用模式來驗證和反序列化傳入的消息。

要確認 Avro 模式已發佈到 OpenShift Service Registry:

  1. 轉到您的OpenShift Service Registry Instances列表。
  2. 選擇您的生產者應用程序使用的實例。
  3. 選擇工件選項卡。

您應該看到 Quote 模式,如圖 4 所示。

Quote Avro 模式列在 OpenShift 服務註冊表中。

圖 4:OpenShift 服務註冊表中列出的 Quote Avro 模式。

在列表中選擇 Quote 模式並查看Content選項卡。使用Format按鈕提高 JSON 的易讀性,並確認它與Quote.avsc生產者應用程序代碼庫中的文件匹配。

在 Service Registry 中使用消息

您在本練習中克隆的存儲庫包含一個使用者應用程序。此消費者應用程序使用與生產者相同的環境變量進行配置,並從quote-requests主題中讀取消息。因為生產者和消費者使用 OpenShift 服務註冊表,所以消費者可以獲取必要的 Avro 模式來驗證和反序列化傳入的報價請求。

同時運行生產者和消費者。使用 cURL 在http://localhost:8080/quotes打開與服務器發送事件 (SSE) 端點的連接,然後使用另一個 HTTP 客戶端 POST 到http://localhost:8080/quotes/request。消費者應正確反序列化和處理quote-requests主題中的項目,並將處理後的報價放入quotes主題中,之後 SSE 端點應顯示項目,如圖 5 所示。

cURL 命令顯示消費者在 SSE 端點收到的反序列化的 JSON 格式數據。

圖 5:消費者在 SSE 端點接收並由 cURL 命令顯示的反序列化 JSON 格式數據。

強制執行架構兼容性規則

OpenShift Service Registry 支持各種模式兼容性規則,以防止發布可能導致與下游應用程序不兼容的模式更改(即破壞性更改)。您可以在服務文檔中閱讀有關兼容性規則的更多信息。要啟用此強制執行:

  1. 在console.redhat.com/beta/application-services/service-registry打開 Service Registry UI 。
  2. 選擇您的實例並查看報價架構。
  3. Validity Rule設置為Full,將Compatibility Rule設置為Backward(參見圖 6)。
  4. 單擊上傳新版本按鈕。
  5. 粘貼以下 Avro 架構並單擊Upload
{
  "namespace": "org.acme.kafka.quarkus",
  "type": "record",
  "name": "Quote",
  "fields": [
    {
      "name": "id",
      "type": "string"
    },
    {
      "name": "price",
      "type": "int"
    },
    {
      "name": "notes",
      "type": "string"
    }
  ]
}

 

圖 6 在控制台中顯示了這些更新。

可以在 OpenShift Service Registry UI 中設置兼容性規則。

圖 6:使用 OpenShift Service Registry UI 實施模式兼容性規則。

應顯示 Invalid Content 錯誤,因為此新模式通過添加新的必填字段違反了向後兼容性規則如果啟用了向後兼容性,新字段必須是可選的。如錯誤消息所示,需要新模式來為所有未來的演進提供向後兼容的模式。

結論

恭喜——在本文中,您學會瞭如何:

  1. 使用 OpenShift 服務註冊表。
  2. 將 OpenShift Streams 用於 Apache Kafka。
  3. 創建 Avro 模式。
  4. 將使用 Avro 模式的 Java 應用程序與這兩種服務集成。
  5. 管理模式演變並應用規則以防止下游消費者的破壞性更改。

註冊本文中描述的服務,並在評論中告訴我們您的體驗。

鏈接:https ://developers.redhat.com/articles/2021/10/11/get-started-openshift-service-registry#sumption_messages_in_service_registry

#openshift

What is GEEK

Buddha Community

如何開始使用 OpenShift 服務註冊表
田辺  亮介

田辺 亮介

1658421660

如何開始使用 OpenShift 服務註冊表

Red Hat OpenShift Service Registry 是一項完全託管和託管的服務,它為微服務提供 API 和模式註冊表。OpenShift Service Registry 使開發團隊可以輕鬆發布、發現和重用 API 和模式。

定義良好的 API 和模式定義對於提供強大的微服務和事件流架構至關重要。開發團隊可以使用註冊表以各種格式管理這些工件,包括OpenAPIAsyncAPIApache AvroProtocol Buffers等。然後,數據生產者和消費者可以使用工件來驗證和序列化或反序列化數據。

本文將幫助您開始使用 OpenShift Service Registry。您將創建一個基於QuarkusJava應用程序,該應用程序使用註冊表來管理通過Apache Kafka集群中的主題發送的數據的模式。本教程應花費不到 30 分鐘,包括以下步驟:

  1. 創建一個紅帽混合雲帳戶。
  2. 供應 OpenShift 服務註冊表實例。
  3. 為 Apache Kafka 實例供應 OpenShift Streams。
  4. 創建 Kafka 主題。
  5. 創建一個服務帳戶以促進對您的 Kafka 和 Service Registry 實例的身份驗證訪問。
  6. 構建並運行 Java 應用程序。

注意:模式和 API 定義是代表解耦服務之間契約的元數據,因此它們必須是可發現的、記錄的和分配的版本,以跟踪它們隨時間的演變。

關於 OpenShift 服務註冊表

Red Hat OpenShift Service Registry 基於開源Apicurio Registry 項目。它提供了一個高度可用的服務註冊實例,該實例安全且與Confluent Schema Registry APICNCF Schema Registry API兼容。對於使用Red Hat OpenShift Streams for Apache KafkaRed Hat OpenShift API Management的應用程序,OpenShift Service Registry 也是一項完美的配套服務。

先決條件

您需要一個紅帽混合雲帳戶來運行本文中的示例。在console.redhat.com免費創建一個帳戶。您的開發環境中還需要以下工具:

  • Java 11 或更高版本
  • Maven 3.8.1 或更高版本
  • 吉特
  • 您最喜歡的 IDE 或文本編輯器

創建服務註冊實例

擁有紅帽混合雲帳戶的組織或個人有權獲得為期兩個月的 OpenShift Service Registry 試用實例。創建實例:

  1. 在console.redhat.com上登錄您的帳戶。
  2. 在用戶界面 (UI) 中,從左側菜單中選擇應用程序服務。
  3. 展開側面菜單上的Service Registry條目,然後單擊Service Registry Instances鏈接。確認它是 Beta 服務的警告。
  4. 單擊創建服務註冊表實例按鈕。將顯示一個模態對話框。
  5. 輸入 Service Registry 實例的名稱,然後單擊Create按鈕。

您的 OpenShift Service Registry 實例將在一兩分鐘內準備好使用。狀態列中將顯示一個綠色複選標記,以指示實例何時準備就緒,如圖 1 所示。

當 OpenShift Service Registry UI 中顯示綠色複選標記和 Ready 狀態時,可以打開 Service Registry 實例。

圖 1:OpenShift Service Registry UI 中列出的 Service Registry 實例。

 

一旦您的實例準備就緒,請在門戶中單擊其行以查看連接信息,如圖 2 所示。記下Core Registry API值,因為您很快就會需要它。

UI 中顯示的服務註冊表實例連接信息。

圖 2:UI 中顯示的 Service Registry 實例連接信息。

將 Java 應用程序與 Service Registry 集成

Kafka 生產者應用程序可以使用序列化程序對符合特定事件模式的消息進行編碼。然後,Kafka 消費者應用程序可以使用反序列化器來驗證消息是否基於特定的模式 ID 使用正確的模式進行了序列化。這個過程如圖 3 所示。您將使用連接到 Kafka 的 Java 生產者和消費者應用程序來測試序列化和反序列化。

Kafka 中的生產者和消費者都從 OpenShift 服務註冊表中獲取模式。

圖 3:Kafka 生產者和消費者應用程序使用 OpenShift Service Registry 共享模式。

預配託管 Kafka 實例並創建主題

首先,您需要創建一個 OpenShift Streams for Apache Kafka 實例和兩個主題:一個名為quote-requests,另一個名為quotes. 我們已經在本文中解釋瞭如何免費獲得這個運行時環境。

請記住記下您的 Kafka 實例的引導服務器 URL。您很快就會需要這個 URL。

創建服務帳號

需要服務帳戶才能將應用程序連接到 OpenShift Service Registry 和 OpenShift Streams for Apache Kafka 實例。服務帳戶提供應用程序用來針對雲服務進行身份驗證的客戶端 ID 和客戶端密碼。

要創建服務帳戶:

  1. 訪問console.redhat.com/beta/application-services/service-accounts
  2. 單擊創建服務帳戶按鈕。
  3. 輸入服務帳戶的名稱。
  4. 單擊創建按鈕。
  5. 將顯示客戶端 ID 和客戶端密碼。將這些複製到安全的地方。
  6. 關閉模態對話框。

部署生產者 Java 應用程序

此時你有:

  • OpenShift 服務註冊實例
  • OpenShift Streams for Apache Kafka 實例
  • 用於將應用程序連接到前兩個實例的服務帳戶
  • Kafka 主題用於保存生產者發布的消息

現在,是時候部署一個將消息發佈到 Kafka 主題的生產者應用程序了。此應用程序利用 Avro 模式以 Avro 格式對消息進行編碼。它還會將此模式發佈到您的 OpenShift 服務註冊表。消費者應用程序可以從 OpenShift Service Registry 獲取模式,以反序列化和驗證它們從您的 Kafka 主題中使用的記錄。

生產者和消費者的源代碼都可以在這個GitHub 存儲庫中找到。將其克隆到您的開發環境中:

$ git clone $REPOSITORY_URL rhosr-getting-started

rhosr-getting-started使用您首選的 IDE 或文本編輯器打開項目,然後打開producer/pom.xml文件。此文件包含用於連接到 Kafka 和公開 REST 服務的典型依賴項。該quarkus-apicurio-registry-avro依賴項用於根據 Avro 模式定義生成 Java 類。它還引入了使用服務註冊表所需的依賴項,例如服務註冊表感知的 Kafka 序列化器和反序列化器。

接下來,打開producer/src/main/avro/quote.avsc文件。此文件包含使用 JSON 定義的 Avro 模式。此模式可用於生成Quote.java擴展和實現必要的 Avro 類和接口的類。該類Quote用於將傳出消息序列化到底層 Kafka 主題,並由quotes通道反序列化傳入消息。target/generated-sources/Quota.java編譯應用程序或在開發模式下運行後,可以在文件中找到生成的類。

最後,檢查producer/src/main/resource/application.properties文件。此文件將應用程序配置為連接到 Kafka 實例,向註冊表註冊模式,並使用 Avro 序列化和反序列化。

運行生產者應用程序

您可以在任何地方運行生產者應用程序,包括在 OpenShift 集群上。我將演示如何在本地開發環境中運行生產者。

首先,在 shell 中定義以下環境變量。將<>尖括號中的文本替換為您在前幾節中找到的值:

# Used to authenticate against the registry and kafka cluster
export CLIENT_ID=<your-client-id>
export CLIENT_SECRET=<your-client-secret>

# Used to connect to and authenticate against the service registry
export OAUTH_SERVER_URL=https://sso.redhat.com/auth
export REGISTRY_URL=<core-service-registry-url>

# Used to connect to and authenticate against the kafka cluster
export BOOTSTRAP_SERVER=<kafka-bootstrap-url>
export OAUTH_TOKEN_ENDPOINT_URI=https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token

 

定義這些值後,您可以使用以下命令在同一 shell 中啟動生產者應用程序:

$ mvn quarkus:dev -f ./producer/pom.xml -Dquarkus-profile=prod

Quarkus 應用程序現在正在運行,並在http://localhost:8080/上公開了一個 HTTP 服務器。使用以下命令發送一個 POST 請求,該請求創建一個報價並將其發送到quote-requestsKafka 主題:

$ curl -X POST http://localhost:8080/quotes/request

您應該收到 JSON 格式的響應,其中包含唯一的報價id和 random price

在 Service Registry 中查看報價模式

當您啟動生產者應用程序並向/quotes/request端點發出請求時,生產者準備好將數據發送到您的 Kafka 主題。在發送數據之前,生產者檢查 Quote Avro 模式在 OpenShift Service Registry 中是否可用。如果未找到 Quote 模式,則生產者將模式發佈到註冊表。然後,生產者使用模式序列化傳出數據,並將註冊的模式 ID 包含在消息值中。

下游消費者應用程序可以使用在消息負載中找到的模式 ID 從註冊表中獲取必要的模式。消費者應用程序然後可以使用模式來驗證和反序列化傳入的消息。

要確認 Avro 模式已發佈到 OpenShift Service Registry:

  1. 轉到您的OpenShift Service Registry Instances列表。
  2. 選擇您的生產者應用程序使用的實例。
  3. 選擇工件選項卡。

您應該看到 Quote 模式,如圖 4 所示。

Quote Avro 模式列在 OpenShift 服務註冊表中。

圖 4:OpenShift 服務註冊表中列出的 Quote Avro 模式。

在列表中選擇 Quote 模式並查看Content選項卡。使用Format按鈕提高 JSON 的易讀性,並確認它與Quote.avsc生產者應用程序代碼庫中的文件匹配。

在 Service Registry 中使用消息

您在本練習中克隆的存儲庫包含一個使用者應用程序。此消費者應用程序使用與生產者相同的環境變量進行配置,並從quote-requests主題中讀取消息。因為生產者和消費者使用 OpenShift 服務註冊表,所以消費者可以獲取必要的 Avro 模式來驗證和反序列化傳入的報價請求。

同時運行生產者和消費者。使用 cURL 在http://localhost:8080/quotes打開與服務器發送事件 (SSE) 端點的連接,然後使用另一個 HTTP 客戶端 POST 到http://localhost:8080/quotes/request。消費者應正確反序列化和處理quote-requests主題中的項目,並將處理後的報價放入quotes主題中,之後 SSE 端點應顯示項目,如圖 5 所示。

cURL 命令顯示消費者在 SSE 端點收到的反序列化的 JSON 格式數據。

圖 5:消費者在 SSE 端點接收並由 cURL 命令顯示的反序列化 JSON 格式數據。

強制執行架構兼容性規則

OpenShift Service Registry 支持各種模式兼容性規則,以防止發布可能導致與下游應用程序不兼容的模式更改(即破壞性更改)。您可以在服務文檔中閱讀有關兼容性規則的更多信息。要啟用此強制執行:

  1. 在console.redhat.com/beta/application-services/service-registry打開 Service Registry UI 。
  2. 選擇您的實例並查看報價架構。
  3. Validity Rule設置為Full,將Compatibility Rule設置為Backward(參見圖 6)。
  4. 單擊上傳新版本按鈕。
  5. 粘貼以下 Avro 架構並單擊Upload
{
  "namespace": "org.acme.kafka.quarkus",
  "type": "record",
  "name": "Quote",
  "fields": [
    {
      "name": "id",
      "type": "string"
    },
    {
      "name": "price",
      "type": "int"
    },
    {
      "name": "notes",
      "type": "string"
    }
  ]
}

 

圖 6 在控制台中顯示了這些更新。

可以在 OpenShift Service Registry UI 中設置兼容性規則。

圖 6:使用 OpenShift Service Registry UI 實施模式兼容性規則。

應顯示 Invalid Content 錯誤,因為此新模式通過添加新的必填字段違反了向後兼容性規則如果啟用了向後兼容性,新字段必須是可選的。如錯誤消息所示,需要新模式來為所有未來的演進提供向後兼容的模式。

結論

恭喜——在本文中,您學會瞭如何:

  1. 使用 OpenShift 服務註冊表。
  2. 將 OpenShift Streams 用於 Apache Kafka。
  3. 創建 Avro 模式。
  4. 將使用 Avro 模式的 Java 應用程序與這兩種服務集成。
  5. 管理模式演變並應用規則以防止下游消費者的破壞性更改。

註冊本文中描述的服務,並在評論中告訴我們您的體驗。

鏈接:https ://developers.redhat.com/articles/2021/10/11/get-started-openshift-service-registry#sumption_messages_in_service_registry

#openshift

Openshift Vs Kubernetes: Difference Between Openshift & Kubernetes

OpenShift and Kubernetes are based on containerization. It can be considered as bundling of different applications for effective development, management, and deployment across different infrastructures. It enables scalability and offers more efficient application development. More than 75% of Businesses are expected to leverage containerization by 2022.

Source

This article is about the two commonly used platforms: OpenShift and Kubernetes. Let’s have a look at their features and differences.

What Is Kubernetes?

Kubernetes is an open-source container orchestration project that helps users manage clustered groups of hosts running Linux containers. It is a portable containerization system, helping developers in service management. Some of the features are automatic application deployment, operations, scaling, container balancing, self-monitoring, etc.

#full stack development #comparison #difference between #kubernetes #kubernetes vs openshift #openshift

Micheal  Block

Micheal Block

1601308800

Deploying to RedHat OpenShift

A quick walk-through on how to use Red Hat OpenShift to create and deploy a container image from a git project that contains a simple mood board REST service, deploy a redis container that acts as a backing service, and test.

The source code lives at https://github.com/stehrn/mood-board.

Sign up to OpenShift for free here to get:

  • 2GiB memory for your applications
  • 2GiB persistent storage for your applications
  • 60-day duration

#redhat-openshift #openshift #kubernetes #java #redis

加藤  七夏

加藤 七夏

1658215022

OpenShift 服務上下文如何簡化客戶端連接

Red Hat OpenShift 應用程序服務rhoas的命令行界面 (CLI)的最新版本添加了一個強大而靈活的功能,稱為服務上下文,它可以比以往更輕鬆地將客戶端連接到您的 OpenShift 應用程序服務實例。本文說明了這一新功能,並展示了它如何加速基於流的應用程序的開發工作流程。

服務上下文促進客戶端連接

Red Hat OpenShift 應用程序服務,例如Red Hat OpenShift Streams for Apache KafkaRed Hat OpenShift Service Registry,是一種託管雲服務,可為在混合雲環境中構建、部署和擴展實時應用程序提供簡化的開發人員體驗。

OpenShift 應用程序服務 CLI 是用於管理應用程序服務的豐富命令行界面。借助新的服務上下文功能,您可以使用 CLI 為特定用例、項目或環境定義服務實例集,如圖 1 所示。定義上下文後,單個命令即可生成所需的連接配置信息通過客戶端應用程序。

上下文表示專用於特定目的的服務集合。

圖 1:上下文表示專用於特定目的的服務集合。

因此,服務上下文使您能夠在定義的服務實例集之間輕鬆切換,並為這些實例快速可靠地生成連接配置。與需要您為不同語言的獨立服務實例和應用程序創建單獨的配置文件的耗時且容易出錯的工作流相比,此過程顯著改進。

本文展示了服務上下文在哪些方面表現出色,以及為什麼我們很高興推出此功能。

首先,我們將介紹一個實際示例,該示例使用服務上下文將本地客戶端應用程序連接到 OpenShift 應用程序服務中的某些實例。然後我們將了解如何在基於 OpenShift 的應用程序中使用上下文,以及如何與其他團隊成員共享上下文。

將 Quarkus 應用程序連接到 OpenShift 應用程序服務

此示例使用服務上下文將示例Quarkus應用程序連接到 OpenShift 應用程序服務中的一些 Kafka 和 Service Registry 實例。Quarkus 應用程序生成一個引號流(實際上是隨機生成的字符串)並將它們顯示在網頁上。

一、打造全新的服務環境:

$ rhoas context create --name quotes-dev

您剛剛創建的上下文成為當前上下文。您可以創建多個上下文,在每個上下文中放置不同的服務,並為不同的開發人員提供上下文以使他們能夠訪問一組服務。

接下來,在當前上下文中創建一些 Kafka 和 Service Registry 實例:

$ rhoas kafka create --name example-kafka-instance --wait
$ rhoas service-registry create --name example-registry-instance

新的 Kafka 和 Service Registry 實例會自動添加到當前上下文中。您還可以使用context set-kafkacontext set-registry CLI 命令將現有的 Kafka 和 Service Registry 實例添加到當前上下文。

現在克隆一個示例 Quarkus 應用程序以在本地運行:

$ git clone https://github.com/redhat-developer/app-services-guides.git
$ cd app-services-guides/code-examples/quarkus-service-registry-quickstart/

示例 Quarkus 應用程序有兩個組件:生產者和消費者。生產者為 Kafka 主題生成報價消息流。消費者組件使用這些消息並在網頁上顯示它們的字符串。

Quarkus 應用程序需要quotes在您的 Kafka 實例中調用的 Kafka 主題。創建主題如下:

$ rhoas kafka topic create --name quotes

您已經為 Kafka 和 Service Registry 實例創建了一個上下文,因此您可以通過generate-config 命令生成將 Quarkus 應用程序連接到這些實例所需的配置信息:

$ rhoas generate-config --type env --output-file ./producer/.env

所有rhoas命令都針對當前上下文中的所有服務實例執行,因此您無需在上一個命令中顯式指定任何實例。這種廣泛的覆蓋範圍是服務環境的一個重要特徵。該功能使您能夠靈活地在大量服務實例之間快速無縫地切換,並針對它們運行 CLI 命令。

Quarkus 應用程序要求您的上下文的連接配置信息對生產者和消費者都可用。您之前在生產者目錄中生成了配置,因此您可以簡單地將相同的.env文件複製到消費者目錄中:

$ cp ./producer/.env ./consumer/.env 

對於您定義的上下文,.env文件的內容應如下所示:

## Generated by rhoas cli

## Kafka Configuration
KAFKA_HOST=test-insta-ca---q---mrrjobj---a.bf2.kafka.rhcloud.com:443

## Service Registry Configuration
SERVICE_REGISTRY_URL=https://bu98.serviceregistry.rhcloud.com/t/cc8a243a-feed-4a4c-9394-5a35ce83cca5
SERVICE_REGISTRY_CORE_PATH=/apis/registry/v2
SERVICE_REGISTRY_COMPAT_PATH=/apis/ccompat/v6

## Authentication Configuration
RHOAS_CLIENT_ID=srvc-acct-45038cc5-0eb1-496f-a678-24ca7ed0a7bd
RHOAS_CLIENT_SECRET=001a40b1-9a63-4c70-beda-3447b64a7783
RHOAS_OAUTH_TOKEN_URL=https://identity.api.openshift.com/auth/realms/rhoas/protocol/openid-connect/token

generate-config命令創建了一個服務帳戶(在環境變量 name 下RHOAS_CLIENT_ID)以在您的上下文中使用 Kafka 和 Service Registry 實例對客戶端應用程序進行身份驗證。要使服務帳戶能夠使用這些實例,您需要授予服務帳戶對實例的訪問權限:

$ rhoas kafka acl grant-access --producer --consumer --service-account srvc-acct-45038cc5-0eb1-496f-a678-24ca7ed0a7bd --topic quotes --group all
$ rhoas service-registry role add --role manager --service-account srvc-acct-45038cc5-0eb1-496f-a678-24ca7ed0a7bd 

您之前使該.env文件對 Quarkus 應用程序的生產者和消費者組件都可用。現在使用Apache Maven運行生產者組件:

$ cd producer
$ mvn quarkus:dev

producer組件開始為quotesKafka 實例中的專用主題生成報價消息。

quotes-valueQuarkus 應用程序還在Service Registry 實例中創建了一個 ID 為的模式工件。生產者使用模式工件來驗證表示報價的每條消息是否符合定義的結構。要查看 Quarkus 應用程序創建的架構工件的內容,請運行以下命令:

$ rhoas service-registry artifact get --artifact-id quotes-value

輸出是:

{
  "type": "record",
  "name": "Quote",
  "namespace": "org.acme.kafka.quarkus",
  "fields": [
    {
      "name": "id",
      "type": {
        "type": "string",
        "avro.java.string": "String"
      }
    },
    {
      "name": "price",
      "type": "int"
    }
  ]
}

接下來,在生產者仍在運行的情況下,使用 Apache Maven 運行消費者組件:

$ cd consumer
$ mvn quarkus:dev

消費者組件使用報價流並將它們顯示在您的本地網頁上http://localhost:8080/quotes.html。消費者組件還使用quotes-value模式工件來驗證消息是否符合模式中定義的結構。

圖 2 顯示了網頁上顯示的輸出示例。

此示例表明,在您定義上下文後,將客戶端應用程序連接到 OpenShift 應用程序服務就像為連接信息生成單個文件並將此文件複製到應用程序一樣簡單。

在這篇博文的最後部分,我們將簡要介紹另外兩個用例:使用服務上下文連接Red Hat OpenShift中的應用程序,以及與其他團隊成員共享服務上下文。

使用服務上下文連接基於 OpenShift 的應用程序

在前面的示例中,您生成了一個連接配置作為一組環境變量,這對於在本地運行的客戶端應用程序來說很方便。但是,如果您在 OpenShift 上運行基於容器的應用程序怎麼辦?好吧,服務上下文也使這變得容易。在這種情況下,您可以直接將連接配置信息生成為 OpenShift 機密文件:

$ rhoas generate-config --type secret --output-file ./rhoas-services-secret.yaml

生成密鑰後,您可以使用以下方法安全地存儲它:

您可以使用如下命令將密鑰應用於 OpenShift 項目:

$ oc apply -f ./rhoas-services-secret.yaml

將密鑰應用到 OpenShift 項目後,您可以從各種資源中引用密鑰,包括 OpenShift 應用程序模板、Source-to-Image (S2I) 構建、Helm 圖表和服務綁定配置。

共享服務上下文

要與其他團隊成員共享上下文,您只需要共享上下文的配置文件。例如,您可以將文件推送到本節所述的共享 GitHub 存儲庫。

不要將上下文的配置文件與.env您在本文前面為連接信息生成的環境變量文件混淆。相反,上下文文件列出了上下文中的服務實例。該文件包含 JSON 並存儲在本地計算機上。要獲取上下文文件的路徑,請運行以下命令:

$ rhoas context status

獲得文件路徑後,可以將其複製到本地 Git 存儲庫等位置。Linux 的示例如下:

$ cp <path-to-context-file> ./profiles.json

要與其他開發人員共享服務上下文,請將文件提交並推送到共享工作區域,例如團隊的 Git 存儲庫。甚至將上下文文件推送到公共存儲庫也是安全的,因為這些文件僅包含服務實例的標識符。

現在,假設另一個團隊成員想要使用共享上下文。當該團隊成員擁有上下文文件時(例如,他們從共享存儲庫中獲取它),他們必須定義一個名為RHOAS_CONTEXT指向上下文文件的環境變量。Linux 的示例如下:

$ export RHOAS_CONTEXT=./profiles.json

服務上下文:快速、安全和可擴展

本文展示了 CLI 的新服務上下文功能如何極大地簡化將客戶端應用程序連接到 Red Hat OpenShift 應用程序服務中的服務實例集的工作。這一強大而靈活的功能可以自動執行您之前在容易出錯的手動配置任務上花費的工作,並使您的團隊能夠專注於其最擅長的事情:開發出色的基於流的應用程序。

鏈接:https ://developers.redhat.com/articles/2022/07/18/simplify-client-connection-configurations-service-contexts#sharing_service_contexts

#openshift #redhat 

Vinnie  Erdman

Vinnie Erdman

1654020300

How to Get Started with OpenShift

In this video, you'll learn about:
- What OpenShift is
- How to get started with OpenShift for FREE
- How to deploy your first app

0:00   ⏩  Intro
0:27   ⏩  OpenShift Sandbox Environment
1:11   ⏩  First Look At The Portal
1:32   ⏩  Administrator And Developer Portal
2:13   ⏩  Cluster Manager Portal
2:45   ⏩  Deploying a Kubernetes Deployment Spec
4:03   ⏩  Deploying a Kubernetes Service Spec
5:23   ⏩  Wrap-Up

#devops  #openshift  #kubernetes