1. 程式人生 > >初試 Kubernetes 叢集中 Spinnaker 平臺之叢集管理

初試 Kubernetes 叢集中 Spinnaker 平臺之叢集管理

目錄

1、Spinnaker 叢集管理介紹

Spinnaker 是 Netflix 的開源專案,是一個持續交付平臺,它提供在多種平臺上實現開箱即用的叢集管理和部署功能的平臺。我們可以通過其強大的叢集管理特性,來檢視和管理叢集中的資源。叢集管理主要包括服務組(Server Group)、叢集(Cluster)、應用(Applications)、負載均衡(Load Balancer)、安全組(Security Group)幾大塊。

這裡寫圖片描述

  • Server Group:服務組,是資源管理單位,識別可部署元件和基礎配置設定,它並且關聯了一個負載均衡器和安全組,當部署完畢後,服務組就相當於一組執行中的軟體例項集合,如(VM 例項,Kubernetes pods)。
  • Cluster:叢集,由使用者定義的,對服務組的邏輯分組。
  • Applications:應用,是對叢集的邏輯分組。
  • Load Balancer:負載均衡,用於將外部網路流量重定向到服務組中的機器例項,還可以指定一系列規則,用來對服務組中的機器例項做健康監測。
  • Security Group:安全組,定義了網路訪問許可權,由IP、埠和通訊協議組成的防火牆規則。

2、環境、軟體準備

上一篇文章 初試 Kubernetes 叢集中使用 Helm 搭建 Spinnaker 平臺 中,我們演示瞭如何在 Kubernetes 叢集中通過 Helm 安裝 Spinnaker,接下來我們使用該環境,來演示一下 Spinnaker 叢集管理功能,如何使用 Spinnaker 執行 deploy 和 scale 一個應用到 Kubernetes 叢集中。本次演示環境,我是在本機 MAC OS 上操作,以下是安裝的軟體及版本:

  • Docker: version 17.09.0-ce
  • Oracle VirtualBox: version 5.1.20 r114628 (Qt5.6.2)
  • Minikube: version v0.22.2
  • Helm: version v2.8.0
  • Kuberctl:
    • Client Version: v1.8.1
    • Server Version: v1.7.5

注意:這裡我就不在詳細描述安裝過程,具體步驟參考 初試 Kubernetes 叢集中使用 Helm 搭建 Spinnaker 平臺 即可,寫的很詳細,本次主要通過一個 Demo 演示叢集管理的簡單操作過程。

3、通過 Spinnaker 部署和擴充套件容器應用到 Kubernetes

這裡我們通過一個簡單的 Nginx Server 示例來演示一下如何操作的吧!

3.1、建立應用(Application)

瀏覽器訪問 http://127.0.0.1:9000 進入 Spinnaker UI 頁面,點選導航欄 “Applications” 進入應用列表頁面,點選頁面右上角 “Actions” —> “Create Application” 建立一個應用。

這裡寫圖片描述

注意:進入到應用列表頁面,預設已經有 5 個應用,這是在安裝 Spinnaker、Helm、Kubernetes 時自動建立的應用,可以不用管它們。

在建立應用彈框頁面,填寫 Name、Owner Email 等資訊,這裡我填寫 nginx 作為應用名稱,點選 “Create” 按鈕完成應用的建立。

這裡寫圖片描述

3.2、建立負載均衡策略(Load Balancer)

建立完 nginx 應用後,自動進入該應用詳情頁面,點選頂部導航欄 “LOAD BALANCERS”,進入負載均衡列表頁面,預設是沒有任何記錄的。

這裡寫圖片描述

點選頁面 “Create Load Balancer” 按鈕,在建立負載均衡彈框頁面填寫資訊,點選 “Create” 完成負載均衡策略的建立。這裡 “Stack” 處填 prod,可以理解為作為生產環境使用標示,當然也可以寫 dev、test 等以示區分運用到不同環境。在 “Ports” 欄下邊 “Target Port” 處填 80,作為對外轉發目標埠。“Advanced Settings” 欄下邊 “Type” 處選擇 NodeType,這裡可選項有 ClusterIP、LoadBalancer、NodeType,針對不同的應用型別和平臺,選擇所支援的型別,這裡我選擇 NodeType。

這裡寫圖片描述

建立完畢後,我們會發現在 nginx 應用的 Load Balancers 頁面就會出現剛上邊建立的 nginx-prod 負載均衡記錄,只不過該記錄下沒有關聯任何 Service Group。注意:這裡 Spinnaker 預設會以 Application Name - LoadBalancer Stack 方式來命名負載均衡策略。

這裡寫圖片描述

3.3、建立服務組(Server Group)

