7

如何创建云无关的Java无服务器应用? - DZone

 1 year ago
source link: https://www.jdon.com/62734
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

如何创建云无关的Java无服务器应用? - DZone


在本文中,您将完成创建您的第一个可在任何云上运行的无服务器 Java 应用程序的步骤。
什么是无服务器?与名称相反,无服务器中仍然存在服务器,但您无需担心管理它们。您只需要部署容器,无服务器基础架构负责为您的应用程序扩展或缩减提供资源。
最好的部分是它会在有高需求时自动扩展,或者在没有需求时自动扩展至零。这将减少您在云上花费的金额。

将使用 Quarkus 创建一个简单的 Java 应用程序,该应用程序向 HTTP 请求返回问候消息并将其部署到 Knative。

为什么选择 Knative?一开始,无服务器应用程序通常由一小段代码组成,这些代码由云供应商(如 AWS Lambda)运行。在第一阶段,应用程序有一些限制,并且与供应商库紧密耦合。
Knative 使开发人员能够在 Kubernetes 集群上运行无服务器应用程序。这使您可以灵活地在任何云、本地甚至混合所有应用程序上运行您的应用程序。

无服务器应用程序需要快速启动:由于 serverless 的最大优势是按需扩展和缩减(甚至为零),因此 serverless 应用程序在扩展时需要快速启动,否则请求将被拒绝。
Quarkus 应用程序的最大特点之一是它们的超快速启动。
此外,Quarkus 是Kubernetes Native,这意味着可以轻松地将 Quarkus 应用程序部署到 Kubernetes,而无需了解底层 Kubernetes 框架的复杂性。

要求

  • 本地 Knative 安装。请参阅使用快速入门安装 Knative
    • 本文使用 minikube 作为本地 Kubernetes 集群
  • kn已安装 CLI。请参阅Knative CLI 工具
  • JDK 11+ 安装了适当配置的 JAVA_HOME
  • Apache Maven 3.8.1+
  • GraalVM(可选部署原生镜像)

创建 Quarkus 应用程序:可以从GitHub克隆

准备部署到 Knative:
添加所需的依赖项
将以下依赖项添加到pom.xml文件中:

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

配置应用程序以部署到 Knative:
将以下配置添加到src/main/resources/application.properties文件中:

quarkus.kubernetes.deployment-target=knative 
quarkus.container-image.group=dev.local/hbelmiro

注意:在quarkus.container-image.group属性中,替换hbelmiro为您的容器注册表用户名。

部署到 Knative
启动 Minikube 隧道
注意:仅当您使用 minikube 作为本地 Kubernetes 集群时,才需要执行此步骤。
在不同的终端窗口中,运行以下命令来启动 minikube 隧道:

minikube tunnel --profile knative

输出类似如下:

Status:    
    machine: knative
    pid: 223762
    route: 10.96.0.0/12 -> 192.168.49.2
    minikube: Running
    services: [kourier]
    errors: 
        minikube: no errors
        router: no errors
        loadbalancer emulator: no errors

配置容器 CLI 以使用 Minikube 内的容器引擎:

eval $(minikube -p knative docker-env)

运行以下命令将应用程序部署到 Knative:

mvn clean package -Dquarkus.kubernetes.deploy=true

您应该会看到类似于以下内容的输出:

[INFO] [io.quarkus.kubernetes.deployment.KubernetesDeployer] Deploying to knative server: https://192.168.49.2:8443/ in namespace: default.
<p class="indent">[INFO] [io.quarkus.kubernetes.deployment.KubernetesDeployer] Applied: Service knative-serving-quarkus-demo.
<p class="indent">[INFO] [io.quarkus.deployment.QuarkusAugmentor] Quarkus augmentation completed in 8952ms
<p class="indent">[INFO] ------------------------------------------------------------------------
<p class="indent">[INFO] BUILD SUCCESS
<p class="indent">[INFO] ------------------------------------------------------------------------

检查Knative部署的服务
运行以下命令来检查Knative部署的服务。

kn service list

你应该看到你的应用程序列在已部署的服务中,如下所示:

NAME                           URL                                                                   LATEST                               AGE   CONDITIONS   READY   REASON
knative-serving-quarkus-demo   http://knative-serving-quarkus-demo.default.10.106.207.219.sslip.io   knative-serving-quarkus-demo-00001   23s   3 OK / 3     True

向部署的应用程序发送请求
使用上述命令返回的URL,向部署的应用程序发送请求。

curl -X 'GET' 'http://knative-serving-quarkus-demo.default.10.106.207.219.sslip.io/hello' -H 'accept: text/plain' 。

你应该看到以下输出:

Hello from RESTEasy Reactive

完成!
Quarkus 和 Knative 让您可以自由地在本地或云中使用 Java 运行无服务器应用程序,无论供应商如何。您甚至可以将多个云供应商与您的本地基础设施混合使用。这种灵活性为您带来敏捷性并降低基础架构成本。

最后,完善:
可以创建应用程序的本机映像,以使其启动更快。为此,请使用以下命令部署您的应用程序:

mvn clean package -Pnative -Dquarkus.native.native-image-xmx=4096m -Dquarkus.native.remote-container-build=true -Dquarkus.kubernetes.deploy=true

 


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK