天天看點

Serverless 工程實踐|自建 Apache OpenWhisk 平台OpenWhisk 簡介OpenWhisk 部署開發者工具體驗測試

作者 | 劉宇(江昱)

前言:OpenWhisk 是一個開源、無伺服器的雲平台,可以在運作時容器中通過執行擴充的代碼響應各種事件,而無須使用者關心相關的基礎設施架構。

OpenWhisk 是基于雲的分布式事件驅動的程式設計服務。OpenWhisk 提供一種程式設計模型,将事件處理程式注冊到雲服務中,以處理各種不同的服務。其可以支援數千觸發器和調用,可以對不同規模的事件進行響應。

OpenWhisk 是由許多元件建構的,這些元件讓 OpenWhisk 成為一款優秀的開源 FaaS 平台。

Serverless 工程實踐|自建 Apache OpenWhisk 平台OpenWhisk 簡介OpenWhisk 部署開發者工具體驗測試

Apache OpenWhisk 元件結構

實驗機器作業系統為 Ubuntu 18.04 Desktop。使用 GitHub 上所提供的 incubator-openwhisk 進行安裝,如果本機沒有安裝 Git,需要先安裝 Git:

接下來克隆 repo 到本地目錄:

克隆完成之後,顯示如圖所示。

Serverless 工程實踐|自建 Apache OpenWhisk 平台OpenWhisk 簡介OpenWhisk 部署開發者工具體驗測試

Apache OpenWhisk 項目 Clone

進入 OpenWhisk 目錄,并且執行腳本。OpenWhisk 是由 Scala 開發的,運作需要安裝 Java 環境。下面的腳本實作了 Java 環境的安裝,以及其他的所需要的軟體:

Apache OpenWhisk 安裝配置如圖所示。

Serverless 工程實踐|自建 Apache OpenWhisk 平台OpenWhisk 簡介OpenWhisk 部署開發者工具體驗測試

Apache OpenWhisk 安裝配置

OpenWhisk 使用 ansible 進行部署,環境變量定義在 ansible/environments/group_vars/all 下:

上面程式定義了 OpenWhisk 在系統中的限制。

invocationsPerMinute 表示同一個 Namespace 每分鐘調用 Action 的數量。

concurrentInvocations 表示同一個 Namespace 的并發調用數量。

concurrentInvocationsSystem 表示系統中所有 Namespace 的并發調用數量。

firesPerMinute 表示同一個 Namespace 中每分鐘調用 Trigger 的數量。

sequenceMaxLength 表示 Action 的最大序列長度。

如果需要修改上述的預設值,可以把修改後的值添加到檔案 ansible/environments/local/group_vars/all 的末尾。例如,Action 的最大序列長度為 100,可以将 sequenceMaxLength: 120 添加到檔案的末尾。

接下來,為 OpenWhisk 配置一個持久存儲的資料庫,有 CouchDB 和 Cloudant 可選。以 CouchDB 為例,配置環境:

在 openwhisk/ansible 目錄下,運作腳本,如圖所示。

Serverless 工程實踐|自建 Apache OpenWhisk 平台OpenWhisk 簡介OpenWhisk 部署開發者工具體驗測試

執行腳本過程

接下來使用 CouchDB 部署 OpenWhisk,確定本地已經有了 db_local.ini。在 openwhisk/ 目錄下執行部署指令:

如果部署過程中出現問題(如下圖所示),可能是沒有安裝 npm 導緻的,此時可以執行如下指令。

Serverless 工程實踐|自建 Apache OpenWhisk 平台OpenWhisk 簡介OpenWhisk 部署開發者工具體驗測試

部署過程可能報錯示例

稍等片刻,可以看到 Build 成功頁面,如圖所示。

Serverless 工程實踐|自建 Apache OpenWhisk 平台OpenWhisk 簡介OpenWhisk 部署開發者工具體驗測試

Build 成功示例

接下來進入 openwhisk/ansible 目錄:

執行腳本過程如圖所示。

Serverless 工程實踐|自建 Apache OpenWhisk 平台OpenWhisk 簡介OpenWhisk 部署開發者工具體驗測試

圖檔執行腳本過程

部署成功後,OpenWhisk 會在系統中啟動幾個 Docker 容器。我們可以通過 docker ps 來檢視:

安裝成功後的容器清單如圖所示。

Serverless 工程實踐|自建 Apache OpenWhisk 平台OpenWhisk 簡介OpenWhisk 部署開發者工具體驗測試

安裝成功後的容器清單

OpenWhisk 提供了一個統一的指令行接口 wsk。生成的 wsk 在 openwhisk/bin 下。其有兩個屬性需要配置。

API host 用于部署 OpenWhisk 的主機名或 IP 位址的 API。

Authorization key(使用者名或密碼)用來授權操作 OpenWhisk 的 API。

設定 API host,在單機配置中的 IP 應該為 172.17.0.1,如圖所示。

Serverless 工程實踐|自建 Apache OpenWhisk 平台OpenWhisk 簡介OpenWhisk 部署開發者工具體驗測試

設定 API host

設定 key:

權限設定如圖所示。

Serverless 工程實踐|自建 Apache OpenWhisk 平台OpenWhisk 簡介OpenWhisk 部署開發者工具體驗測試

圖檔設定權限

OpenWhisk 将 CLI 的配置資訊存儲在 ~/.wskprops 中。這個檔案的位置也可以通過環境變量 WSK_CONFIG_FILE 來指定。

驗證 CLI:

建立簡單的動作(action),代碼如下:

建立動作:

函數建立如圖所示。

Serverless 工程實踐|自建 Apache OpenWhisk 平台OpenWhisk 簡介OpenWhisk 部署開發者工具體驗測試

建立函數

觸發動作:

得到結果,如圖所示。

Serverless 工程實踐|自建 Apache OpenWhisk 平台OpenWhisk 簡介OpenWhisk 部署開發者工具體驗測試

執行函數

至此,我們完成了 OpenWhisk 項目的部署以及測試。

繼續閱讀