版本:v2.5
Rancher介紹
什么是 Rancher?
Rancher 是為使用容器的公司打造的容器管理平台。Rancher 簡化了使用 Kubernetes 的流程,開發者可以隨處運行 Kubernetes(Run Kubernetes Everywhere),滿足 IT 需求規范,賦能 DevOps 團隊。
功能包括:
多集群管理
多項目/命名空間管理
多用戶管理
儀表盤
多集群應用
安全
持續交付
RKE集群
更新證書
備份/恢復
告警
商店
通知
日志
監控
Istio
CIS掃描
下游集群支持:
Rancher Server 架構
參考:https://docs.rancher.cn/docs/rancher2.5/overview/architecture/_index
Rancher Server 由認證代理(Authentication Proxy)、Rancher API Server、集群控制器(Cluster Controller)、etcd 節點和集群 Agent(Cluster Agent) 組成。除了集群 Agent 以外,其他組件都部署在 Rancher Server 中。
您可以在單個節點或高可用的 Kubernetes 集群上安裝 Rancher。由於單節點安裝只適用於開發和測試環境,而且單節點和高可用集群之間無法進行數據遷移,所以我們建議您從一開始就使用高可用的 Kubernetes 集群來部署 Rancher Server,而且您需要分開部署運行 Rancher Server 的集群和運行自己業務的下游集群。
下圖描述的是用戶通過 Rancher Server 管控 Rancher 部署的 Kubernetes 集群(RKE 集群)和托管的 Kubernetes 集群的(EKS)集群的流程。以用戶下發指令為例,指令的流動路徑如下:
- 首先,用戶通過 Rancher UI(即 Rancher 控制台) Rancher 命令行工具(Rancher CLI)輸入指令;直接調用 Rancher API 接口也可以達到相同的效果。
- 用戶通過 Rancher 的代理認證后,指令會進一步下發到 Rancher Server 。
- 與此同時,Rancher Server 也會執行容災備份,將數據備份到 etcd 節點。
- 然后 Rancher Server 把指令傳遞給集群控制器。集群控制器把指令傳遞到下游集群的 Agent,最終通過 Agent 把指令下發到指定的集群中。
如果 Rancher Server 出現問題,我們也提供了備用方案,您可以通過授權集群端點管理集群。
考慮到性能表現和安全因素,我們建議您使用兩個 Kubernetes 集群,分開部署 Rancher Server 和工作負載。部署 Rancher Server 后,您可以創建或導入集群,然后在這些集群上運行您的工作負載。
- 通過Rancher認證代理管理 Kubernetes 集群
您可以在單個節點或高可用的 Kubernetes 集群上安裝 Rancher。由於單節點安裝只適用於開發和測試環境,而且單節點和高可用集群之間無法進行數據遷移,所以我們建議您從一開始就使用高可用的 Kubernetes 集群來部署 Rancher Server,而且您需要分開部署運行 Rancher Server 的集群和運行自己業務的下游集群。
與下游集群交互
認證代理
集群控制器和集群 Agent
節點 Agents
授權集群端點
啟動 Kubernetes 集群所需工具:
下游 Kubernetes 集群的類型決定了啟動集群需要的工具。集群類型主要分為以下幾種:
- Rancher 通過雲供應商自動創建節點部署 Kubernetes 集群
Rancher 可以動態啟動位於雲上的節點,如 Amazon EC2、DigitalOcean、Azure 和 vSphere,然后在節點上安裝 Kubernetes。Rancher 使用 RKE 和 docker-machine啟動這種集群。
- Rancher 通過自定義主機部署的 Kubernetes 集群
配置這種集群時,Rancher 可以在已有的虛擬機、物理機或雲主機上安裝 Kubernetes。這種集群叫自定義集群。Rancher 使用RKE啟動這種集群。
- 雲服務供應商提供的托管的 Kubernetes 集群
配置這種集群時,Kubernetes 由雲服務供應商安裝,如 GKE、ECS 和 AKS。Rancher 使用kontainer-engine來調用雲廠商的 API 來啟動集群。
- 導入的 Kubernetes 集群
這種情況下,Rancher 只需要連接到已經配置好 Kubernetes 的集群。因此,Rancher 只設置 Rancher Agent 與集群通信,不直接啟動集群。
推薦架構
參考:https://docs.rancher.cn/docs/rancher2.5/overview/architecture-recommendations/_index
我們建議將 Rancher Server 安裝在高可用的 Kubernetes 集群上,主要是因為它可以保護 Rancher Server 的數據。在高可用安裝中,負載均衡器充當客戶端的單點入口,並在集群中的多台服務器之間分配網絡流量,這有助於防止任何一台服務器成為單點故障。
- K3s Kubernetes 集群安裝
如果您是首次安裝 Rancher v2.4,建議將其安裝在 K3s Kubernetes 集群上。這種 K3s 架構的一個主要優點是,它允許使用外部數據庫保存集群數據,從而可以將 K3s 服務器節點視為無狀態的。
在 K3s 集群上安裝 Rancher 的功能是在 Rancher v2.4 中引入的。K3s 易於安裝,僅需要 Kubernetes 一半的內存,而且所有組件都在一個不超過 100 MB 的二進制文件中。
- RKE Kubernetes 集群安裝
如果要安裝 Rancher v2.4 之前的版本,您需要在 RKE 集群上安裝 Rancher,該集群中的數據存儲在每個有 etcd 角色的節點上。在 Rancher v2.4 中,沒有將 Rancher Server 從 RKE 集群遷移到 K3s 集群的方法。所有版本的 Rancher Server(包括 v2.4+)仍然可以安裝在 RKE 集群上。
在 RKE 安裝中,集群數據將在集群中的三個 etcd 節點上進行復制,這是為了保障在一個 etcd 節點發生故障時,可以提供冗余和數據復制。
- 負載均衡的推薦配置參數
我們建議您使用以下方案,配置您的負載均衡和 Ingress Controller:
Rancher 的 DNS 應該被解析到四層負載均衡器上。
負載均衡器應該把 TCP/80 端口和 TCP/443 端口的流量轉發到集群中全部的 3 個節點上。
Ingress Controller 將把 HTTP 重定向到 HTTPS,在 TCP/443 端口使用 SSL/TLS。
Ingress Controller 把流量轉發到 Rancher Server 的 pod 的 80 端口。
Kubernetes 概念
參考:https://docs.rancher.cn/docs/rancher2.5/overview/concepts/_index
名詞解釋
參考:https://docs.rancher.cn/docs/rancher2.5/overview/glossary/_index
Rancher 名詞解釋
參考:https://docs.rancher.cn/docs/rancher2.5/overview/rancher-glossary/_index
安裝指南
提示:
在 v2.4 之前的 Rancher 中,Rancher 服務器需要運行在 RKE Kubernetes 集群上。
在 Rancher v2.4.x 中,Rancher 需要運行在 RKE Kubernetes 集群或 K3s Kubernetes 集群上。
在 Rancher v2.5 中,Rancher 可以運行在任何 Kubernetes 集群上。
安裝介紹
參考:https://docs.rancher.cn/docs/rancher2.5/installation/_index
我們建議使用 Kubernetes 程序包管理器 Helm 在專用的 Kubernetes 集群上安裝 Rancher。在 RKE 集群中,需要使用三個節點以實現高可用性。在 K3s 集群中,僅需要兩個節點即可。
另一個選擇是在 Kubernetes 集群上使用 Helm 安裝 Rancher,僅在集群中使用單個節點。雖然在這種情況下的 Rancher Server 不具有高可用性,但是這種架構既節省了資源,又保留了可擴展性。如果您想在短期內通過使用單個節點來節省資源,同時又保留高可用性遷移路徑,最合適的架構就是單節點 Kubernetes 安裝。
我們建議在 Kubernetes 集群上安裝 Rancher,因為在多節點集群中,Rancher Server 可以實現高可用。這種高可用配置可以提升訪問下游集群的穩定性。
因此,我們建議對於生產級別的架構,您應該使用 RKE 或 K3s 創建高可用的 Kubernetes 集群,然后在這個集群上安裝 Rancher。安裝 Rancher 后,您可以使用 Rancher 部署和管理 Kubernetes 集群。
為了測試或演示目的,您可以在單個節點上通過 Docker 安裝 Rancher,這個過程非常簡潔,基本上可以實現開箱即用。
- RKE 高可用安裝的 CPU 和 內存要求
這些要求適用於安裝了 Rancher Server 的 RKE Kubernetes 集群中的每個主機。
聯系 Rancher,如果您要管理 2000+ 集群和/或 20000+ 節點。
- K3s 高可用安裝的 CPU 和 內存要求
這些要求適用於安裝了 Rancher Server 的 K3s Kubernetes 集群中的每個主機。
聯系 Rancher,如果您要管理 2000+ 集群和/或 20,000+ 節點。
- Ingress
Rancher 安裝的 Kubernetes 集群中的每個節點都應該運行一個 Ingress。
Ingress 應被部署為 DaemonSet,以確保你的負載平衡器能夠成功地將流量路由到所有節點。
對於 RKE、K3s 和 RancherD 的安裝,你不需要手動安裝 Ingress,因為它是默認安裝的。
對於托管的 Kubernetes 集群(EKS、GKE、AKS)和 RKE2 Kubernetes 安裝,你將需要設置 Ingress。
- 磁盤
Rancher 的性能取決於 etcd 在集群中的性能。為了確保最佳速度,我們建議使用 SSD 磁盤來支持 Rancher 管里面的 Kubernetes 集群。在雲提供商上,您還需要使用允許最大 IOPS 的最小大小。在較大的集群中,請考慮使用專用存儲設備存儲 etcd 數據和 wal 目錄。
- 節點 IP 地址
無論您是在單個節點上還是在 Kubernetes 集群上安裝 Rancher,每個節點都應配置一個靜態 IP。如果使用 DHCP,則每個節點應具有 DHCP 預留,以確保該節點分配的相同 IP 地址。
- 端口要求
為了正常運行,Rancher 需要在 Rancher 節點和下游 Kubernetes 集群節點上開放一些端口。端口需求列出了不同集群類型的 Rancher 和下游集群的所有必要端口。
高可用安裝
參考:https://docs.rancher.cn/docs/rancher2.5/installation/install-rancher-on-k8s/_index
先決條件:
Kubernetes 集群
CLI
Ingress Controller
Rancher 使用 Kubernetes 的 Helm 軟件包管理器安裝。Helm Charts 為 Kubernetes YAML 清單文檔提供了模板語法。
有了 Helm,我們可以創建可配置的 Deployment,而不只是使用靜態文件。
離線安裝說明
步驟 1:准備節點和私有鏡像倉庫
- K3s 高可用集群
在 K3s 集群中安裝 Rancher 高可用,我們建議為高可用安裝配置以下基礎設施:
2 個 Linux 節點:通常是虛擬機,您可以自行選擇的基礎設施提供商,例如 Amazon EC2、阿里雲、騰訊雲或者 vShpere 等。
1 個外置數據庫:用於存儲集群數據。我們支持 PostgreSQL,MySQL 和 etcd。
1 個負載均衡器:用於將流量轉發到這兩個節點。
1 條 DNS 記錄:用於將 URL 指向負載均衡器。這將成為 Rancher Server 的 URL,下游集群需要可以訪問到這個地址。
私有 Docker 鏡像倉庫:用於為您的節點分發 Docker 鏡像。
您還需要設置一個負載均衡器,以將流量定向到兩個節點上的 Rancher 副本。這樣可以在單個節點不可用時,繼續保障與 Rancher 管理面的連接。
在后續步驟中配置 Kubernetes 時,K3s 工具將部署 Traefik Ingress 控制器。該控制器將偵聽 worker 節點的 80 端口和 443 端口,以響應發送給特定主機名的流量。
在安裝 Rancher 時(也是在后續步驟中),Rancher 系統將創建一個 Ingress 資源。該 Ingress 通知 Traefik Ingress 控制器偵聽發往 Rancher 主機名的流量。Traefik Ingress 控制器在收到發往 Rancher 主機名的流量時,會將其轉發到集群中正在運行的 Rancher Server Pod。
對於實現,請考慮是否要使用 4 層或 7 層負載均衡器:
4 層負載均衡器 是一種相對簡單的負載均衡,它將 TCP 流量轉發到您到節點。我們建議使用 4 層負載均衡器,將流量從 TCP / 80 端口和 TCP / 443 端口轉發到 Rancher 管理面的集群節點上。集群上的 Ingress 控制器會將 HTTP 流量重定向到 HTTPS,並在 TCP / 443 端口上終止 SSL / TLS。Ingress 控制器會將流量轉發到 Rancher Server Pod 的 TCP / 443 端口。
7 層負載均衡器 是一種相對復雜的負載均衡,但功能更加全面。例如,與 Rancher 本身進行 TLS 終止相反,7 層負載均衡器能夠在負載均衡器處處理 TLS 終止。如果要在基礎設施中進行 TLS 終止,7 層負載均衡可能會很有用。7 層負載均衡還可以為您的負載均衡器提供基於 HTTP 屬性(例如 cookie 等)做出決策的能力,而 4 層負載均衡器不提供這種功能。如果決定在 7 層負載均衡器上終止 SSL / TLS 流量,則在安裝 Rancher 時(后續步驟)需要使用--set tls=external選項。有關更多信息,請參閱Rancher Helm Chart 選項。
重要提示:安裝后,請勿使用 local 集群的 Ingress 對 Rancher 以外的應用進行負載均衡。與其他應用共享此 Ingress 可能會在其他應用的 Ingress 配置重新加載后,導致 Rancher 出現 websocket 錯誤。我們強烈建議將 local 集群專用於 Rancher,而不應在 local 集群內部署任何其他應用。
配置私有 Docker 鏡像倉庫:
Rancher 支持使用私有鏡像倉庫進行離線安裝。您必須有自己的私有鏡像倉庫或使用其他方式將 Docker 鏡像分發到節點。
在后續步驟中,當您設置 K3s Kubernetes 集群時,您將創建一個私有鏡像倉庫配置文件,其中包含有關此鏡像倉庫的信息。
https://docs.rancher.cn/docs/k3s/installation/private-registry/_index
如果您需要有關創建私有 Docker 鏡像倉庫的幫助,請參閱 官方 Docker 文檔。
https://docs.docker.com/registry/deploying/#run-an-externally-accessible-registry
- RKE 高可用集群
在 RKE 集群中安裝 Rancher 高可用,我們建議為高可用安裝配置以下基礎設施:
3 個 Linux 節點,通常是虛擬機,您可以自行選擇的基礎設施提供商,例如 Amazon EC2、阿里雲、騰訊雲或者 vShpere。
1 個負載均衡器,用於將流量轉發到這三個節點。
1 條 DNS 記錄,用於將 URL 指向負載均衡器。這將成為 Rancher Server 的 URL,下游集群需要可以訪問到這個地址。
私有 Docker 鏡像倉庫,用於為您的節點分發 Docker 鏡像。
步驟 2:同步鏡像到私有鏡像倉庫
對於創建僅有 Linux 節點的集群的 Rancher Server,請按以下步驟推送鏡像到私有鏡像庫。
查找您用的 Rancher 版本所需要的資源 https://github.com/rancher/rancher/releases
搜集 cert-manager 鏡像
將鏡像保存到您的工作站中
推送鏡像到私有鏡像庫
rancher-images.txt 此文件包含安裝 Rancher、創建集群和運行 Rancher 工具所需的鏡像列表。
rancher-save-images.sh 這個腳本會從 DockerHub 中拉取在文件rancher-images.txt中描述的所有鏡像,並將它們保存為文件rancher-images.tar.gz。
rancher-load-images.sh 這個腳本會載入文件rancher-images.tar.gz中的鏡像,並將它們推送到您自己的私有鏡像庫。
國內用戶,可以從 http://mirror.rancher.cn --> rancher --> [rancher 版本] 下載 rancher-save-images.sh,該腳本支持通過參數 --from-aliyun true 來指定從阿里雲鏡像倉庫拉去 rancher 鏡像(從 rancher/rancher release 下載的 rancher-save-images.sh 不支持該參數),例如:
./rancher-save-images.sh --image-list ./rancher-images.txt --from-aliyun true
Image pull success: registry.cn-hangzhou.aliyuncs.com/rancher/busybox
Image pull success: registry.cn-hangzhou.aliyuncs.com/rancher/backup-restore-operator:v1.0.4-rc4
...
步驟 3:部署 Kubernetes 集群(Docker 單節點安裝請跳過此步驟)
- 安裝 K3s 集群
- 安裝 RKE 集群
步驟 4:安裝 Rancher
- 高可用安裝(推薦)