共用方式為


雲端原生應用程式套件組合

小提示

此內容摘錄自適用於 Azure 的電子書《架構雲端原生 .NET 應用程式》,該書可在 .NET Docs 上閱讀,或以 PDF 格式免費下載並離線閱讀。

Azure 電子書的雲端原生 .NET 應用程式封面縮圖。

雲端原生應用程式的主要屬性是,它們會利用雲端的功能來加速開發。 此設計通常表示完整應用程式使用不同類型的技術。 應用程式可能會隨附於 Docker 容器中,某些服務可能會使用 Azure Functions,而其他部分可能會直接在具有硬體 GPU 加速的大型金屬伺服器上配置的虛擬機上執行。 沒有兩個雲端原生應用程式相同,因此很難提供單一機制來運送它們。

Docker 容器可以使用 Helm Chart 在 Kubernetes 上執行以進行部署。 Azure Functions 可以使用 Terraform 範本來配置。 最後,虛擬機可以通過 Terraform 進行配置,並且使用 Ansible 進行構建。 這是各種不同的技術,沒有辦法將它們全部封裝成合理的套件。 直到現在。

雲端原生應用程式套件組合(CNAB)是由許多社群型公司共同合作,例如Microsoft、Docker 和 HashiCorp,開發一個規格來封裝分散式應用程式。

這項工作於2018年12月宣佈,因此仍有相當一些工作要做,以向更廣大的社群推廣這項努力。 不過,已經有 開放式規格 和稱為 Duffle 的參考實作。 此工具是以 Go 撰寫,是 Docker 與 Microsoft 之間的共同努力。

CNAB 可以包含不同類型的安裝技術。 這個層面可讓 Helm Chart、Terraform 範本和 Ansible 劇本等專案並存於相同的套件中。 建置後,套件是獨立且可攜式的;您可以從 USB 隨身碟安裝它們。 套件會以加密方式簽署,以確保它們來自其宣稱的來源。

CNAB 的核心是稱為 bundle.json的檔案。 此檔案定義套件的內容,無論是 Terraform、圖像或其他任何內容。 圖 11-9 定義一個利用 Terraform 功能的 CNAB。 不過請注意,它實際上會定義用來叫用 Terraform 的調用映像。 封裝好時, 位於 cnab 目錄中的 Docker 檔案會內建到 Docker 映射中,該映射會包含在套件組合中。 在套件組合的 Docker 容器內安裝 Terraform 表示使用者不需要在其電腦上安裝 Terraform,才能執行統合。

{
    "name": "terraform",
    "version": "0.1.0",
    "schemaVersion": "v1.0.0-WD",
    "parameters": {
        "backend": {
            "type": "boolean",
            "defaultValue": false,
            "destination": {
                "env": "TF_VAR_backend"
            }
        }
    },
    "invocationImages": [
        {
        "imageType": "docker",
        "image": "cnab/terraform:latest"
        }
    ],
    "credentials": {
        "tenant_id": {
            "env": "TF_VAR_tenant_id"
        },
        "client_id": {
            "env": "TF_VAR_client_id"
        },
        "client_secret": {
            "env": "TF_VAR_client_secret"
        },
        "subscription_id": {
            "env": "TF_VAR_subscription_id"
        },
        "ssh_authorized_key": {
            "env": "TF_VAR_ssh_authorized_key"
        }
    },
    "actions": {
        "status": {
            "modifies": true
        }
    }
}

圖 10-18 - 範例 Terraform 檔案

bundle.json也會定義一組傳遞至 Terraform 的參數。 套件組合的參數化可讓您在不同的環境中安裝。

CNAB 格式也具有彈性,可讓它用於任何雲端。 它甚至可以用於內部部署解決方案,例如 OpenStack

DevOps 決策

如今,DevOps 領域中擁有眾多優秀的工具,更不乏許多探討如何成功的精彩書籍和論文。 在開始 DevOps 旅程時的推薦書籍是 The Phoenix Project,它講述了一家虛構公司從 NoOps 轉型為 DevOps 的過程。 有一件事是確定的:在部署複雜的雲端原生應用程式時,DevOps 不再是一個「可有可無」的選擇。 這是一項需求,應該在任何專案開始時進行規劃並分配必要的資源。

參考資料