使用 Apache Camel 和 Quarkus 的微服务(五)

【squids.cn】 全网zui低价RDS,免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等

在本系列的第三部分中,我们了解了如何在 Minikube 中部署基于 Quarkus/Camel 的微服务,这是最常用的 Kubernetes 本地实现之一。虽然这样的本地 Kubernetes 实现对于测试目的非常实用,但其单节点功能并不能满足实际生产环境的要求。因此,为了在类似生产的环境中检查我们的微服务行为,我们需要多节点 Kubernetes 实现。最常见的一种是 OpenShift。

什么是 OpenShift?

OpenShift 是一个基于 Kubernetes 的开源企业级容器应用程序开发、部署和管理平台。它由红帽开发,作为 Kubernetes 集群之上的组件层,既可以作为商业产品,也可以作为免费平台,或者既可以作为本地基础设施,也可以作为云基础设施。下图描绘了这种架构。

与任何 Kubernetes 实施一样,OpenShift 也有其复杂性,将其安装为独立的本地平台并非易事。将其用作 AWS、Azure 或 GCP 等专用云上的托管平台是一种更实用的方法,至少在开始时是这样,但它需要一定的企业组织。

例如,ROSA(Red Hat OpenShift Service on AWS)是一种商业解决方案,有助于快速创建和简单管理完整的 Kubernetes 基础设施,但它并不是一个真正适合开发人员的环境,允许其快速开发、部署和管理。测试云原生服务。

对于后面的用例,红帽提供了 OpenShift Developer's Sandbox,这是一个开发环境,无需任何繁重的安装或订阅过程即可立即访问 OpenShift,开发人员甚至可以在开始实际项目之前就开始练习他们的技能和学习周期。这项完全免费的服务不需要任何信用卡,只需要一个 Red Hat 帐户,在共享的多租户 Kubernetes 集群中提供私有 OpenShift 环境,该集群预先配置了一组开发人员工具,例如 Java、Node .js、Python、Go、C#,包括 Helm 图表目录、s2i 构建工具和 OpenShift Dev Spaces。

在这篇文章中,我们将使用 OpenShift Developer's Sandbox 来部署 Quarkus/Camel 微服务。

在 OpenShift 上部署

为了在 OpenShift 上部署,Quarkus 应用程序需要包含 OpenShift 扩展。当然,这可以使用 Qurakus CLI 来完成,但考虑到我们的项目是一个多模块 Maven 项目,一种更实用的方法是直接在主 POM 中包含以下依赖项:

<dependency>  <groupId>io.quarkus</groupId>  <artifactId>quarkus-openshift</artifactId></dependency><dependency>  <groupId>io.quarkus</groupId>  <artifactId>quarkus-container-image-openshift</artifactId></dependency>

这样,所有子模块都将继承这些依赖项。

OpenShift应该与普通的Kubernetes资源一起工作;因此,我们先前的方案,在我们将微服务部署到Minikube上时,也应该在这里适用。毕竟,Minikube和OpenShift都是同一个事实上的标准:Kubernetes的实现。

如果我们回顾本系列的第三部分,我们基于Jib的构建和部署过程生成了普通的Kubernetes清单文件(kubernetes.yaml)以及Minikube的文件(minikube.yaml)。然后,我们可以选择使用普通生成的Kubernetes资源还是更具体的Minikube资源,我们更喜欢后者。尽管专为Minikube定制的清单文件只能在Minikube上部署,但普通的Kubernetes文件应该在Minikube上以及任何其他Kubernetes实现(如OpenShift)上都能以相同的方式工作。

然而,实际上,情况稍微复杂一些,据我所知,我未能成功地将由Jib生成的普通Kubernetes清单部署到OpenShift上。我需要做的是重命名大多数其名称满足quarkus.kubernetes.模式的属性为quarkus.openshift.。此外,某些普通的Kubernetes属性,例如quarkus.kubernetes.ingress.expose,对于OpenShift有一个完全不同的名称。在这种情况下是quarkus.openshift.route.expose。

