在 Kubernetes 上部署 Spinnaker
【編者的話】這片文章在上一篇的基礎上著重介紹了如何在 Minikube 環境下部署一個 Spinnaker,Spinnaker 的安裝過程稍顯曲折,主要是因為它的組件比較多,有自動化安裝工具,但需要「科學上網」。筆者也是最近在一個非常偶然的情況下聽說的這個東西,其實最開始是想做一個 MSP(cloud manage service provider)系統,後來發現這個正是我當時想要的。我認為隨著國內外公有雲的大行其道,很多中小規模的互聯網公司已經不在考慮傳統的運維模式了(我所謂的傳統運維指的是:自己設置 IDC 機房,然後雇一票人從 LaaS 層開始,從準備機櫃,物理機上線,安裝 OS,然後裝 OpenStack 或者 ESXi,再找個 DBA 去部署資料庫等等……)Spinnaker 的目標在於讓用戶部署與實際的 LaaS 層解耦,把你的一套系統部署到多個 LaaS 提供商上去(例如 AWS,GCP 或者國內的阿里雲、騰訊雲),甚至在它們之前做一個負載均衡,如果你的應用同時部署在兩個提供商的 LaaS 層上,除非你的應用本身不穩定,否則你服務 HA 的指標應該可以大大提高,因為兩個 LaaS 同時掛掉的可能性實在太小了。
在上一片文章中, 我們介紹了如何讓 Spinnaker 作為一個多雲平台部署工具。這次我們將講解如何在 Kubernetes 上創建一個 Spinnaker,並且通過它部署一個應用程序。
在這篇文章中,我將帶你一起在 Minikube 上創建並配置一個 Spinnaker。一旦它運行起來,我們就會部署一個容器化的應用程序。
Spinnaker 經常被安裝在以 Ubuntu 14.04LTS 為操作系統的虛擬機上。感謝 Helm 社區,讓安裝僅僅需要一條命令就可以完成。
安裝並配置 Minikube
Spinnaker 是作為一個 Cloud-Native、微服務的架構。它有一組資源密集型的容器。典型的 Minikube 安裝不提供足夠的能力來運行 Spinnaker。我們會通過配置去 Minikube,讓它能去支撐起 Spinnaker。
當然,你也可以在至少有4GB內存的 Kubernetes 集群節點上去安裝 Spinnaker。谷歌的 Kubernetes 和 Azure 的 Kubernetes 容器託管服務是此配置的理想選擇。因為 Minikube 免費並且簡單,所以我們用它去配置 Spinnaker。當然這個環境不推薦用於生產。
在 MacOS 中運行如下命令去安裝 Minikube:
我們還需要 Kubectl 的最新版去管理 Kubernetes 集群。你可以用下面的命令安裝它:
當你把上面的完成了,下面就可以開始執行 Minikube了。
首先,我們得確定運行 Minikube 的虛擬機至少有 4GB 內存和4 Core CPU。可以用下面的命令設置:
如果你不想保存這個配置,你也可以用下面的命令啟動 Minikube:
當一個單個節點的 Kubernetes 集群啟動完畢,安裝結束。你可以看到上面的信息。如果這是在你的電腦上第一次運行 Minikube,那麼會在這個過程中下載 ISO 文件。
安裝 Helm
Helm 讓我們在 Kubernetes 上安裝應用程序非常容易。每一個應用程序被打包成一個 Chart,它是 Helm 部署應用的最小單位。所以在安裝 Spinnaker 之前,我們還需要在 Kubernetes 上部署 Helm。
下載最新版本的 Helm 並且把它放到 Bin 目錄下:
我們現在初始化 Helm,並驗證一下安裝的正確性。
這個時候 Tiller(也就是 Helm 的伺服器端)就已經安裝在你的 Kubernetes 集群上了。
你可以運行上面那個命令去確認 Helm 和 Tiller 已經安裝正確。這裡,Tiller 是以 Kubernetes 中一個 Pod 的形式運行的,服務暴露在 Kube-System 這個 Namespace 里。
當你創建了一個新的負載均衡器,輸入Prod作為堆棧的名字。80埠作為 Target Port,並且選擇 NodePort 類型,點擊 Create 按鈕。
安裝 Spinnaker
當你的 Minikube 和 Helm 已經能夠正常運行的時候,我們就可以安裝 Spinnaker 了。由於它在 Helm 的 Chart 里,我們可以通過下面的步驟來完成。
在我們部署 Spinnaker 之前,我們需要一個 YAML 格式的配置文件,它會包含了一些配置信息。可以從 Spinnaker Helm Chart Repository 獲得這個文件。
現在我們可以安裝 Spinnaker 了。用下面的命令可以把它部署在我們的 Kubernetes 集群里:
這裡的-f參數的意思是指出安裝的配置文件。--Timeout會讓 Helm 在遇到錯誤的時候等待至少300秒再退出。這片文章中我們用的是0.3.5的版本,是用--Version指定的。最後我們用--Namespace指定了安裝 Spinnaker 的 Namespace。
過了一會兒,我們應該可以看到下面的輸出。
如果你遇到錯誤超時退出,可以用Helm Del --Purge Kubelive命令去刪除,並且重新運行安裝命令。
所有的 Spinnaker 的相關組件都已經部署到了 Spinnaker 的 Namespace 里了,我們可以用下面的命令去確認。
在我們通過瀏覽器訪問 Spinnaker 之前,我們需要用下面命令打開埠轉發功能。也就是說這個命令將會把 Spinnaker Web UI 的埠映射到主機的埠上。
現在可以通過 http://localhost:9000 去訪問 Spinnaker 了。
通過 Spinnaker 去部署一個容器化的應用
現在我們在這個 Application 里去創建一個負載均衡器。單擊菜單頂部的"Load Balancer",並且點擊「Create Load Balancer」 按鈕。
在Clusters里,選擇Create Server Group。
在下拉框里選擇Nginx:Latest作為容器。選擇Nginx-Prod作為負載均衡器,輸入10作為副本數。
在Container設置里,選擇Probes去創建Readiness Probe和Liveness Probe。最後點擊Create按鈕。
當這個實例在 Server Group 里狀態變成可用,如果是紅色則代表這個實例還是不可能的狀態。
切換到終端,並且運行下面命令可以得到服務的 NodePort。
這個負載均衡器已經被 Spinnaker 創建好,並且通過 Kubernetes 的 NodePort 對外提供訪問。我們現在可以直接通過 Minikube 的命令訪問了。
運行 Kubectl Get Pods 可以顯示一共有10個 Nginx 的 Pod 被創建出來了
在 Spinnaker 的儀錶板擴展服務組(Server Group)一樣相同。
這篇文章涵蓋了在開發環境中,使用和運行 Spinnaker 的所有步驟。在本系列的下一篇文章里,我們會用 Spinnaker 去建立一個 End-To-End 的 CI/CD Pipeline 環境,然後去發布一個應用的藍綠部署。敬請關注!
更多關於 Spinnaker 的文章可以在這裡:
作者:王曉軒
※如何在 Kubernetes 環境中運行 Spark 集群
TAG:JFrog傑蛙DevOps |