當前位置:
首頁 > 最新 > 獻給初學者的 Spinnaker 指南

獻給初學者的 Spinnaker 指南

為 容 器 技 術 而 生

翻譯:夏天

校對:岑鵬浩

無論是在Kubeweekly還是The New Stack,Spinnaker 的「上鏡率」越來越高。如果您最近經常看到 「Spinnaker」 這個詞跳到眼前,想要一探究竟;如果您正計划進行多雲部署或部署雲原生應用程序,缺少得力工具;如果您很想在 Kubernetes 中開啟 Spinnaker 之旅,那麼不妨就從這篇文章開始吧!

關於 Spinnaker

1

蛻變自 Asgard

作為一家在線影片租賃提供商,Netflix 自然精於網路規模部署。自 2011 年創建 Chaos Monkey 開始,公司一直在為開源生態系統做貢獻。2012 年,為了使 Amazon Web Services 的部署自動化,向 AWS 的內部團隊公開一致性的部署經驗,Netflix 開發了Asgard。Asgard 包括 Amazon Machine Images(AMI)、Elastic Cloud Compute(EC2)實例、自動擴展組、啟動配置和彈性負載均衡器。

2015 年,Asgard 的開發人員開始將軟體移到 AWS 之外,用來支持 Google Cloud 和 Microsoft Azure。Asgard 的 Multicloud 演變成一個全新的工具叫做 Spinnaker。在目前的版本中,Spinnaker 支持各種部署目標,包括主流雲和容器平台,比如 OpenStack、DC / OS、Kubernetes 和 Cloud Foundry。

2

Spinnaker 功能

無論目標環境如何,Spinnaker 部署優勢始終如一,它的功能如下:

作為一個持續交付平台,Spinnaker 支持自動化多種雲部署,它還可以通過強大的 Pipeline 功能進行持續部署。Spinnaker 可以為每個目標環境打包應用程序,例如二進位文件和容器鏡像。舉例來說,它可以通過構建 AMI 在 EC2 中進行部署,同時將相同的應用程序打包為可在 Kubernetes 中運行的一組 Pod。它可以無縫集成其他持續集成(CI)流程,如 git、Jenkins、Travis CI、Docker registry、cron 調度器等,幫助運營團隊在跨階段和生產環境中管理部署方面,獲得最終控制權。

Spinnaker 建議運營團隊使用不可變的基礎設施(Immutable Infrastructure),這樣就可以永遠不必使用 SSH 來管理那些通過 Spinnaker 部署的虛擬機。如果虛擬機的健康狀況沒有顯示「綠色」,說明運行狀況檢查失敗,這時 Spinnaker 會自動啟動一個新的虛擬機,並停止將流量發送到不健康的虛擬機上。

使用 Spinnaker 最大的好處就是,團隊永遠不必管理每個目標環境中的個人資源。每個人都可以自主使用 Spinnaker 註冊目標平台,並用界面來設定部署策略和 Pipeline Stages。相信不久的將來,各個組織在處理目前各種雲原生應用程序時,都能發現 Spinnaker 對管理端到端的應用程序生命周期是非常有效的。

設置 Spinnaker

Spinnaker 可以通過模板在 AWS,Azure 和 GCP 中輕鬆設置。它在 AWS 中可用作 CloudFormation 模板,在 Azure 中可作為 Azure 資源管理器模板以及 GCP 中充當 Deployment Manager 模板。

如果您不想使用現有模板,則可以使用名為 「Halyard」 的工具在 Ubuntu 14.04 上設置並配置 Spinnaker。Halyard 可以通過抽象安裝 Spinnaker 所涉及的細節來簡化安裝。在目前的形式下,Spinnaker 的安全性還不夠好,無法暴露在公共互聯網上。另外,與 LDAP 的集成和對標準認證機制支持仍在探討中。建議如果部署在公有雲環境中時,最好通過基於 SSH 的埠轉發或 VPN 進行訪問。

由於 Spinnaker 是基於一組 Docker 容器構建的微服務應用程序,因此可以將其部署在 Docker Swarm 或 Kubernetes 集群中

Spinnaker 管理部署

您可以將 Spinnaker 視為在目標部署中部署應用程序工件的中間件。它是連接兩個源代碼和生產環境的工具。要想使用 Spinnaker, 您首先應該註冊目標部署平台——虛擬機,PaaS 或容器編排引擎,然後設定多個階段的 Pipeline,在一個或多個目標部署中部署應用程序。

一旦在 Spinnaker 註冊了目標部署環境,您就可以創建以下資源(映射到副本)到目標環境中:

儘管這些術語似乎受到 EC2 很深的影響,但與 EC2 不同,Spinnaker 用於配置 PaaS 環境(如Google App Engine 或 Cloud Foundry)以及容器編排工具(如 Kubernetes 和 DC / OS)。Spinnaker 使用上面定義的資源來管理應用程序部署。一旦註冊和配置完成,就有可能實現各種模式部署,如藍綠部署和 Canary 部署。

在配置目標環境後,DevOps 團隊將創建 Pipeline ,把程序部署到這些環境中。

開啟 Spinnaker 之旅

從版本 1.3 開始,Kubernetes 提供了 Minikube 工具,讓開發者和 Devops 工程師可以在本地主機上運行單節點的小型集群。接下來本文將引導您,在 Minikube 上設置和配置 Spinnaker

1

安裝並配置 Minikube

