Rancher 是一款功能強大的容器管理平台,提供簡化的介面和工具,方便開發者和維運人員佈署和管理容器化應用程式。本文將逐步引導讀者完成 Rancher 的安裝設定,並探討 Cattle 叢集的佈署、容器的健康檢查組態、智慧排程策略以及應用程式範本的使用。此外,文章還會介紹如何整合 GlusterFS 分散式儲存和 MariaDB Galera 叢集,以提升應用程式的可靠性和可用性。最後,我們將示範如何使用 Route53 DNS Stack 實作自動化的 DNS 管理,進一步簡化容器化應用程式的佈署流程。

Rancher容器管理平台的安裝與設定

Rancher是一個相對較新的容器管理平台,在撰寫本文時,它剛剛釋出了1.0版本。Rancher Labs將Rancher描述為一個開源軟體平台,專門為在生產環境中執行容器而設計。Rancher能夠從任何公有或私有雲中取得原始計算資源,以Linux主機的形式存在。每個Linux主機可以是虛擬機器或物理機器。

Rancher的安裝

要安裝Rancher,首先需要在DigitalOcean上啟動一個伺服器,使用Docker Machine:

docker-machine create \
--driver digitalocean \
--digitalocean-access-token sdnjkjdfgkjb345kjdgljknqwetkjwhgoih314rjkwergoiyu34rjkherglkhrg0 \
--digitalocean-region lon1 \
--digitalocean-size 1gb \
rancher

接下來,組態本地客戶端連線到主機,然後啟動Rancher:

eval $(docker-machine env rancher)
docker run -d --restart=always -p 8080:8080 rancher/server

內容解密:

  • docker-machine create 命令用於建立一個新的Docker主機。
  • --driver digitalocean 指定了使用DigitalOcean作為雲端服務提供商。
  • --digitalocean-access-token 需要替換為實際的DigitalOcean存取令牌。
  • docker run 命令啟動了一個Rancher伺服器容器,並映射了8080埠。

檢查Rancher容器狀態

執行以下命令檢查Rancher容器的狀態:

docker ps

這將列出正在執行的容器,包括Rancher伺服器容器。記錄下容器的名稱,例如jolly_hodgkin

檢視Rancher日誌

透過以下命令檢視Rancher容器的日誌:

docker logs -f <容器名稱>

內容解密:

  • docker logs 命令用於檢視容器的日誌輸出。
  • -f 引數表示持續輸出日誌,直到手動停止。

存取Rancher Web介面

當日誌停止更新時,表示Rancher已經準備就緒。執行以下命令開啟瀏覽器存取Rancher Web介面:

open http://$(docker-machine ip rancher):8080/

這將開啟Rancher的登入頁面。

強化Rancher的安全性

首次登入後,會看到一個警告圖示,提示需要組態身份驗證。點選頂部選單中的Admin,然後選擇Access Control,按照指示組態GitHub作為身份驗證後端。

組態GitHub身份驗證步驟:

  1. 在Rancher的Access Control頁面中,點選GitHub連結,按照指示註冊Rancher應用。
  2. 填寫必要的應用資訊,包括授權回撥URL。
  3. 取得Client ID和Client Secret,並在Rancher頁面中填寫。
  4. 點選Authenticate with GitHub按鈕,完成身份驗證組態。

內容解密:

  • 使用GitHub作為身份驗證後端,可以提高安全性並簡化使用者管理。
  • 正確組態Client ID和Client Secret是完成身份驗證的關鍵步驟。

登出與重新登入

完成身份驗證組態後,登出並重新登入,以驗證組態是否生效。

Rancher 的 Cattle 叢集佈署與管理

Rancher 支援多種不同的排程器(scheduler),包括 Docker Swarm、Kubernetes 以及 Rancher 自身的 Cattle。在本章中,我們將重點介紹如何使用 Cattle 排程器來佈署和管理叢集。

為什麼要使用 Cattle?

Cattle 是 Rancher 的預設排程器,它提供了一種簡單而強大的方式來管理和佈署容器叢集。使用 Cattle,您可以輕鬆地在多台主機上佈署和管理容器,而無需擔心底層的基礎設施。

佈署 Cattle 叢集