但除了这些几乎是美观的改变外,一切都与我们第三部分的前一个方案保持在同一个位置。现在,为了在OpenShift Developer's Sandbox上部署我们的微服务,请按照以下步骤操作。

登录 OpenShift 开发者沙盒

以下是登录 OpenShift Developer Sandbox 所需的步骤:

  1. 启动您首选的浏览器并访问 OpenShift Developer's Sandbox站点

  2. 单击Login右上角的链接(您需要已经注册了 OpenShift Developer Sandbox)

  3. 单击Start your sandbox for free屏幕中央标记的红色按钮

  4. 在右上角,展开您的用户名并单击Copy login command按钮

  5. 在标有标签的新对话框中Log in with ...单击DevSandbox链接

  6. 将显示一个新页面,其中带有标记为 的链接Display Token。单击此链接。

  7. 复制并执行显示的oc命令,例如:

$ oc login --token=... --server=https://api.sandbox-m3.1530.p1.openshiftapps.com:6443

从 GitHub 克隆项目

以下是克隆项目的 GitHub 存储库所需的步骤:​​​​​​​

$ git clone https://github.com/nicolasduminil/aws-camelk.git$ cd aws-camelk$ git checkout openshift

创建 OpenShift Secret

为了连接到 AWS 资源,例如 S3 存储桶和 SQS 队列,我们需要提供 AWS 凭证。这些凭证是访问密钥 ID 和秘密访问密钥。有多种方法可以提供这些凭据,但在这里,我们选择使用 Kubernetes 密钥。以下是所需的步骤:

首先,将您的访问密钥 ID 和秘密访问密钥编码为 Base64,如下所示:​​​​​​​

$ echo -n <your AWS access key ID> | base64$ echo -n <your AWS secret access key> | base64

编辑文件aws-secret.yaml并修改以下行,以便替换...为 Base64 编码值:​​​​​​​

AWS_ACCESS_KEY_ID: ...AWS_SECRET_ACCESS_KEY: ...

创建包含 AWS 访问密钥 ID 和秘密访问密钥的 OpenShift 密钥:

$ kubectl apply -f aws-secret.yaml

启动微服务

为了启动微服务,请运行以下脚本:

$ ./start-ms.sh

该脚本与我们之前第三部分中的脚本相同:​​​​​​​

#!/bin/sh./delete-all-buckets.sh./create-queue.shsleep 10mvn -DskipTests -Dquarkus.kubernetes.deploy=true clean installsleep 3./copy-xml-file.sh

此处用于触发 Camel 文件轮询器的 copy-xml-file.sh 脚本已稍作修改:


#!/bin/sh
aws_camel_file_pod=$(oc get pods | grep aws-camel-file | grep -wv -e build -e deploy | awk '{print $1}')
cat aws-camelk-model/src/main/resources/xml/money-transfers.xml | oc exec -i $aws_camel_file_pod -- sh -c "cat > /tmp/input/money-transfers.xml"

在这里,我们kubectl用命令替换了oc命令。此外,鉴于 OpenShift 具有不仅为微服务而且为构建和部署命令创建 pod 的特殊性,我们需要在正在运行的 pod 列表中过滤掉出现字符串 和 的buildpod deploy。

运行此脚本可能需要一些时间。完成后,确保所有必需的 OpenShift 控制器正在运行:


