除了构建和运行 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 <

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 <

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) 发布!

文章来源

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。