在 OpenFunction 中运行 Serverless 应用
除了构建和运行 Serverless 函数之外,OpenFuntion 还支持构建和运行 Serverless 应用。因此,OpenFunction 用户可以不用局限在各语言的 functions-framework 内编写应用,并且可以采用自己喜欢的任何语言来编写应用,即使 OpenFunction 社区尚未提供 functions-framework 支持(如 Rust, kotlin 等)。
OpenFunction 有两种方式可以将应用源代码打包到容器镜像中:
- 使用 Cloud Native Buildpacks 构建镜像(无需 Dockerfile);
- 使用 Buildah 或 BuildKit 构建镜像。
️注意:你需要提前创建一个包含镜像仓库凭证的 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
变成 Succeeded
,SERVINGSTATE
变成 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
变成 Succeeded
,SERVINGSTATE
变成 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 应用的更多相关文章
- 在docker中运行ASP.NET Core Web API应用程序
本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Cor ...
- 【DDD/CQRS/微服务架构案例】在Ubuntu 14.04.4 LTS中运行WeText项目的服务端
在<WeText项目:一个基于.NET实现的DDD.CQRS与微服务架构的演示案例>文章中,我介绍了自己用Visual Studio 2015(C# 6.0 with .NET Frame ...
- Docker--在Docker中运行应用
Docker--在Docker中运行应用 一个交互式的容器 既然在Docker提供的是一个容器,底层支撑着一个基本的操作系统环境,那我们就可以通过Docker进入到容器内部与系统进行交互. 据我理解: ...
- 尝试在你浏览器的Console(F12)中运行一下,你会发现页面被不同的颜色块高亮了(css调试中学到的js)
现在到处都是JavaScript,每天都能知道点新东西.一旦你入了门,你总能从这里或是那里领悟到很多知识. 一旦我发现一些有意思的东西,我喜欢去感觉他们的源代码,看一看它是怎么办到的. 今天我想分享A ...
- 在Linux和Windows的Docker容器中运行ASP.NET Core
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott H ...
- 在Linux中运行Nancy应用程序
最近在研究如何将.NET应用程序移植到非Windows操作系统中运行,逐渐会写一些文章出来.目前还没有太深的研究,所以这些文章大多主要是记录我的一些实验. 这篇文章记录了我如何利用NancyFx编写一 ...
- 在WildFly中运行多个standalone模式的实例
WildFly作为一款优秀的EJB容器,其前身为JBoss AS.JBoss作为一款开源的应用服务器,被广泛的应用在各种项目当中.假设我们现在有这样一个项目,他是以standalone的模式运行在 ...
- .NET Core Web 应用部署到 Docker 中运行
环境介绍 : 虚拟机:VirtualBox 5.1.6 系 统:Ubuntu 16.04.1 LTS 系统准备完成后可以使用 sudo apt-get udpate 和 sudo apt-get up ...
- Nodejs学习笔记(二)——Eclipse中运行调试Nodejs
前篇<Nodejs学习笔记(一)——初识Nodejs>主要介绍了在搭建node环境过程中遇到的小问题以及搭建Eclipse开发Node环境的前提步骤.本篇主要介绍如何在Eclipse中运行 ...
- monkeyrunner之eclipse中运行monkeyrunner脚本之环境搭建(四)
monkeyrunner脚本使用Python语法编写,但它实际上是通过Jython来解释执行. Jython是Python的Java实现,它将Python代码解释成Java虚拟机上的字节码并执行,这种 ...
随机推荐
- MindSpore框架 加载文本数据集 示例
代码原地址: https://www.mindspore.cn/tutorial/training/zh-CN/r1.2/use/load_dataset_text.html ============ ...
- vim跳转到上次和下次光标位置
在vim的命令模式下: ctrl + i 下次光标位置; ctrl + o 上次光标位置. =====================================
- java多线程之-自定义数据库连接池
1.背景 数据库链接池大家不陌生吧... 不多说了,直上代码... 2.连接池具体实现 1.jdbc链接的实例对象 /** * @author 姿势帝-博客园 * @address https://w ...
- conda 安装pytorch
配置:win 10 ,python=3.6 安装pytorch-1.1.0,cudatoolkit-9.0,torchvision-0.3.0. 出现的问题:import torch 的时候,出现了O ...
- 结构开发笔记(三):solidworks软件(二):小试牛刀,绘制一个立方体
前言 solidworks草图大师,基本的使用过程. 所有的零件基础都是从平面绘制开始,然后凸出来厚度. 本篇绘制一个简单的立方体,熟悉基本操作. 立方体绘制过程 选取一个平面绘制一个 ...
- Camera | 3.瑞芯微平台MIPI摄像头常用调试命令
瑞芯微专栏 前面2篇我们讲解了camera的一些基础概念和知识. 本文主要讲述在瑞芯微平台上摄像头开发常用的调试命令. 0.环境 soc : rk3568 board: EVB1-DDR4-V10 软 ...
- Notepad++作死,国产文本编辑器Notepad--发布
作死的Notepad++ Notepad 和 Notepad++ 都是基于 Windows 的文本编辑器,通常用于编写和编辑纯文本文件. 这两个应用程序都是简单的轻量级程序,提供基本的文本编辑功能. ...
- 11. 基于ARM Cortex-A9中断详解
一.中断概念 操作系统中,中断是很重要的组成部分.出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行. 有了中断系统才可以不用一直 ...
- win32 对话框模板添加加速键
今天想在菜单中添加加速键的时候,因是用的对话框模板,不能接受WM_KEYDOWN消息, 在网上收了半天,都不理想,最后在看WM_COMMAND的时候发现有个 wparam的低位有个加速键标识 最后把这 ...
- Cookie,Session Filter,Listener详解
HTTP请求的无状态性 HTTP的无状态性是其一个重要的特征,指的是HTTP协议本身并不保留客户端与服务器交互的历史信息,换而言之,即每次的HTTP请求都是独立的,服务器在处理每一个请求时都不会记住前 ...