$ oc get is
NAME              IMAGE REPOSITORY                                                                                                      TAGS                                                       UPDATED
aws-camel-file    default-route-openshift-image-registry.apps.sandbox-m3.1530.p1.openshiftapps.com/nicolasduminil-dev/aws-camel-file    1.0.0-SNAPSHOT                                             17 minutes ago
aws-camel-jaxrs   default-route-openshift-image-registry.apps.sandbox-m3.1530.p1.openshiftapps.com/nicolasduminil-dev/aws-camel-jaxrs   1.0.0-SNAPSHOT                                             9 minutes ago
aws-camel-s3      default-route-openshift-image-registry.apps.sandbox-m3.1530.p1.openshiftapps.com/nicolasduminil-dev/aws-camel-s3      1.0.0-SNAPSHOT                                             16 minutes ago
aws-camel-sqs     default-route-openshift-image-registry.apps.sandbox-m3.1530.p1.openshiftapps.com/nicolasduminil-dev/aws-camel-sqs     1.0.0-SNAPSHOT                                             13 minutes ago
openjdk-11        default-route-openshift-image-registry.apps.sandbox-m3.1530.p1.openshiftapps.com/nicolasduminil-dev/openjdk-11        1.10,1.10-1,1.10-1-source,1.10-1.1634738701 + 46 more...   18 minutes ago
$ oc get pods
NAME                       READY   STATUS      RESTARTS   AGE
aws-camel-file-1-build     0/1     Completed   0          19m
aws-camel-file-1-d72w5     1/1     Running     0          18m
aws-camel-file-1-deploy    0/1     Completed   0          18m
aws-camel-jaxrs-1-build    0/1     Completed   0          14m
aws-camel-jaxrs-1-deploy   0/1     Completed   0          10m
aws-camel-jaxrs-1-pkf6n    1/1     Running     0          10m
aws-camel-s3-1-76sqz       1/1     Running     0          17m
aws-camel-s3-1-build       0/1     Completed   0          18m
aws-camel-s3-1-deploy      0/1     Completed   0          17m
aws-camel-sqs-1-build      0/1     Completed   0          17m
aws-camel-sqs-1-deploy     0/1     Completed   0          14m
aws-camel-sqs-1-jlgkp      1/1     Running     0          14m
oc get svc
NAME                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                               AGE
aws-camel-jaxrs     ClusterIP   172.30.192.74   <none>        80/TCP                                11m
modelmesh-serving   ClusterIP   None            <none>        8033/TCP,8008/TCP,8443/TCP,2112/TCP   18h

如上面的清单所示,所有必需的图像流都已创建,并且所有 Pod 都已完成或正在运行。已完成的 Pod 是与构建和部署操作相关的 Pod。正在运行的服务与微服务相关联。

只有一项服务正在运行:aws-camel-jaxrs。该服务可以aws-camel-jaxrs通过公开路由来与运行微服务的 Pod 进行通信。这是自动完成的,对财产有效quarkus.openshift.route.expose=true。aws-camel-sqs事实上,微服务需要与之通信aws-camel-sqs,因此需要知道通往它的路径。要获取该路由,您可以按照以下步骤操作:


$ oc get routes
NAME              HOST/PORT                                                                      PATH   SERVICES          PORT   TERMINATION   WILDCARD
aws-camel-jaxrs   aws-camel-jaxrs-nicolasduminil-dev.apps.sandbox-m3.1530.p1.openshiftapps.com          aws-camel-jaxrs   http                 None

现在打开application.properties与aws-camel-sqs微服务关联的文件并修改属性,rest-uri如下所示:

rest-uri=aws-camel-jaxrs-nicolasduminil-dev.apps.sandbox-m3.1530.p1.openshiftapps.com/xfer

在这里,您必须将命名空间替换nicolasduminil-dev为对您的情况有意义的值。现在,您需要停止微服务并再次启动它们:​​​​​​​

$ ./kill-ms.sh...$ ./start-ms.sh...

您的微服务现在应该按预期运行,您可以使用以下命令检查日志文件:

$ oc logs aws-camel-jaxrs-1-pkf6n

正如您所看到的,为了获得服务的路由aws-camel-jaxrs,我们需要启动、停止和再次启动我们的微服务。这个解决方案远非优雅,但我没有找到任何其他解决方案,我依靠建议的读者来帮助我改进它。可能可以使用 OpenShift Java 客户端在 Java 代码中执行与命令oc get routes执行的操作相同的操作,但我没有找到具体方法,而且文档也不太明确。

