在 OpenFunction 中執行 Serverless 應用

KubeSphere發表於2023-02-02

除了構建和執行 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

相關文章