0%

[Rancher 系列文] - 介紹 Rancher

Rancher

Rancher 是一個由 Rancher Labs 的公司所維護的 Kubernetes 相關開源專案,Rancher Lab 於 2020 年底被 Suse 據傳已 600萬 ~ 700萬美金左右收購,因此如果目前搜尋
Rancher 相關的資源有時候會看到跟 Suse 這間公司有關的消息就不要太意外。

簡單來說,Rancher 是一個 Kubernetes 管理平台,希望能夠讓團隊用更簡單及有效率的方式去管理各式各樣的 Kubernetes 叢集,其支援幾種不同方式

  1. Rancher 自行維護的 Kubernetes 版本,Rancher Kubernetes Engine(RKE)
  2. 各大公有雲所提供的 Kubernetes 服務,如 AKS, EKS 以及 GKE
  3. 任何使用者自己創建的 Kubernetes 叢集

除了上述 Kubernetes 叢集外, Rancher 也支援眾多公有雲平台來簡化整個部署流程,譬如可以讓公有雲自動創建 VM 並且於 VM 上創建 RKE 叢集,而且這些 VM
還可以根據不同的需求設定不同的能力,譬如某些節點設定 4c8g(4vCPU, 8G Memory),某些給予 16c32g,同時有些專門當 worker,有些可以當 etcd/control plan等不同角色。

註: 不同來源的 Kubernetes 叢集功能上會有些許差異,詳細可以參閱官網介紹,RKE 跟 EKS/GKE 於 2.5.8 版本則擁有全部的操作能力,但是 AKS 或是其他使用者自行架設的 Kubernetes 叢集會有些功能沒辦法使用。

有些人會好奇,如果自己都已經有方式去架設跟管理自己的 Kubernetes 叢集,那為什麼還需要使用 Rancher 的管理平台?
就如同 Kubernetes 一樣,要不要導入 Rancher 也是要評估的,我認為符合下列情況的團隊其實並不一定要使用 Rancher,譬如

  1. 雲端環境直接採用 Kubernetes 服務,如 EKS/AKS/GKE
  2. 直接尋找系統整合商購買 Kubernetes 服務
  3. 沒有地端(On-premises)環境需求
  4. 公司不太想要使用開源專案,希望專案都要有人員提供技術服務

如果團隊都沒有符合上述需求時,其實可以評估看看是否要導入 Rancher
導入的第一個問題就是導入 Rancher 能夠帶來什麼好處?,為什麼要使用 Rancher?

我個人認為 Rancher 對於團隊帶來的好處有

  1. 很輕鬆地去架設一套 RKE 的環境,雖然本身是 Rancher 所維護的版本,但是大部分情況跟原生 Kubernetes 使用起來沒有差異。
  2. 如果團隊同時有地端跟雲端的混合環境,可以透過 Rancher 方便管理多套 Kubernetes
  3. 如果今天地端環境本身擁有網路防火牆限制,導致想要從外部使用 Kubectl 來存取與管理該地端上的 Kubernetes 叢集會有困難時,使用 Rancher 能夠輕鬆地處理這個問題。
  4. Rancher 提供的 Dashboard 提供滿多訊息,可以一目明瞭目前所有 Kubernetes 叢集的健康狀態,非工程人員也可以容易閱讀
  5. Rancher 本身支援不同的認證機制,可以跟團隊本身使用的認證服務整合,直接透過現有的狀態來認證與授權,管理上非常方便

有了上述功能後,來看一下從官方所節錄的架構圖,來看看導入 Rancher 後對於整個團隊有什麼變化?

上圖分成三個部分,左邊代表 DevOps Team,中間是 Rancher 管理平台,右邊則是公司的 IT Team.
Rancher平台(中間)

  1. Rancher 本身管理多套 Kubernetes 叢集,譬如圖中的 GKE/EKS,甚至可以跟 VMware 整合,將 RKE 安裝到產生的 VM 上
  2. 如果已經跟公有雲平台串接完畢(API),則可以透過 Rancher 的介面自動創立相關 VM 並且直接再上面創建 RKE 叢集,因此可以很方便根據需求創立 Dev/Staging/QA/Prod 等不同用途的 Kubernetes 叢集