我想对无法在这里提供完整的解决方案表示歉意,但尽管如此,还是享受它吧!

作者:Nicolas Duminil

更多内容请关注公号【云原生数据库

squids.cn,云数据库RDS,迁移工具DBMotion,云备份DBTwin等数据库生态工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/103106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣:130. 被围绕的区域(Python3)

题目&#xff1a; 给你一个 m x n 的矩阵 board &#xff0c;由若干字符 X 和 O &#xff0c;找到所有被 X 围绕的区域&#xff0c;并将这些区域里所有的 O 用 X 填充。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;力扣&#xff08;LeetCode&#…

SpringBoot的配置文件——.yml和.properties

目录 1. Spring Boot 配置文件的使用场景 2. 配置文件的两种格式 2.0 特殊说明&#xff1a; 2.1 .properties 2.1.1 格式 2.2.2 缺陷 2.2.3 解决中文乱码的问题 2.2 .yml 2.2.3 格式 配置数据库连接 注意转义字符 ​编辑 ​编辑 配置null 配置对象 从.yml读取文件举例 Stud…

设计模式 - 行为型模式考点篇:迭代器模式(概述 | 案例实现 | 优缺点 | 使用场景)

目录 一、行为型模式 一句话概括行为型模式 1.1、迭代器模式 1.1.1、概述 1.1.2、案例实现 1.1.3、优缺点 1.1.4、使用场景 一、行为型模式 一句话概括行为型模式 行为型模式&#xff1a;类或对象间如何交互、如何划分职责&#xff0c;从而更好的完成任务. 1.1、迭代器…

Vuex使用方式及异步问题处理

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《Spring与Mybatis集成整合》《Vue.js使用》 ⛺️ 生活的理想&#xff0c;为了不断更新自己 ! 目录 1.Vuex简介&#xff1a; 2.vuex获取值 2.1安装 2.2.菜单栏 2.3.模块 2.4使用 3.改…

vue项目npm intall时发生版本冲突的解决办法

在日常使用命令npm install / npm install XX下载依赖的操作中&#xff0c;我经常会遇到无法解析依赖树的问题&#xff08;依赖冲突&#xff09; 当遇到这种情况的时候&#xff0c;可以通过以下命令完成依赖安装&#xff1a; npm install --legacy-peer-deps npm install xxx…

C# OpenVINO 人脸识别

效果 耗时 Preprocess: 1.41ms Infer: 4.38ms Postprocess: 0.03ms Total: 5.82ms 项目 代码 using OpenCvSharp; using Sdcb.OpenVINO; using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.Text; using Syste…

关于网络协议的若干问题(三)

1、当发送的报文出问题的时候&#xff0c;会发送一个 ICMP 的差错报文来报告错误&#xff0c;但是如果 ICMP 的差错报文也出问题了呢&#xff1f; 答&#xff1a;不会导致产生 ICMP 差错报文的有&#xff1a; ICMP 差错报文&#xff08;ICMP 查询报文可能会产生 ICMP 差错报文…

如何在Firefox中配置HTTP?

在浏览器中配置HTTP是一个常见的需求&#xff0c;它可以让我们轻松访问需要的网站或保护个人隐私。本文将为您详细介绍如何在Firefox浏览器中配置HTTP应用&#xff0c;帮助您实现无缝的HTTP体验。无论您是初次接触HTTP还是有一定经验的用户&#xff0c;本文都能为您提供实用的操…

玩转ChatGPT:图像识别(vol. 1)

一、写在前面 来了来了&#xff0c;终于给我的账号开放图像识别功能了&#xff0c;话不多说&#xff0c;直接开测&#xff01;&#xff01;&#xff01; 二、开始尝鲜 &#xff08;1&#xff09;咒语&#xff1a; GPT回复&#xff1a; 这幅图显示了从2005年1月到2012年12月的…

pdf怎么合并在一起?