要佈署 Cattle 叢集,首先需要新增主機到 Rancher。在 Rancher 的首頁上,點選「Add Host」按鈕,然後選擇 DigitalOcean 作為主機提供者。

設定主機引數

在新增主機的頁面中,您需要填寫以下資訊:

  • 數量:選擇要啟動的主機數量。
  • 名稱:為主機指定一個名稱。
  • 描述:為主機新增一個簡短的描述。
  • 存取權杖:輸入您的 DigitalOcean API 權杖。
  • 映像檔:選擇要使用的作業系統映像檔(目前僅支援 Ubuntu 14.04 x64)。
  • 大小:選擇主機的大小。
  • 區域:選擇要在哪個 DigitalOcean 資料中心啟動主機。

填寫完畢後,點選「Create」按鈕,Rancher 將使用 DigitalOcean API 啟動您的主機。

監控主機狀態

要監控主機的狀態,請點選頂部選單中的「Infrastructure」,然後點選「Hosts」。在這個頁面中,您可以看到正在佈署的主機及其狀態。

佈署叢集應用程式

要佈署叢集應用程式,請點選頂部選單中的「Applications」,然後點選「Add Service」。在「Add Service」頁面中,填寫以下資訊:

  • 規模:選擇要在每台主機上執行的容器例項數量。
  • 名稱:為服務指定一個名稱。
  • 描述:為服務新增一個簡短的描述。
  • 選擇映像檔:選擇要使用的 Docker 映像檔。
  • 連線埠對映:設定連線埠對映。

填寫完畢後,點選「Create」按鈕,Rancher 將佈署您的叢集應用程式。

設定負載平衡器

要設定負載平衡器,請點選「Stacks」,然後點選預設服務旁邊的下拉箭頭。選擇「Add Load Balancer」,然後填寫以下資訊:

  • 規模:選擇要執行的負載平衡器容器例項數量。
  • 名稱:為負載平衡器指定一個名稱。
  • 描述:為負載平衡器新增一個簡短的描述。
  • 監聽連線埠:設定負載平衡器的監聽連線埠。
  • 目標服務:選擇要將流量轉發到的目標服務。

負載平衡器組態詳解

在設定負載平衡器時,我們需要指定以下引數:

* **Listening Ports**: 源 IP/Port 80,預設目標連線埠 80
* **Target Service**: MyClusterApp

這些設定將允許負載平衡器將流量轉發到我們的叢集應用程式。

檢視後台運作

Rancher 的強大之處在於其後台運作。要了解後台正在發生的事情,請點選頂部選單中的「Infrastructure」,然後點選「Hosts」。在這個頁面中,您可以看到正在執行的容器,以及每個主機上的網路代理容器。

網路代理容器詳解

網路代理容器使用 iptables 在多台主機之間建立了一個網路,允許容器之間的跨主機連線。

iptables 是 Linux 核心防火牆的一部分,提供了一種組態網路規則的方式。

要確認這一點,請點選「Containers」按鈕。在這個頁面中,您可以看到目前正在執行的容器列表,包括執行叢集應用程式的三個容器。

Plantuml 圖表說明

圖表翻譯: 此圖示展示了 Rancher Server 如何透過 API 與 DigitalOcean 互動,以建立多台虛擬主機(Host 1、Host 2、Host 3)。每台主機上都執行著 MyClusterApp 容器的例項,這些例項透過 ClusterLoadBalancer 提供服務。圖中清晰地呈現了 Rancher 的叢集架構和負載平衡器的運作方式。

#### 內容解密:

上述 Plantuml 圖表展示了 Rancher Server 如何透過 DigitalOcean API 建立多台虛擬主機,並在這些主機上佈署 MyClusterApp 容器的例項。這些例項透過 ClusterLoadBalancer 提供服務,從而實作了負載平衡和高用性。

綜上所述,本章節介紹瞭如何使用 Rancher 的 Cattle 排程器來佈署和管理叢集。我們首先佈署了 Cattle 叢集,然後佈署了叢集應用程式,並設定了負載平衡器。最後,我們查看了後台運作,瞭解了 Rancher 如何使用 iptables 在多台主機之間建立網路。

Rancher容器管理與排程詳解

容器即時監控與操作

