网站建设与服务技能实训,广州华茂建设工程有限公司 网站,手机网站预览,深圳画册设计排版【squids.cn】 全网zui低价RDS#xff0c;免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等
在本系列的第三部分中#xff0c;我们了解了如何在 Minikube 中部署基于 Quarkus/Camel 的微服务#xff0c;这是最常用的 Kubernetes 本地实现之一。虽然这样的本地…【squids.cn】 全网zui低价RDS免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等
在本系列的第三部分中我们了解了如何在 Minikube 中部署基于 Quarkus/Camel 的微服务这是最常用的 Kubernetes 本地实现之一。虽然这样的本地 Kubernetes 实现对于测试目的非常实用但其单节点功能并不能满足实际生产环境的要求。因此为了在类似生产的环境中检查我们的微服务行为我们需要多节点 Kubernetes 实现。最常见的一种是 OpenShift。
什么是 OpenShift
OpenShift 是一个基于 Kubernetes 的开源企业级容器应用程序开发、部署和管理平台。它由红帽开发作为 Kubernetes 集群之上的组件层既可以作为商业产品也可以作为免费平台或者既可以作为本地基础设施也可以作为云基础设施。下图描绘了这种架构。 与任何 Kubernetes 实施一样OpenShift 也有其复杂性将其安装为独立的本地平台并非易事。将其用作 AWS、Azure 或 GCP 等专用云上的托管平台是一种更实用的方法至少在开始时是这样但它需要一定的企业组织。
例如ROSARed Hat OpenShift Service on AWS是一种商业解决方案有助于快速创建和简单管理完整的 Kubernetes 基础设施但它并不是一个真正适合开发人员的环境允许其快速开发、部署和管理。测试云原生服务。
对于后面的用例红帽提供了 OpenShift Developers Sandbox这是一个开发环境无需任何繁重的安装或订阅过程即可立即访问 OpenShift开发人员甚至可以在开始实际项目之前就开始练习他们的技能和学习周期。这项完全免费的服务不需要任何信用卡只需要一个 Red Hat 帐户在共享的多租户 Kubernetes 集群中提供私有 OpenShift 环境该集群预先配置了一组开发人员工具例如 Java、Node .js、Python、Go、C#包括 Helm 图表目录、s2i 构建工具和 OpenShift Dev Spaces。
在这篇文章中我们将使用 OpenShift Developers Sandbox 来部署 Quarkus/Camel 微服务。
在 OpenShift 上部署
为了在 OpenShift 上部署Quarkus 应用程序需要包含 OpenShift 扩展。当然这可以使用 Qurakus CLI 来完成但考虑到我们的项目是一个多模块 Maven 项目一种更实用的方法是直接在主 POM 中包含以下依赖项
dependency groupIdio.quarkus/groupId artifactIdquarkus-openshift/artifactId/dependencydependency groupIdio.quarkus/groupId artifactIdquarkus-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 Developers Sandbox上部署我们的微服务请按照以下步骤操作。
登录 OpenShift 开发者沙盒
以下是登录 OpenShift Developer Sandbox 所需的步骤 启动您首选的浏览器并访问 OpenShift Developers Sandbox站点 单击Login右上角的链接您需要已经注册了 OpenShift Developer Sandbox 单击Start your sandbox for free屏幕中央标记的红色按钮 在右上角展开您的用户名并单击Copy login command按钮 在标有标签的新对话框中Log in with ...单击DevSandbox链接 将显示一个新页面其中带有标记为 的链接Display Token。单击此链接。 复制并执行显示的oc命令例如
$ oc login --token... --serverhttps://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.deploytrue 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.exposetrue。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-uriaws-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等数据库生态工具。