建立完 nginx-prod 負載均衡策略之後,點選導航欄 “CLUSTERS”,進入叢集列表頁面,預設也是沒有任何記錄的。點選 “Create Service Group” 按鈕,在建立服務組彈框頁面填寫資訊,點選 “Create” 完成服務組的建立。這裡 “Stack” 處依舊填 prod,意思跟上邊一樣,“Containers” 處填寫容器 Docker 映象地址,這裡我們直接可以使用 DockerHub 官方提供的 index.docker.io/library/nginx:latest 最新映象地址作為本次演示的映象。“Load Balancers” 處選擇上邊建立的 nginx-prod 負載均衡策略。“Replicas” 欄下方 “Capacity” 處填 10,意味著該服務組將啟動 10 個由該容器映象啟動的 Pod 例項,這裡我為了好演示,故意多啟動一些服務,實際應用中按需填寫即可。“Container” 欄下方 “Pull Policy” 處選擇 IFNOTPRESENT,當然也可以選擇 ALWAYS、NEVER 來作為映象拉取策略。點選 “Probes” 欄,點選 “Enable Readiness Probe” 和 “Enable Liveness Probe” 按鈕來新增探測,預設配置即可,這裡 “Readiness Probe” 為服務是否準備就緒的探測,“Liveness Probe” 為服務是否發生故障或存活探測。

這裡寫圖片描述

這裡寫圖片描述

點選完 “Create” 按鈕後,就會進入到自動建立該 nginx-prod 服務組過程頁面,總共分為 8 個步驟。注意:這裡 Spinnaker 預設會以 Application Name - Server Group Stack 方式來命名服務組。

這裡寫圖片描述

建立服務組需要一段時間,因為涉及到拉取映象,啟動服務等操作。在等待服務組建立完畢的過程中,我們去 Clusters 頁面,會看到 nginx-prod 服務組下會顯示 10 個紅色的小塊,這表示這些例項還沒有準備好。

這裡寫圖片描述

稍等一會,等這 10 個例項啟動完畢,此時該頁面 nginx-prod 服務組下會變成 10 個綠色的小塊,表示這些例項都已經啟動成功啦!

這裡寫圖片描述

4、驗證並測試叢集服務

好了,現在叢集服務已經啟動啦!我們可以驗證一下服務是否正常啟動。首先通過 kubectl get service 命令列獲取 Kubernetes 叢集執行中的服務。

$ kubectl get service
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.0.0.1     <none>        443/TCP        38d
nginx-prod   NodePort    10.0.0.71    <none>        80:32056/TCP   6m

我們發現已經成功建立了 nginx-prod 服務,並且 nginx-prod 負載均衡策略將 NodePort 埠 32056 對映到 80 埠上了。此時,通過 minikube service nginx-prod 命令列,瀏覽器會自動開啟該 nginx-prod 服務對應的 Web 頁面 http://192.168.99.100:32056

$ minikube service nginx-prod
Opening kubernetes service default/nginx-prod in default browser...

這裡寫圖片描述

OK 是可以正常訪問的,妥妥沒問題。接下來我們通過 kubectl get pods 命令檢視啟動的 nginx-prod Pod 列表,跟 Spinnaker UI 頁面上 Cluster 服務組列表顯示對比是否一致。

$ kubectl get pods
NAME                              READY     STATUS    RESTARTS   AGE
hello-minikube-2754686071-0g6h3   1/1       Running   2          2d
nginx-prod-v000-24z8p             1/1       Running   0          3m
nginx-prod-v000-3kplw             1/1       Running   0          3m
nginx-prod-v000-58329             1/1       Running   0          3m
nginx-prod-v000-8cvb3             1/1       Running   0          3m
nginx-prod-v000-c7pjr             1/1       Running   0          3m
nginx-prod-v000-drpds             1/1       Running   0          3m
nginx-prod-v000-g4vxp             1/1       Running   0          3m
nginx-prod-v000-jdmvp             1/1       Running   0          3m
nginx-prod-v000-szllm             1/1       Running   0          3m
nginx-prod-v000-xvhqt             1/1       Running   0          3m

這裡寫圖片描述

我們會發現,是一模一樣噠!接下來我們人為刪除一個 nginx-prod 服務組中的一個 Pod,看下能否自動開啟新一個新的 Pod 來達到之前定義的容量 10 吧。刪除 Pod 很簡單,可以通過 kubectl delete ... 命令列刪除,當然也可以通過 Kubernetes Dashboard UI 頁面刪除,這裡我演示下通過 Dashboard UI 頁面刪除吧。首先通過 minikube dashboard 命令開啟其 UI 頁面。

$ minikube dashboard
Opening kubernetes dashboard in default browser...

訪問 Dashboard UI 頁面,點選左側 “Services”,右側彈出所有服務列表,點選 nginx-prod 服務,進入到該服務詳情頁面,這裡會列出來所有的與 nginx-prod 關聯的 Pod 列表,我們選擇任意一個 Pod 點選記錄最後 “Actions” 彈出下拉選單中點選 “Delete” 項,彈出確認刪除對話方塊,點選 “DELETE” 按鈕完成刪除。

這裡寫圖片描述

這裡寫圖片描述

最後,我們去 Spinnaker UI 頁面檢視 Clusters 下 nginx-prod 服務組關聯 Pod 已經成功刪除並生成了一個新的 Pod 啦!

這裡寫圖片描述

參考資料