IT Team(右邊)

  1. IT Team 對於公司內的環境會有比較不同的需求,譬如帳號認證授權,安全政策等
  2. IT 直接將 Rancher 與團隊內的身份機制整合,可以讓每個不同的 Kubernetes 都擁有不同的存取權限,譬如 QA Team 的人只擁有 QA 叢集的完全存取權限,而 Dev Team 的人可以存取 Dev 叢集,DevOps Team 的人則可以對所有叢集都有權限。
  3. 可以直接於 Rancher 本身設定相關的安全政策,這些安全政策會直接套用到所有託管的 Kubernetes 叢集內。
  4. Rancher 其實也有實作 Terraform 的介面,所以 IT Team 是可以直接透過 Terraform 使用 Infrastructure as Code 的概念來維護 Rancher,這樣就可以很簡單與快速的維護與創建各種叢集。

DevOps Team(左邊)

  1. DevOps Team 使用 IT Team 設定好的身份帳號來存取相關 Kubernetes 叢集
  2. Rancher 也提供 KUBECONFIG 供使用者透過 kubectl/helm 等工具使用,也可以將此資訊整合到 CI/CD 流程來達成自動部署。
  3. Rancher 也提供應用程式部署的相關機制讓使用者可以方便地管理 Kubernetes 上的應用
  4. Rancher 整合的 Monitoring/Logging/Alert 功能讓使用者用起來很簡單。
  5. Rancher Fleet 使用 GitOps 的方式簡化了部署流程,使用者只需要更新 Git Repo 就可以順利更新自己的應用程式,甚至本身對於 Kubernetes 底層不太熟悉都能夠順利部署進去

當然上述架構只是一個範例,實際上更有可能是 DevOps Team 而非 IT Team 需要維護 Rancher 本身,這部分完全是取決於團隊的分工與組成。

版本選擇

目前主流的 Rancher 版本是 v2.5 系列,如果還沒有使用過 Rancher 的讀者建議都直接使用 v2.5 系列版本,主要是 v2.5 相對於前版有很多重大修改,譬如

  1. Monitoring 功能的改進,v2.5 以前是用 Rancher 自行整合的 Prometheus/Grafana,所以使用者要客製化上會相對麻煩。 v2.5 整個架構都改成基於 Prometheus Operator 的做法,因此如果本來就熟悉 Prometheus Operator 的使用者可以更容易的使用 Rancher Monitoring 來加上自己想要的功能。
  2. Rancher 的 UI 也有大幅度的改動,過往瀏覽觀察 Cluster 的介面稱為 Cluster Manager,而新版的 Cluster Explorer 將會是未來維護的主要功能
  3. 整合 Rancher Fleet 來提供基於 GitOps 的部署方式,之後的章節會詳細介紹如何使用 Rancher Fleet 來管理多叢集的應用程式
  4. 提升與 AWS EKS 的整合,可以將已經創立的 EKS 直接整合到 Rancher 讓管理員用一個 Rancher 去管理多個 Kubernetes

目前 v2.6 版本還在積極開發中,目前已知 2.6 也在努力提升與 AKS/GKE 的整合。
同時 Rancher v2.5 之後 Rancher 本身的安裝方式也都轉移到 Helm3,因此如果需要從舊版 Rancher 轉移到新版 Rancher 時,有可能會遇到 Helm 轉移的問題
所以新的使用者都強烈建議直上 v2.5,而不要再嘗試舊版了。

Rancher 介紹

Rancher 本身是一個管理 Kubernetes 的平台,同時又要提供 UI 介面給使用者管理,因此其本身就是由多個內部元件組成的,如下圖(該圖節錄自官方網站)

註: 此為 v2.5 的架構

從官方的架構圖中可以觀察到, Rancher 本身除了 API Server 作為整體邏輯處理之外,還有額外的元件譬如

  1. Cluster Controller
  2. Authentication Proxy
  3. etcd

其中 Cluster Controller 可以用來控制不同類型的 Kubernetes Cluster,不論是透過 Rancher 所架設的 RKE 或是其他如 EKS/AKS 等。
這邊要特別注意的,任何要給 Rancher 給控管的 Kubernetes Cluster 都會必須要於其叢集中安裝一個 Cluster Agent。 Rancher 要透過 Agent 的幫忙才可以達到統一控管的效用。

