主頁 >  其他 > 混合云下的 Kubernetes 多集群管理與應用部署

混合云下的 Kubernetes 多集群管理與應用部署

2021-06-09 17:59:16 其他

本文是上海站 Meetup 中講師李宇根據其分享內容梳理成的文章

大家好,很高興來到今天下午的 Meetup,我先簡單做個自我介紹,我叫李宇,目前是 KubeSphere 的一名研發,主要負責多集群方向的作業,我今天帶來的分享是混合云下的 Kubernetes 多集群管理與應用部署,
KubeSphere 在開始做 v3.0之前,曾發起了一個社區用戶調研,發現呼聲最高的是支持多集群管理和跨云的應用部署,因此 KubeSphere 3.0 重點支持了多集群管理,

單集群下的 Kubernetes 架構

Kubernetes 內部分為 Master 和 Worker 兩個角色,Master 上面有 API Server 負責 API 請求,Controller Manager 負責啟動多個controller,持續協調宣告式的 API 從 spec 到 status 的轉換程序,Scheduler 則負責 Pod 的調度,Etcd負責集群資料的存盤,Worker 則作為作業節點主要負責 Pod 的啟動,

單集群下有許多場景是無法滿足企業需求的,主要分為以下幾點,

  1. 物理隔離,盡管 Kubernetes 提供了 ns 級別的隔離,你可以設定每個 Namespace 各自使用的 cpu 記憶體,甚至可以使用 Network Policy 配置不同 Namespace 的網路連通性,企業仍然需要一個更加徹底的物理隔離環境,以此避免業務之間的互相影響,

  2. 混合云,混合云場景下,企業希望可以選擇多個公有云廠商和私有云解決方案,避免受限于單一云廠商,降低一定成本,

  3. 應用異地多活,部署業務多個副本到不同 region 集群,避免單個 region 的斷電造成應用的不可用情況,實作不把雞蛋放在同一個籃子目的,

  4. 開發/測驗/生產環境 ,為了區分開發測驗生產環境,把這些環境部署到不同的集群,

  5. 可拓展性,提高集群的拓展性,突破單一集群的節點上限,

其實最簡單的方式就是使用多個 Kubeconfig 檔案來分別管理不同的集群,前端調動多次 API 即可同時部署業務,包括其他一些現有的其他產品也是這么做的,但是 KubeSphere 還是想以一種更加 Cloud Native 的方式去管理多個集群,于是 KubeSphere 先調研了一些已有的解決方案,

總體來說分為兩個方向:
第一個是偏向控制層的資源分發,比如 Kubernetes 社區的 Federation v1 和 Federation v2 , Argo CD/Flux CD (流水線中實作應用的分發)
第二個是致力于實作多集群之間的 Pod 網路可達,例如 Cilium Mesh,Istio Multi-Cluster,Linkerd Service Mirroring,由于這些專案同特定的 CNI 以及服務治理組件系結了,因此接下來我會詳細介紹一下 Federation v1 和 Federation v2 兩個專案,

Federation v1

上面是 Federation v1 的架構圖 可以看到有額外的 API Server (基于 Kube-Apiserver 開發) 和 Controller Manager (同 Kube-Controller-Manager 類似) ,下面是被管控的集群,多集群的資源分發需要在上面集群創建,然后最終被分發到下面的各個集群去,

上面是一個 在Federation v1 里面創建 Replicaset 的示例,與普通的 Replicaset 區別就是多了一些 Annotation,里面主要存了一些分發資源的邏輯,從中我們也能看到 v1 的一些缺點,

  1. 其引入了單獨開發的 API Server,帶來了額外的維護成本,
  2. 在 Kubernetes 里一個 API 是通過 Group/Version/Kind 確定的,但是 Federation v1 里面對于K8s 原生 API、GVK 固定,導致對不同版本的集群 API 兼容性很差,
  3. 設計之初未考慮 RBAC,無法提供跨集群的權限控制
  4. 基于 Annotation 的資源分發讓整個 API 過于臃腫,不夠優雅,是最被詬病的一點,

Federation v2

正是由于 v1 的這些缺點,Kubernetes 社區逐漸棄用了 v1 的設計,吸取了 v1 的一些教訓,推出了 v2 也就是 Kubefed 這個專案,Kubefed 最大的特點就是基于 CRD 和 Controller 的方式替換掉了 v1 基于Annotation 分發資源的方案,沒有侵入原生的 K8s API,也沒有引入額外的 API Server,

上面是 v2 的架構圖,可以看到一個 CRD 資源主要由 Template、Override、Placement 三部分組成,通過結合 Type Configuration,可以支持多個版本的API,大大提高了集群之間的版本兼容性,并且支持了所有資源的 Federation,包括 CRD 本身,同時 Kubefed 在設計之初也考慮到了多集群的服務發現、調度等,

下面是一個聯邦資源的示例,Deployment 在 Kubefed 中對應 FederatedDeployment,其中 spec 里面的 template 就是原來的 Deployment 資源,placement 表示聯邦資源需要被下放到哪幾個集群去, override 可以通過不同的集群配置不同集群的欄位,例如 deployment 的鏡像的 tag 各個集群的副本數等,

