在 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虚拟机上的字节码并执行,这种 ...
随机推荐
- 国产深度学习框架 OneFlow 是否靠谱?
OneFlow框架的设计目标是实现:一个使用多机多卡就像使用单机单卡一样容易的深度学习框架. 可以说,这是国内最早的深度学习框架之一,也是至今还活着的公司中开发支持力度最低的,也是最缺少技术支持.用户 ...
- 【转载】 NFS服务器端的权限设置学习 Linux运维学习
原文地址: http://blog.chinaunix.net/uid-31484238-id-5785140.html ======================================= ...
- 国产操作系统——银河麒麟V10 SP1使用小结
前几天看新闻国产操作系统银河麒麟有了新的更新于是上手搞了一个. ========================================================= 该系统自带驱动,其中 ...
- 【转载】 机器学习数据可视化 (t-SNE 使用指南)—— Why You Are Using t-SNE Wrong
原文地址: https://towardsdatascience.com/why-you-are-using-t-sne-wrong-502412aab0c0 ==================== ...
- git在idea中的冲突解决(非常重要)
1.什么是冲突 冲突是指当你在提交或者更新代码时被合并的文件与当前文件不一致.读起来有点绕,结合下面的案例理解. 从上面对冲突的定义来看,冲突时发生在同一个文件上的. 2.生产上冲突的场景 常见冲突的 ...
- Python 开发环境的准备以及一些常用类库模块的安装
在学习和开发Python的时候,第一步的工作就是先准备好开发环境,包括相关常用的插件,以及一些辅助工具,这样我们在后续的开发工作中,才能做到事半功倍.下面介绍一些Python 开发环境的准备以及一些常 ...
- CSS2基础(part-1)
CSS2基础 基础 简介 [全称]Cascading Style Sheets,又名层叠样式表 层叠:一层一层涂上去 表:列表 样式:如文字大小,颜色,元素宽高等. CSS 描述了在屏幕.纸质.音频等 ...
- Java 1.8 Stream流原理与用法总结
一.接口设计 从Java1.8开始提出了Stream流的概念,侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式:依旧先看核心接口的设计: BaseStream:基础接口,声明了流管理的核心 ...
- Python 潮流周刊#68:2023 年 Python 开发者调查结果(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- Figma 学习笔记 – Layout Grid
前言 我原本以为, 在 Figma 只要用 Auto Layout 就可以打天下. 真的是 too young too simple. 要做一个简单的 7:3 比例, 用 Auto Layout 是做 ...