一個由 Kubernetes 驅動的 PaaS 系統 - Porter
Porter 是一個由 Kubernetes 驅動的 PaaS 系統,可以在你自己的云供應商中運行。Porter 嘗試將 Heroku 的使用經驗帶到你自己的 AWS/GCP 賬戶中,同時將你的基礎設施升級為 Kubernetes。
概述
像 Heroku 這樣的傳統 PaaS 非常適合最大限度地減少不必要的 DevOps 工作,但隨著應用程序的增長,它并不能提供足夠的靈活性。自定義網絡規則、資源限制和成本是開發人員將其應用程序從 Heroku 遷出的常見原因。
Porter 為你自己的云提供商帶來了傳統 PaaS 的簡單性,同時保留了 Kubernetes 的可配置性。Porter 建立在流行的 Kubernetes 包管理器 helm 之上,并與 kubectl 等標準 Kubernetes 管理工具兼容,從一開始就為成熟的 DevOps 工作做好了準備。只需要點擊幾下即可將應用程序部署到你的云提供商中,Porter 將為你配置和管理底層基礎架構 - 只需指向你的存儲庫,Porter 將處理其余的工作,從構建你的應用程序到自動擴展它。
在底層,Porter 運行在 Kubernetes 之上。Porter 配置和管理每個云提供商的原生 Kubernetes 產品(AWS 上的 EKS、GCP 上的 GKE 和 Digital Ocean Kubernetes),同時抽象出所有的復雜性。
可能你會覺得 Porter 在 Kubernetes 之上運行太過復雜,對于不了解 Kubernetes 的團隊來說,Kubernetes 會有一定的門檻。除了一些基本概念之外,你不需要了解任何關于 Kubernetes 的知識即可使用 Porter。Kubernetes 恰好是提供 PaaS 體驗的最佳底層。事實上,大多數 PaaS 實際上都是在 Kubernetes 之上運行的,盡管這些細節對最終用戶來說是隱藏的。如果你的團隊已經熟悉 Kubernetes,Porter 可以成為簡化你現有操作的內部部署平臺。
特性
- 可以在自己的云控制臺中一鍵開通 Kubernetes 集群:AWS、GCP、Digital Ocean。
- 簡單部署任何公共或私有的 Docker 鏡像。
- 為非容器化應用使用 buildpacks 進行 CI/CD。
- 類似于 Heroku 的操作界面,用于監控應用程序狀態、日志和歷史記錄。
- 應用程序可以方便回滾到以前部署的版本。
- 零宕機部署和健康檢查。
- 監控每次部署的 CPU、內存和網絡使用情況。
- 一鍵式插件市場(例如 MongoDB、Redis、PostgreSQL)。
對于熟悉 Kubernetes 和 Helm 的用戶:
- 可以將現有 Kubernetes 集群直接連接到 Porter 使用。
- 通過界面可視化、部署和配置 Helm Charts。
- 深入了解版本,包括修訂歷史和組件圖。
- 回滾/更新現有版本,包括編輯原始 values.yaml 文件。
使用
最簡單的方式就是直接使用 Porter 提供的在線云服務 https://dashboard.getporter.dev/,直接登錄注冊。然后創建一個項目并配置你的云服務商的相關憑證,Porter 會在你的云服務中自動配置 Kubernetes 集群。
如果你沒有云服務商也可以連接現有的 Kubernetes 集群,下載 Porter CLI 工具,然后將你現有 Kubernetes 集群的 kubeconfig 連接到 Porter 即可:
配置上 Kubernetes 集群后就可以選擇部署服務,支持 Web 服務、Worker 與 Job 任務:
比如選擇一個 Web 服務,如果你連接了 GitHub,那么可以選擇部署一個倉庫,也可以直接指定一個 Docker 鏡像地址:
如果你使用的 Porter 的云服務,部署完成后會為你的應用自動添加一個二級域名,通過該地址即可訪問到部署的服務:
如果你的集群中安裝了 Prometheus,還可以對應用進行監控:
而且還可以配置自動擴縮容:
如果你需要本地進行開發測試,可以直接 Clone 倉庫代碼:
git clone https://github.com/porter-dev/porter
然后執行 make start-dev 命令即可在本地啟動服務,不過需要在 docker/.env文件中添加下如下兩個環境變量,否則本地啟動后無法正常使用:
WELCOME_FORM_WEBHOOK=https://www.qikqiak.com
DISABLE_ALLOWLIST=true
關于 Porter 的更多信息可以查看官方文檔 https://docs.porter.run 了解更多信息。
倉庫地址:https://github.com/porter-dev/porter。