除了构建和运行 Serverless 函数之外,OpenFuntion 还支持构建和运行 Serverless 应用。因此,OpenFunction 用户可以不用局限在各语言的 functions-framework 内编写应用,并且可以采用自己喜欢的任何语言来编写应用,即使 OpenFunction 社区尚未提供 functions-framework 支持(如 Rust, kotlin 等)。

OpenFunction 有两种方式可以将应用源代码打包到容器镜像中:

️注意:你需要提前创建一个包含镜像仓库凭证的 Secret,并将该 Secret 添加到 imageCredentials 中,才能将构建好的镜像推送到镜像仓库。详情可参考文档中的前提条件部分。

使用 Dockerfile 构建并运行 Serverless 应用

如果你已经为你的应用创建了 Dockerfile(参考 Go 应用示例),可以通过一些的步骤来构建运行应用:

1️⃣ 创建 Go 语言 Serverless 应用示例

$ cat <<EOF | kubectl apply -f -
apiVersion: core.openfunction.io/v1beta1
kind: Function
metadata:
name: sample-go-app
spec:
version: "v1.0.0"
image: "openfunctiondev/sample-go-app:v1"
imageCredentials:
name: push-secret
#port: 8080 # default to 8080
build:
builder: openfunction/buildah:v1.23.1
srcRepo:
url: "https://github.com/OpenFunction/samples.git"
sourceSubPath: "apps/buildah/go"
revision: "main"
shipwright:
strategy:
name: buildah
kind: ClusterBuildStrategy
serving:
runtime: knative
template:
containers:
- name: function
imagePullPolicy: IfNotPresent
EOF

2️⃣ 查看应用状态

$ kubectl get functions.core.openfunction.io -w
NAME BUILDSTATE SERVINGSTATE BUILDER SERVING ADDRESS AGE
sample-go-app Succeeded Running builder-jgnzp serving-q6wdp http://sample-go-app.default.svc.cluster.local/ 22m

3️⃣ 访问应用

一旦 BUILDSTATE 变成 SucceededSERVINGSTATE 变成 Running,你就可以通过 ADDRESS 字段的地址访问这个 Go Serverless 应用。

$ kubectl run curl --image=radial/busyboxplus:curl -i --tty
curl http://sample-go-app.default.svc.cluster.local

Java Serverless 应用示例可以参考这里:https://github.com/OpenFunction/samples/tree/main/apps/buildah/java

无需 Dockerfile 构建并运行 Serverless 应用

如果你没有为应用创建 Dockerfile(参考 Java 应用示例),你可以通过以下的步骤直接使用 Cloud Native Buildpacks 来构建镜像(参考 Java 应用示例)。

1️⃣ 创建 Java 语言 Serverless 应用示例

cat <<EOF | kubectl apply -f -
apiVersion: core.openfunction.io/v1beta1
kind: Function
metadata:
name: sample-java-app-buildpacks
spec:
version: "v1.0.0"
image: "openfunction/sample-java-app-buildpacks:v1"
imageCredentials:
name: push-secret
port: 8080 # default to 8080
build:
builder: "cnbs/sample-builder:alpine"
srcRepo:
url: "https://github.com/buildpacks/samples.git"
sourceSubPath: "apps/java-maven"
revision: "main"
serving:
runtime: "knative" # default to knative
template:
containers:
- name: function
imagePullPolicy: IfNotPresent
EOF

2️⃣ 查看应用状态

$ kubectl get functions.core.openfunction.io -w
NAME BUILDSTATE SERVINGSTATE BUILDER SERVING ADDRESS AGE
sample-java-app-buildpacks Succeeded Running builder-jgnzp serving-q6wdp http://sample-java-app-buildpacks.default.svc.cluster.local/ 22m

3️⃣ 访问应用

一旦 BUILDSTATE 变成 SucceededSERVINGSTATE 变成 Running,你就可以通过 ADDRESS 字段的地址访问这个 JavaServerless 应用。

