OpenFunction v1.0.0 釋出:整合 WasmEdge,支援 Wasm 函式和更完整的 CI/CD

KubeSphere發表於2023-03-17

OpenFunction 是一個開源的雲原生 FaaS(Function as a Service,函式即服務)平臺,旨在幫助開發者專注於業務邏輯的研發。今天,我們非常高興地宣佈 OpenFunction 迎來了一次重要的更新,即 v1.0.0 版本的釋出!

In this update, we continue to focus on providing developers with more flexible and powerful tools, and have added some new features on this basis. This release
本次更新中,我們繼續致力於為開發者們提供更加靈活和強大的工具,並在此基礎上加入了一些新的功能點。其中,該版本整合了 WasmEdge 以支援 Wasm 函式;我們還對 OpenFunction 的 CI/CD 功能進行了增強,提供了相對完整的端到端的 CI/CD 功能;除此之外,我們還在這個版本中新增了從原生程式碼直接構建函式或應用的映象的功能,讓開發者可以更加便捷地進行程式碼釋出和部署。

與此同時,我們也在大力最佳化 OpenFunction 的效能和程式碼質量,使其更加穩定高效。

以下是本次版本更新的主要內容:

整合 WasmEdge,支援 Wasm 函式

WasmEdge 是一個輕量級、高效能和可擴充套件的 WebAssembly 執行時,適用於雲原生、邊緣和去中心化應用程式。它為 Serverless 應用程式、嵌入式功能、微服務、智慧合約和物聯網裝置提供支援。

OpenFunction 現在支援構建和執行以 WasmEdge 為執行時的 Wasm 函式或應用。WasmEdge 成為 Docker、Containerd 和 CRI-O 之外的容器執行時的新選擇。

Wasm 函式示例

cat <<EOF | kubectl apply -f -
apiVersion: core.openfunction.io/v1beta1
kind: Function
metadata:
  name: wasmedge-http-server
spec:
  workloadRuntime: wasmedge
  image: openfunctiondev/wasmedge_http_server:0.1.0
  imageCredentials:
    name: push-secret
  build:
    dockerfile: Dockerfile
    srcRepo:
      revision: main
      sourceSubPath: functions/knative/wasmedge/http-server
      url: https://github.com/OpenFunction/samples
  port: 8080
  route:
    rules:
      - matches:
          - path:
              type: PathPrefix
              value: /echo
  serving:
    runtime: knative
    scaleOptions:
      minReplicas: 0
    template:
      containers:
        - command:
            - /wasmedge_hyper_server.wasm
          imagePullPolicy: IfNotPresent
          livenessProbe:
            initialDelaySeconds: 3
            periodSeconds: 30
            tcpSocket:
              port: 8080
          name: function
EOF

藉助 WasmEdge 引擎,開發者可以使用多種支援 Wasm 的語言和開發框架來編寫及執行函式。

如何構建和執行 Wasm functions,請參考官方檔案 Wasm Functions

更完整的 CI/CD

之前,使用者可以使用 OpenFunction 將函式或應用程式原始碼構建為容器映象,然後直接將構建的映象部署到底層的同步或非同步 Serverless 執行時,而無需使用者幹預。

但是,OpenFunction 不能在函式或應用程式原始碼發生更改時重新構建映象並重新部署它,也不能在映象更改時重新部署它(例如手動構建和推送映象或在其他函式中構建映象)。

從 v1.0.0 開始,OpenFunction 在新的元件 Revision Controller 中增加了檢測原始碼或映象變更的能力,並且可以在檢測到變更後觸發映象重新構建或重新部署新的映象。Revision Controller 的能力包括:

  • 檢測 GitHub、GitLab 或 Gitee 中的原始碼變更,然後在原始碼變更時重新構建並重新部署新的映象。
  • 檢測包含原始碼的映象(Bundle Container Image)的變更,然後在該映象變更時重新構建和重新部署新的映象。
  • 檢測函式或應用程式映象變更,然後在函式或應用程式映象變更時重新部署新的映象。

更好的 CI/CD 功能確保了程式碼能在不同的環境中高效執行,使用者可以在開發和部署過程中更好的控制版本和程式碼質量,同時也為使用者提供了更好的使用體驗。

此處請參考官方檔案 CI/CD

從本地原始碼構建函式

目前,OpenFunction v1.0.0 支援根據本地的原始碼構建函式或應用。只需要將本地原始碼打包到容器映象中,並將此映象推送到容器登入檔即可完成構建。以下為操作方法。

假設你的原始碼在 samples 目錄中,你可以根據以下 Dockerfile 來構建包含原始碼的映象。

FROM scratch
WORKDIR /
COPY samples samples/

然後如下操作:

docker build -t <your registry name>/sample-source-code:latest -f </path/to/the/dockerfile> .
docker push <your registry name>/sample-source-code:latest
推薦使用空映象 scratch 作為基礎映象構建包含原始碼的映象,非空基礎映象可能會導致原始碼複製失敗。

另外還需要定義欄位 spec.build.srcRepo.bundleContainer.image

apiVersion: core.openfunction.io/v1beta1
kind: Function
metadata:
  name: logs-async-handler
spec:
  build:
    srcRepo:
      bundleContainer:
        image: openfunctiondev/sample-source-code:latest
      sourceSubPath: "/samples/functions/async/logs-handler-function/"
sourceSubPath 是包含原始碼的映象中原始碼的絕對路徑。

其他的改進和最佳化

除了上述的主要變化,該版本還有以下更改和增強:

  • OpenFunction

    • 核心 API v1alpha2 已棄用並刪除
    • 將 sha256 新增到服務映象
    • 將構建源資訊新增到函式狀態
    • 將 Shipwright 升級到 v0.11.0
    • 將 Knative 升級到 v0.32.0
    • 將 Dapr 升級到 v1.8.3
    • 將 Go 升級到 v1.18
  • functions-framework-java 釋出 V1.0.0

    • 在一個 pod 中支援多個函式
    • 支援自動釋出
  • Builder

    • 在一個 pod 中支援多個函式
    • 將預設的 Java 框架版本更新為 1.0.0
  • revision-controller 釋出 v1.0.0(功能見上文)

以上就是 OpenFunction v1.0.0 的主要功能變化,在此十分感謝各位貢獻者的參與和貢獻。如果您正在尋找一款高效、靈活的雲原生函式開發平臺,那麼 OpenFunction v1.0.0 將是您的絕佳選擇。

瞭解更多關於 OpenFunction 和本次版本更新的資訊,歡迎訪問我們的官方網站和 Github 頁面。

相關文章