當然 Kubefed 也不是銀彈,也有其一定的局限性,從前面可以看到,其 API 定義復雜,容易出錯,也只能使用 kubefedctl 加入和解綁集群,沒有提供單獨的 SDK,再就是它要求控制層集群到管控集群必須網路可達,單集群到多集群需要改造 API,舊版本也不支持聯邦資源的狀態收集,

KubeShere On Kubefed

接下來我們看看 KubeSphere 基于 Kubefed 如何實作并簡化了多集群管理,

圖片里面定義了兩個概念,Host 集群指的是裝了 Kubefed 的集群,屬于 Control Plane,Member 集群指的是被管控集群,Host 集群與 Member 集群之間屬于聯邦關系,

在圖片這里用戶可以統一管理多個集群,KubeSphere 單獨定義了一個 Cluster Object,拓展了 Kubefed 里面的 Cluster 物件,包含了 region zone provider 等資訊,

在匯入集群的時候 KubeSphere 提供了兩種方式:

  • 直接連接,這種情況要求 Host 到 Member 集群網路可達,只需要提供一個 kubeconfig 檔案可直接把集群加入進來,避免了之前提到的 kubefedctl 的復雜性 ,

  • 代理連接,
    對于 Host 集群到 Member 集群網路不可達的情況,目前 Kubefed 還沒有辦法做到聯邦,因此 KubeSphere 基于 chisel 開源了Tower,實作了私有云場景下集群聯邦管理,用戶只需要在私有集群創建一個 agent 就可以實作集群聯邦,

這里展示了 Tower 的作業流程,在 Member 集群內部起了一個 agent 以后,Member 集群會去連接 Host 集群的 Tower Server,Server 收到這個連接請求后會直接監聽一個 Controller 預先分配好的埠,建立一個隧道,這樣就可以通過這個隧道從 Host 往 Member 集群分發資源,

多集群下的多租戶支持

在 KubeSphere 里面,一個租戶就是一個 Workspace,并且租戶de授權認證都是通過 CRD 來實作的,為了減少 Kubefed 對 Control Plane 的依賴,KubeSphere 把這些 CRD 通過聯邦層下放,在 Host 集群收到 API 請求后直接轉發到 Member 集群,這樣假如 Host 集群掛了,原來的租戶資訊在 Member 集群仍然存在,用戶依然可以登陸 Member 集群的 Console 來部署業務,

多集群下的應用部署

Kubefed 的 API 前面我們也看到過,手動去定義是十分復雜并且容易出錯,因此 KubeSphere 在部署應用的時候,可以直接選擇需要部署的集群名稱以及各自集群的副本數,也可以在差異化配置里面配置不同集群的鏡像地址以及環境變數,例如集群 A 位于國內,拉不到 gcr.io 的鏡像,就可以配成 DockerHub 的,

聯邦資源的狀態收集

對于聯邦資源的狀態收集,前面我們提到 Kubefed 之前是沒有實作的,因此 KubeSphere 自研了聯邦資源的狀態收集,在例如創建 Pod 失敗的場景下可以很方便的去排查對應的 event 資訊,另外 KubeSphere 也提供了聯邦資源的監控,提高了其可觀測性,

TODO

盡管 KubeSphere 基于 Kubefed 簡化了多集群之間的聯邦,未來也仍有一些需要改進的地方,

  1. 目前中心化的 Control Plane 導致資源分發只能 push,這對 Host 集群高可用有一定要求,這塊 Kubefed 社區也在積極開發從 Member 集群 pull 資源到 Host 集群的 feature,
  2. KubeSphere 是一個非常開放的社區,我們希望有更過的社區用戶加入進來,但是目前多集群的開發門檻較高,開發者需要定義一系列很多的 Types CRD,不夠友好,
  3. 多集群的服務發現目前沒有比較好的解決方案,這個本來一開始社區是有做的,但是后來為了更快的發 beta 版本,就棄用了,
  4. 多集群的 Pod 副本數調度,這個目前社區是有提供 RSP (Replica Scheduling Preference),KubeSphere 預計也會在下個版本加進去,

那么,有沒有既不引入中心化的 Control Plane,又能夠減少過多的 API 引入實作多集群呢,答案就是 Liqo,在介紹它之前,首先我們介紹一下 Virtual Kubelet,

Virtual Kubelet 可以幫助你把自己的服務偽裝成一個 Kubernetes 的節點,模擬 Kubelet 加入這個集群,這樣就可以水平拓展 Kubernetes 集群,

在 Liqo 里面,集群之間不存在聯邦關系,左圖里在 Kubefed 架構下 k2、k3 兩個集群是 k1 的成員集群,資源下方需要經過一次 k1 的 push,而在右邊的圖里面,k2、k3 只是 k1 的一個節點,因此在部署應用的時候,完全不需要引入任何的 API,k2、k3 看起來就是 k1 的節點,這樣業務就可以無感知的被部署到不同的集群上去,極大減少了單集群到多集群改造的復雜性,現在 Liqo 屬于剛起步階段,目前不支持兩個集群以上的拓撲,在未來 KubeSphere 也會持續關注開源領域的一些其他的多集群管理方案,

本文由博客一文多發平臺 OpenWrite 發布!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/285804.html

標籤:其他

上一篇:鏈路追蹤_SkyWalking的部署及使用

下一篇:深度剖析,從普通時鐘系統到各種授時方式

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more