Spinnaker 被設計為雲本地微服務應用程序。它自帶一組資源密集的容器。典型的 Minikube 安裝不能支持 Spinnaker 在本地運行提供。必須自定義 Minikube 配置,才能讓其足以支持 Spinnaker。或者,您可以將 Spinnaker 安裝在節點至少具有 4GB RAM 的 Kubernetes 群集上。

用於託管 Kubernetes 的Google Kubernetes Engine 或 Azure 容器服務都是此配置的理想選擇。由於 Minikube 既免費又簡單,我們樂於使用它來配置 Spinnaker。但是,不建議將此配置用於生產

運行以下命令在 macOS 上安裝 Minikube:

我們還需要升級到最新版本的 Kubectl 來管理 Kubernetes 集群。安裝步驟如下:

一切準備就緒,讓我們開始運行 Minikube!首先,我們需要確保 Minikube 虛擬機配置至少有 4GB RAM 和 4 核 CPU 。

如果您不想永久保存配置,也可以使用以下參數啟動 Minikube:

等待單節點 Kubernetes 集群啟動,並驗證安裝。如果這是您第一次啟動 Minikube,它將在啟動集群之前下載 ISO 文件。

2

安裝 Helm

有了 Helm,在 Kubernetes 中安裝應用程序就變得非常簡單。每個應用程序都可以打包成一個 Chart,一個可部署的 Helm 單元。在安裝 Spinnaker Chart 之前,我們需要在 Kubernetes 上設置 Helm。首先,下載最新版本的 Helm 二進位文件並將其移動到 bin 文件夾中。

我們現在將安裝 Helm 並驗證。

Tiller(Helm 伺服器端組件)已經被安裝到你的 Kubernetes 集群中。

以上輸出可以確認 Helm 的伺服器端組件 Helm 和 Tiller 已正確安裝。Tiller 作為 Kube-system Namespace 中的 Kubernetes Pod 和 Service 運行。

3

安裝 Spinnaker

隨著 Minikube 和 Helm 的安裝和運行,是時候安裝 Spinnaker 了。由於它可以作為 Helm Chart,我們將通過幾個步驟來完成。

在部署 Spinnaker 之前,我們需要一個 YAML 格式的配置文件,它將提供一組初始配置值。從 Github Spinnaker Helm Chart Repo 中 抓取這個文件。

https://github.com/kubernetes/charts/tree/master/stable/spinnaker

是時候安裝 Spinnaker 了。運行以下命令將其部署到 Kubernetes 集群中。

該 -f 參數指向安裝到保存在 values.yaml 的默認配置。該 -timeout 參數將強制 Helm 在出現超時錯誤而中止前,等待至少五分鐘。本教程使用 -version 開關提到的版本 0.3.5 進行測試。最後,我們在通過 -namespace 開關配置的名為 spinnaker 的專用 Namespace 中安裝 Helm Chart 。幾分鐘後,我們會看到下面的輸出,確認 Spinnaker 的安裝。

如果看到超時錯誤,使用helm del -purge kubelive命令刪除圖表,然後再次運行安裝命令。與 Spinnaker 相關的所有資產都部署在 Kubernetes 集群的 spinnaker namespace 中。我們可以用下面的命令驗證它:

在使用瀏覽器訪問 Spinnaker dashboard 之前,我們需要通過運行以下命令啟用埠轉發。這將運行 Spinnaker Web UI 的 Pod 暴露給主機。

現在可以通過訪問http:// localhost:9000來進入 Spinnaker。

3

Spinnaker 部署和實現容器應用的彈性伸縮

讓我們通過部署一個簡單的 Nginx Web 伺服器來熟悉 Spinnaker 的概念和術語。首先在右上角的Actions菜單下單擊Create Application創建應用程序。這裡的Application是各種資源(如負載平衡器,安全組,伺服器組和群集)的邏輯集合。

我們來創建一個負載平衡器,通過它可以訪問應用程序。點擊頂部菜單欄上的 Load Balancer,然後點擊Create Load Balancer按鈕。

創建新的負載均衡器時,輸入 「prod」作為 stack 名稱,「80」 作為目標埠,然後選擇 NodePort 作為類型。完成後點擊 Create 按鈕。

在 Clusters 下,單擊 Create Server Group。

在創建新的伺服器組時,鍵入 「prod」作為 stack 名稱。從下拉列表中選擇 nginx:latest作為容器。選擇 nginx-prod 作為我們在上一步創建的 Load Balancer。輸入 「10」 作為容量。

在 Container 設置下,選擇 Probes 創建 「Readiness Probe」 和 「 Liveness Probe」。最後,點擊 Create 按鈕。

等待伺服器組中的實例可用(紅色塊表示實例還沒有準備好)。

切換到終端,執行以下命令獲取服務的 NodePort。

在 Spinnaker 中創建的負載均衡器被轉換為 Kubernetes 中的 NodePort 服務。我們現在通過 Minikube 命令直接訪問它。

運行 kubectl get pods 會顯示從 Nginx 容器創建的 10 個 Pod。

在 Spinnaker dashboard 中擴展伺服器組也證實了這一點。

參考原文:

https://thenewstack.io/getting-started-spinnaker-kubernetes/

https://thenewstack.io/meet-spinnaker-ultimate-multi-cloud-deployment-tool/

資料下載


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 K8sMeetup 的精彩文章:

前 Docker 市場部營銷總監入主 CNCF、谷歌採取措施防漏洞

TAG:K8sMeetup |