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

小提示

此內容摘錄自適用於 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 不再是一個「可有可無」的選擇。 這是一項需求,應該在任何專案開始時進行規劃並分配必要的資源。

參考資料