Acorn,用於 Kubernetes 的輕量級、可移植的 PaaS

Acorn 是 Rancher 創始人推出的一個新的應用程序部署框架,它非常接近我對運行在 Kubernetes 上的開發環境的期望。

長期以來,我一直主張用一種簡化的方法來開發和部署以 Kubernetes 爲目標的應用程序。我之前強調需要一個可移植的、透明的、開源的應用程序層,該應用程序層將始終部署在開發人員筆記本電腦中的 Minikube 集羣或在公共雲中配置的大型多節點集羣內運行。

作爲高人氣的 Kubernetes 發行版 K3s 的締造者 Darren Shepherd 及其團隊的開發成果,Acorn 從 Rancher 身上繼承了不少頗受雲原生社區好評的設計原則。這是一套開源、簡單、輕量化且可移植的框架,用於在 Kubernetes 上部署和擴展微服務。

使用 Acorn 的開發人員和運維人員無需瞭解 Kubernetes 的具體細節。如果他們瞭解 Volumes、Secrets、ConfigMaps 和 Ingress 等內部結構,那將非常棒。Acorn 用自己的類 JSON 領域特定語言(DSL)抽象了 Kubernetes 的複雜性,以描述基於微服務設計模式的現代應用程序。

像 Cloud Foundry 這樣的 PaaS 的目標是將代碼推送到運行時並使用 URL。Acorn 正是專注於接受源代碼或容器鏡像併發布端點的工作流程。在後臺,它完成了與 Kubernetes API 協商以創建資源和連接它們所需的管道的繁重工作。

儘管 Amazon Web Services 的 App RunnerAzure Container AppsGoogle Cloud Run 等努力爲部署容器化工作負載帶來類似 PaaS 的體驗,但它們僅限於公有云環境並且不可移植。Acorn 是少數幾個可以從開發人員筆記本電腦上運行的 Kind 集羣無縫擴展到雲中的多節點集羣的框架之一。

本文將分析 Acorn 的架構,並深入瞭解 Acorn 部署如何轉換爲 Kubernetes 對象。

讓我們詳細瞭解一下。

在 Minikube 中設置環境

在 Mac 上安裝 Minikube 並在其上啓用 Nginx Ingress。Ingress 是 Acorn 最重要的先決條件之一。

minikube addons enable ingress

使用 Homebrew 安裝 Acorn CLI,並檢查其版本以確保已安裝。

brew install acorn-io/cli/acorn

我們現在準備在 Minikube 中安裝 Acorn。運行 acorn init 以配置 Minikube。

在 Kubernetes 集羣中安裝 Acorn 會創建一組資源來處理應用程序的構建時間和運行時要求。讓我們從 namespaces 開始。

acorn-system namespaces 包含 API 和控制器,它們是運行時環境的組件。在開發環境中運行時,相同的 namespaces 可以選擇運行鏡像構建器和鏡像註冊表。另一個 namespaces acorn 是爲應用程序保留的,我們將在下一節中探討。

安裝程序僅在集羣中創建一個自定義資源定義(CRD)。CRD AppInstance.internal.acorn.io 映射到集羣內運行的 Acorn 應用程序上。

Acorn API 服務器通過聚合與 Kubernetes API 服務器關聯。Acorn CLI 與 API 服務器 api.acorn.io 對話。由於 Acorn 利用 Kubernetes API 聚合,CLI 只需要 Acorn API 組的 RBAC 權限。

API 服務器將入站請求傳遞給 Acorn 控制器,該控制器將應用程序定義轉換爲適當的 Kubernetes 資源,例如 Deployments、ConfigMaps、Secrets 和 Volumes。控制器負責通過創建和終止下游 Kubernetes 資源來管理 Acorn 應用程序的生命週期。

部署 Acorn 應用程序

讓我們從基於 Nginx 鏡像的單個 Web 服務器創建最簡單的 Acorn 應用程序開始。

在一個空目錄中創建一個 Acornfile 包含以下內容的目錄:

containers: {
 web: {
 image: "nginx"
 ports: {
 publish: "80/http"
 }
 }
}

該定義是不言自明的。我們基於 Docker 註冊表中的 Nginx 鏡像啓動一個名爲“web”的容器,並使其在端口 80 上可用。

使用以下命令運行 Acornfile:

acorn run  .

由於我們沒有爲應用程序提供名稱,因此 Acorn 爲應用程序指定了一個隨機名稱,即 proud-silence。

當我們調用 run 命令時,Acorn 創建了一個 OCI 清單並將其推送到在 namespace 內運行的內部註冊表服務 acorn-system 上。也可以爲這些 OCI 工件使用外部註冊表。

讓我們通過運行以下命令獲取訪問應用程序的 URL:

acorn apps

讓我們訪問 Web 服務器來測試應用程序。

curl  -H  "host: web.proud-silence.local.on-acorn.io"  `minikube ip`

現在,讓我們看看這個簡單的應用程序對我們的 Kubernetes 集羣做了什麼。

首先,我們注意到有一個新的 namespace 作爲應用程序的邊界。

讓我們檢查一下這個 namespace。正如預期的那樣,app run 命令已經創建了一個 Kubernetes Deployment、ReplicaSet、Pod 和一個集羣 IP 服務。

集羣 IP 服務通過一個 Ingress 資源暴露給外界,我們稍後會探討。

當我們檢查 acorn namespace 時,我們會找到 CRD 的實例 AppInstance。

kubectl get appinstances -n acorn

重溫 Ingress 的想法來暴露 Web 應用程序,讓我們看看我們是否可以在應用程序 namespace 中找到一個 Ingress 資源。

kubectl get ingress  -n  proud-silence-f6db18f8-c38

每個“發佈”端口的 Acorn 應用程序都會在 Kubernetes 中創建一個關聯的入口對象。

由於應用程序按預期運行,它現在可以被標記並推送到外部註冊表。管理工作負載的運營團隊可以將其部署到生產集羣,而無需瞭解應用程序的內部結構。

Acorn 讓我着迷的是它的簡單性和便攜性。它將 Kubernetes 視爲部署、擴展和運行應用程序的理想運行時環境,無需任何假設。它不會篡改集羣並部署最少的資源集,足以運行微服務。從某種意義上說,它是真正可移植的,當我們從開發集羣上下文切換到另一個並部署應用程序時,它會被推送到生產集羣。

Acorn 深受 Docker 的影響,並遵循一些通用的模式來運行多容器應用程序。與 Cloud Foundry 一樣,它也支持綁定現有服務,例如部署在其他應用程序中的數據庫和緩存。

一旦 Acorn 支持直接從包含 Acornfile 的 Git 存儲庫進行部署的能力,DevOps 就可以非常輕鬆地管理基於微服務的應用程序。

譯自:https://thenewstack.io/acorn-a-lightweight-portable-paas-for-kubernetes/
譯者:#公衆號:進擊雲原生

本文由mdnice多平臺發佈

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章