API Server 方面本身面對的 Client 很多,有使用 UI 瀏覽的,有使用 CLI 操作,甚至連 Kubernetes API 也都是由 API 處理的。
這邊解釋一下為什麼 Kubernetes API 需要走 Rancher API Server,試想一個純地端的網路環境,如果使用者想要透過 kubectl/helm 等指令去存取該 Kubernetes,這意味者該地端環境需要將 API Server 的 6443 port 給放出來,同時還要準備好相關憑證等。如果該 Kubernetes Cluster 是由 Rancher 所創立的,那 Rancher 可以透過與 Agent 的溝通過程來交換這些 Kubernetes API 的操作,這意味者使用者只要對 Rancher API Server 發送 Kubernetes API 等相關的指令,這些最後都會被 Rancher API Server 給轉發到底下 Kubernetes Cluster 的 API Server。這樣地端環境也不需要開啟 6443 port,只要本身叢集內的 Agent 有跟 Rancher API Server 有保持連線即可。使用上大幅度簡化整個操作流程。
最後提醒的是此功能並非一定要使用,針對 RKE 叢集也是有辦法不經由 Rancher 而直接存取 Kubernetes 。

上述的架構圖也清楚的告訴使用者,要架設一個 Rancher 服務要準備上述這些元件,而官方網站本身則提供的數種不同的安裝方式,而這些方式又會分成兩大類,單一節點或是多節點。
單一節點的安裝方式適合測試使用,而生產環境下會建議採用多節點的方式去部署 Rancher Server,畢竟 Rancher 本身是管理多套 Kubernetes 叢集的服務,因此本身最好要有 HA 的機制去確保不會因為單一節點損毀而導致後面一連串的錯誤。

下圖節錄自官方網站

該架構圖呈現了兩種不同模式下的架構,最大的差別就只是 Rancher Server 本身到底如何被外界存取以及 Rancher Server 有無 HA 等特性。

單一節點的安裝非常簡單,只要使用 docker 指令就可以很輕鬆的起一個 Rancher Server,不過要特別注意的是透過這種方法部署的 Rancher 不建議當作生產環境,最好只是拿來測試即可。
其原理其實是透過一個 docker container 起 Rancher 服務,服務內會用 RKE 創建一個單一節點的 Kubernetes 節點,該節點內會把 Rancher 的服務都部署到該 Kubernetes 內。

多節點安裝的安裝概念很簡單,就是把 Rancher 的服務安裝到一個 Kubernetes 叢集內即可, Rancher 本身提供 Helm 的安裝方式,所以熟悉 Helm 指令就可以輕鬆的安裝一套 Rancher 到 Kubernetes 叢集內。
官方文件提供了不同種 Kubernetes 叢集的安裝方式,包含

  1. RKE (使用 RKE 指令先行創建一個 K8S 叢集,再用 Helm 把 Rancher 安裝進去)
  2. EKS
  3. GKE
  4. K3s (輕量級 RKE,針對 IoT 等環境設計的 Kubernetes 版本)
  5. RKE2 (針對美國安全相關部門所開發更為安全性的 RKE 版本)

除了上述所描述的一些安裝方式外, Rancher 也跟 AWS 有相關整合,能夠透過 CloudFormation 的方式透過 EKS 部署 Rancher 服務,詳細的可以參閱Rancher on the AWS Cloud
Quick Start Reference Deployment

最後為了讓整體的安裝更加簡化,Rancher 於 v2.5.4 後釋出了一個實驗的新安裝方式,稱為 RancherD
該服務會先創建一個 RKE2 的叢集,並且使用 Helm 將相關服務都安裝到該 RKE2 叢集中。

最後要注意的是,不論是哪種安裝方式,都需要針對 SSL 憑證去進行處理,這部分可以用 Rancher 自行簽署,自行準備或是透過 Let’s Encrypt 來取得都可以,所以安裝時也需要對 SSL 有點概念會比較好,能的話最好有一個屬於自已的域名來方便測試。
單一節點的 Docker Container 部署方式有可能會遇到 RKE 內部 k8s 服務憑證過期的問題,如果遇到可以參閱下列解決方式處理 Rancher container restarting every 12 seconds, expired certificates

個人資訊

我目前於 Hiskio 平台上面有開設 Kubernetes 相關課程,歡迎有興趣的人參考並分享,裡面有我從底層到實戰中對於 Kubernetes 的各種想法

詳細可以參閱
線上課程詳細資訊: https://course.hwchiu.com/

另外,歡迎按讚加入我個人的粉絲專頁,裡面會定期分享各式各樣的文章,有的是翻譯文章,也有部分是原創文章,主要會聚焦於 CNCF 領域
https://www.facebook.com/technologynoteniu

如果有使用 Telegram 的也可以訂閱下列頻道來,裡面我會定期推播通知各類文章
https://t.me/technologynote

你的捐款將給予我文章成長的動力

Welcome to my other publishing channels