Rancher提供即時監控容器資源使用狀況的功能,包括CPU、記憶體、網路和儲存利用率。使用者可以透過介面直接檢視容器的執行狀態,並進行實時操作。

連線容器執行命令

  1. 在容器詳情頁面,點選右上角的「三個點」圖示。
  2. 選擇「Execute Shell」開啟瀏覽器內的終端機。
  3. 在終端機中執行命令如:
    • ps aux 檢視程式資訊
    • hostname 檢視主機名稱
    • cat /etc/*release 檢視系統版本資訊
  4. 測試容器間的連通性,例如:
    ping -c 2 10.42.220.91
    
    即使目標容器位於不同主機,依然可以順利通訊。

健康檢查組態與錯誤模擬

Rancher的健康檢查功能可以監控服務狀態並在必要時進行容器重建。

組態健康檢查

  1. 進入服務詳情頁面,點選右上角「三個點」並選擇「Upgrade」。
  2. 在升級頁面選擇「Health Check」標籤。
  3. 組態以下引數:
    • Health Check:HTTP Responds 2xx/3xx
    • HTTP Request/index.html
    • Port:80
    • When Unhealthy:Re-create
  4. 完成組態後點選「Upgrade」。

模擬錯誤觸發健康檢查

  1. 開啟容器Shell,執行以下命令停止NGINX:
    supervisorctl stop nginx
    
  2. 查詢並殺死NGINX程式:
    ps aux
    kill 12 13  # 示例PID
    
  3. Rancher檢測到服務異常後會自動重建容器。

Rancher目錄功能與應用佈署

Rancher提供預建的應用範本,簡化佈署流程。

佈署WordPress範例

  1. 進入Catalog頁面,選擇WordPress範本。
  2. 填寫堆積疊名稱和描述後啟動。
  3. Rancher自動佈署MariaDB和WordPress容器。
  4. 系統自動組態負載平衡,避免埠衝突。

排程器智慧排程解析

Rancher的排程器會根據主機資源使用情況智慧分配容器。例如在佈署WordPress時,系統自動避開已佔用80埠的主機,選擇其他可用主機佈署。

圖表說明:Rancher排程流程

圖表翻譯: 此圖示展示了Rancher排程器的工作流程。首先接收使用者請求,然後對各主機進行資源檢查。若某主機出現埠衝突,則跳過該主機。最後在可用主機上佈署容器並進行負載平衡組態,完成服務上線。

重點技術解析

  1. 容器健康檢查機制

    • 根據HTTP狀態碼檢查服務健康狀況
    • 可組態檢查頻率和重試次數
    • 異常時自動重建容器
  2. 智慧排程策略

    • 自動避開資源衝突的主機
    • 動態分配容器位置
    • 確保服務高用性
  3. 應用範本功能

    • 提供預組態的應用範本
    • 簡化複雜應用的佈署流程
    • 自動處理依賴關係和網路組態

在 Rancher 中新增分享儲存與資料函式庫叢集

到目前為止,我們已經順利地使用 Rancher 進行了相關的設定,接下來讓我們來看看如何為我們的安裝新增一些分享儲存。DigitalOcean 並未提供區塊儲存(block storage),因此我們需要使用叢集檔案系統,以避免在應用程式中引入單點故障。

使用 Gluster FS 實作分散式儲存

Gluster FS 是一種可擴充套件的網路檔案系統。使用常見的標準硬體,您可以為媒體串流、資料分析和其它資料及頻寬密集型任務建立大型分散式儲存解決方案:https://www.gluster.org

當您瀏覽目錄時,可能會注意到其中有幾個儲存專案,我們將使用 GlusterFS 來提供分散式儲存。

  1. 啟動 Gluster FS:點選 Gluster FS 目錄項中的「View Details」。
  2. 在表單頁面中,保持所有設定為預設值,然後點選頁面底部的「Launch」按鈕。

內容解密:

  • 啟動 Gluster FS 的過程中,Rancher 會建立多個容器來組成 Gluster FS 叢集。
  • 完成後,您將看到總共 12 個容器,其中 6 個正在執行,另外 6 個則被標記為已啟動,這些容器作為執行中容器的卷。

組態 Convoy 以使用 Gluster FS

現在我們的 Gluster FS 叢集已經啟動並執行,我們需要啟動 Convoy 並讓它知道 Gluster FS 叢集的存在。

  1. 傳回目錄頁面,點選 Convoy Gluster FS 條目旁邊的「View Details」。
  2. 在表單頁面中,從 Gluster FS 服務下拉選單中選擇我們的 Gluster FS 叢集,保持其他設定為預設值。
  3. 點選「Launch」按鈕,下載並啟動 convoy-gluster 容器。

內容解密:

  • Convoy 用於將 Gluster FS 暴露給我們的容器。
  • 成功啟動後,您應該會看到四個正在執行的容器。
  • 在次級選單中的「Stacks」旁邊會出現一個新的「System」圖示,我們的 Convoy Gluster 堆積疊可以在這裡找到。

建立 MariaDB Galera 叢集

我們不希望將資料函式庫儲存在分享或分散式檔案系統上,目錄中的另一個專案是啟動 MariaDB Galera 叢集。

Galera Cluster for MySQL 是根據同步複製的真正多主叢集。它是一種易於使用的高用性解決方案,提供高系統執行時間,無資料丟失,並具有未來可擴充套件性:http://galeracluster.com/products/

  1. 啟動 Galera Cluster:點選 Galera Cluster 專案中的「View Details」,填寫所需的資料函式庫憑證。
  2. 填寫資料函式庫憑證後,點選「Launch」按鈕,叢集將需要幾分鐘時間來啟動。

內容解密:

  • Galera Cluster 將位於負載平衡器後面,確保資料函式庫請求始終被導向活躍的主資料函式庫伺服器。
  • 成功啟動後,您將看到總共 13 個容器,它們組成了叢集和負載平衡器。

使用 WordPress 與叢集化資料函式庫和儲存

現在,我們已經組態了叢集檔案系統和資料函式庫,讓我們再次嘗試啟動 WordPress。

  1. 建立新的 Stack:點選頂部選單中的「Applications」,確保在「Stacks」頁面,然後點選「New Stack」。

  2. 將 Stack 名稱為 WordPress,然後點選「Create」,接著點選「Add Service」。

  3. 組態 WordPress 服務,包括環境變數和卷。

@startuml skinparam backgroundColor #FEFEFE skinparam componentStyle rectangle

title Rancher容器管理平台安裝設定與叢集佈署

package “Docker 架構” { actor “開發者” as dev

package "Docker Engine" {
    component [Docker Daemon] as daemon
    component [Docker CLI] as cli
    component [REST API] as api
}

package "容器運行時" {
    component [containerd] as containerd
    component [runc] as runc
}

package "儲存" {
    database [Images] as images
    database [Volumes] as volumes
    database [Networks] as networks
}

cloud "Registry" as registry

}

dev –> cli : 命令操作 cli –> api : API 呼叫 api –> daemon : 處理請求 daemon –> containerd : 容器管理 containerd –> runc : 執行容器 daemon –> images : 映像檔管理 daemon –> registry : 拉取/推送 daemon –> volumes : 資料持久化 daemon –> networks : 網路配置

@enduml

   **圖表翻譯:** 此圖示展示了 WordPress 服務如何連結到 galera-lb 以及使用由 convoy-gluster 提供支援的 wpcontent 卷,該卷儲存在 Gluster FS 上。

4. **新增負載平衡器**:在 WordPress 服務執行後,新增一個名為 `WordPressLB` 的負載平衡器,將流量導向 WordPress 服務的 80 埠。

#### 內容解密:
- 成功組態後,您可以透過負載平衡器的 IP 地址存取 WordPress,並完成安裝。
- 這樣,我們就實作了 WordPress 容器與高用性資料函式庫後端結合,利用負載平衡器和 Gluster FS 儲存保持相同的 IP 地址和內容。

### 使用 Route53 DNS Stack 自動管理 DNS

最後一個要介紹的目錄專案是 DNS 管理器。這些專案可以自動連線到您的 DNS 提供商的 API,並為您啟動的每個堆積疊和服務建立 DNS 記錄。

由於我使用 Route53 管理我的 DNS 記錄,我點選了目錄畫面上的 Route53 DNS Stack 的「View Details」。按照提示組態 Route53 DNS Stack,即可實作自動化的 DNS 管理。