pdf怎么合并在一起&#xff1f;对于pdf合并这个问题&#xff0c;有的小伙伴想很简单&#xff0c;只需要将文件直接复制再其中的一个后面不就完事了吗。其实不然&#xff0c;因为我们如果要是需要将很多文件进行合并的话&#xff0c;就会产生很多问题的。总之&#xff0c;在现在…

【面试经典150 | 哈希表】有效的字母异位词

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;排序方法二&#xff1a;哈希数组 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于…

什么台灯最好学生晚上用?开学适合孩子学习的台灯

作为学龄期儿童的家长&#xff0c;最担心的就是孩子长时间学习影响视力健康。无论是上网课、写作业、玩桌游还是陪伴孩子读绘本&#xff0c;都需要一个足够明亮的照明环境&#xff0c;因此选购一款为孩子视力发展保驾护航的台灯非常重要。推荐五款适合孩子学习的台灯。 1. 书客…

pytorch的基本运算,是不是共享了内存,有没有维度变化

可以把PyTorch简单看成是Python的深度学习第三方库&#xff0c;在PyTorch中定义了适用于深度学习的基本数据结构——张量&#xff0c;以及张量的各类计算。其实也就相当于NumPy中定义的Array和对应的科学计算方法&#xff0c;正是这些基本数据类型和对应的方法函数&#xff0c;…

AWS SAP-C02教程2--存储资源

存储资源在架构设计中是一个少不了的环节,而在AWS中有不同类型的存储资源,对应会有不同用途不同价格,SAP考试中考察各种存储是少不了,以下是涉及到的存储 目录 1 非结构化存储1.1 EBS(块存储)1.1.1 基本限制1.1.2 类型1.1.3 RAID 配置选项1.1.4 Snapshot1.2 Local Insta…

python opencv 深度学习 指纹识别算法实现 计算机竞赛

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; python opencv 深度学习 指纹识别算法实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;4分创新点&#xff1a;4分 该项目较为新颖…

ABAP 采购组 条目 Z001 不存在T161内-请检查输入

背景&#xff1a;在ALV报表更改PR采购组 做法&#xff1a;ALV报表取出PR相关数据&#xff0c;直接将采购组列设置为可编辑&#xff0c;然后设置按钮更改逻辑。 操作&#xff1a;将采购组值更新&#xff08;从原来500改为600&#xff09;&#xff0c;然后点更改功能按钮&#xf…

Apache Ranger:(一)安装部署

1.Ranger简介 Apache Ranger提供一个集中式安全管理框架, 并解决授权和审计。它可以对Hadoop生态的组件如HDFS、Yarn、Hive、Hbase等进行细粒度的数据访问控制。通过操作Ranger控制台,管理员可以轻松的通过配置策略来控制用户访问权限。 说白了就是管理大多数框架的授权问题。 …

JVM 入门

文章目录 JVMJVM 垮平台执行其他语言的代码JDK、JRE、JVM各种 Java 虚拟机查看我们本地的虚拟机版本HotSpot 的整体架构 JVM JVM &#xff08;Java Virtual Machine&#xff09;&#xff0c;Java 虚拟机&#xff0c;我们的 Java 代码需编译为 .class 字节码文件&#xff0c;经…

Excel 快速分析

文章目录 格式化图表汇总计数 表超级表 迷你图 快捷键: Ctrl Q 先选中数据, 再按快捷键或快速分析按钮. 格式化 查看规则: 前提是先在表中添加某种规则, 再全选该表, 这样在查看规则时才会显示出这个规则. 图表 汇总 计数 表 超级表 迷你图

经典面试题第十更---instanceof与typeof

前言&#xff1a; &#x1f921; 作者简介&#xff1a;我是Morning&#xff0c;计算机的打工人&#xff0c;想要翻身做主人 &#x1f648; &#x1f648; &#x1f648; &#x1f3e0; 个人主页&#xff1a; Morning的主页 &#x1f4d5;系列专栏&#xff1a; 前端…