除了构建和运行 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) 发布! 文章来源
发表评论