$ kubectl run curl --image=radial/busyboxplus:curl -i --tty
curl http://sample-java-app-buildpacks.default.svc.cluster.local
``
> 本文由博客一文多发平台 [OpenWrite](https://openwrite.cn?from=article_bottom) 发布!

在 OpenFunction 中运行 Serverless 应用的更多相关文章

  1. 在docker中运行ASP.NET Core Web API应用程序

    本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Cor ...

  2. 【DDD/CQRS/微服务架构案例】在Ubuntu 14.04.4 LTS中运行WeText项目的服务端

    在<WeText项目:一个基于.NET实现的DDD.CQRS与微服务架构的演示案例>文章中,我介绍了自己用Visual Studio 2015(C# 6.0 with .NET Frame ...

  3. Docker--在Docker中运行应用

    Docker--在Docker中运行应用 一个交互式的容器 既然在Docker提供的是一个容器,底层支撑着一个基本的操作系统环境,那我们就可以通过Docker进入到容器内部与系统进行交互. 据我理解: ...

  4. 尝试在你浏览器的Console(F12)中运行一下,你会发现页面被不同的颜色块高亮了(css调试中学到的js)

    现在到处都是JavaScript,每天都能知道点新东西.一旦你入了门,你总能从这里或是那里领悟到很多知识. 一旦我发现一些有意思的东西,我喜欢去感觉他们的源代码,看一看它是怎么办到的. 今天我想分享A ...

  5. 在Linux和Windows的Docker容器中运行ASP.NET Core

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott H ...

  6. 在Linux中运行Nancy应用程序

    最近在研究如何将.NET应用程序移植到非Windows操作系统中运行,逐渐会写一些文章出来.目前还没有太深的研究,所以这些文章大多主要是记录我的一些实验. 这篇文章记录了我如何利用NancyFx编写一 ...

  7. 在WildFly中运行多个standalone模式的实例

      WildFly作为一款优秀的EJB容器,其前身为JBoss AS.JBoss作为一款开源的应用服务器,被广泛的应用在各种项目当中.假设我们现在有这样一个项目,他是以standalone的模式运行在 ...

  8. .NET Core Web 应用部署到 Docker 中运行

    环境介绍 : 虚拟机:VirtualBox 5.1.6 系 统:Ubuntu 16.04.1 LTS 系统准备完成后可以使用 sudo apt-get udpate 和 sudo apt-get up ...

  9. Nodejs学习笔记(二)——Eclipse中运行调试Nodejs

    前篇<Nodejs学习笔记(一)——初识Nodejs>主要介绍了在搭建node环境过程中遇到的小问题以及搭建Eclipse开发Node环境的前提步骤.本篇主要介绍如何在Eclipse中运行 ...

  10. monkeyrunner之eclipse中运行monkeyrunner脚本之环境搭建(四)

    monkeyrunner脚本使用Python语法编写,但它实际上是通过Jython来解释执行. Jython是Python的Java实现,它将Python代码解释成Java虚拟机上的字节码并执行,这种 ...

随机推荐

  1. 【转载】 拒绝遗忘:高效的动态规划算法 —— “到底什么是动态规划”—— An intro to Algorithms: Dynamic Programming

    原文地址(英文): https://medium.freecodecamp.org/an-intro-to-algorithms-dynamic-programming-dd00873362bb   ...

  2. 域名所有权验证 —— DNS TXT 域名验证

    参考: https://help.aliyun.com/zh/cdn/getting-started/verify-the-ownership-of-a-domain-name https://blo ...

  3. MindSpore中使用model.train,在每一步训练结束后自动进行调用自定义函数 —— from mindspore.train.callback import Callback

    在MindSpore中使用model.train训练网络时我们难以处理间断性的任务,为此我们可以考虑使用MindSpore中的Callback机制.Callback 函数可以在 model.train ...

  4. 【转载】手动DIY制作机械臂

    相关链接: https://news.cnblogs.com/n/703664/ https://www.bilibili.com/video/BV12341117rG https://www.cnb ...

  5. 使用X11进行屏幕转播是否有价值? 最好用的远控软件是什么?

    由于有多个主机在使用,而且物理位置不在一起,所以以前往往要使用VNC软件来进行远程连接,但是其延迟比较高,使用感受不是很好,而且由于我所使用的多个主机均是Ubuntu系统,于是想到了是否可以使用X11 ...

  6. 【转载】 机器人真·涨姿势了:比肩人类抓取能力,上海交大、非夕科技联合提出全新方法AnyGrasp

    原文地址: https://developer.aliyun.com/article/822654 ================================================= ...

  7. 支付宝支付java版实战(含视频讲解)

    1.背景 实际开发中用到支付宝支付的概念非常大...... 这里重点分析一下支付宝支付实际生产必须要实现的功能 1.获取支付链接(统一下单) 2.支付回调(异步通知) 3.统一下单交易查询 4.退款 ...

  8. 后端开发学习敏捷需求-->干系人分析与识别

    干系人分析与识别 5W1H 干系人分析与识别 1. 干系人是什么 直接或者间接影响专题,以及被专题影响的人和组织,用户也是属于干系人,是产品直接或者间接的使用者 又叫利益相关者,指积极参与专题或者在专 ...

  9. windows启动jar包并显示标题

    cmd启动java的jar并显示窗口标题 title xx服务 D: cd D:\xx服务 java -jar guns-vip-main.jar 文件名名为 run.bat 双击即可运行

  10. MessageBox弹出后无响应

    这几天学习了自定义模板对话框类,就是说不用系统定义的模板对话框类来创建对话框 消息处理就不用返回0了,可直接返回DefWindowProc HINSTANCE hInstance = ::GetMod ...