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

无需 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

KubeSphere
124 声望58 粉丝

KubeSphere 是一个开源的以应用为中心的容器管理平台,支持部署在任何基础设施之上,并提供简单易用的 UI,极大减轻日常开发、测试、运维的复杂度,旨在解决 Kubernetes 本身存在的存储、网络、安全和易用性等痛...