Multi-Tenancy Kubernetes Cluster Part 1: 認命吧!有一好,就沒兩好!

Background

  • 該選擇哪一種 Tenancy Model 來維運 Kubernetes
  • 各種 Kubernetes Tenancy 所遇到的挑戰和解決方案

Single-Tenancy K8s or Multi-Tenancy K8s?

K8s Tenancy Mode Selection

Multi-Tenancy Kubernetes

  • 使用者管理:既然要讓多人使用,要如何管理這些使用者帳號便是首要重點,而且一般來說,組織裡面應該都會有統一管理使用者帳號的系統,例如 MicroSoft AS, Google Workspace, LDAP…等,如何讓既有的使用者帳號系統跟 K8s 整合再一起就是需要被先解決的問題,畢竟沒有管理單位會想要每多採用一個服務就需要多管理一組使用者帳號
  • 資源共享:多人一起使用同一座 K8s Cluster 的話,要如何讓 CPU, Memory…等資源一起公平的分享便是第二個重要的課題,畢竟就像之前提到的,沒有人會希望某個失去控制的應用服務,把所有資源耗盡進而去影響到其他的應用服務
  • 隔離性:第三個重點就是如何讓不同 Tenancy 之間的應用服務具有良好的隔離性,避免他們彼此之間可以互相溝通 (這裡是指不同租戶間的應用服務本來就沒有相依關係,不需要去存取其他租戶的應用服務)

Weak Soft Multi-Tenancy Kubernetes

  • RBAC: 用來定義權限政策,並使用 Role 或是 ClusterRole 將權限政策綁定到使用者帳號或是 ServiceAccount
  • Limit Ranges: 在 Pod 中用來定義使用到的 CPU 和 Memory 資源的預設和最大值
  • Resource Quotas: 定義 CPU 和 Memory 在特定 Namespace 內的最大使用量
  • Network Policies: 有點像是防火牆規則,用來定義 K8s 內資源是否允許或是不允許連接到什麼地方去
  • Pod Security Policies: 定義 Pod 在建立還有修改時應該遵守的政策規則

Enhanced Kubernetes Weak Soft Multi-Tenancy

  • Argo CD: 利用 casbin 所實做出來的 RBAC 管理,搭配 Project CRD,讓K8s 管理人員很輕易地實作出想要的權限控制
  • kiosk: 由 loft.sh 所推出的 kiosk,則是主打可以讓 K8s 達成 Multi-Tenancy 的延伸套件,整體架構還滿完整的,目前整再規劃 Multi-Cluster 的功能
  • Flux 2: 雖然是 Flux 第二版,整個架構改進滿多的,不管是多個 Cluster 或是 K8s Multi-Tenancy 的實作,主要都透過各種 CRD 與資料夾結構的拆分來達成

Hard Multi-Tenancy Kubernetes

  • Benchmarks: 裡面有 K8s 要如何達成 Multi-Tenancy 的 Guideline,而且還有 kubectl plugin kubectl-mtb,可用他來檢驗目前 K8s 的設定是否符合 Multi-Tenancy
  • Hierararchical namespaces (aka HNC): 有階層從屬關係的進階版 Namespace,例如可以建立一個 Namespace 給團隊 A 使用,然後在這個 Namespace 再建立 Child Namespace 給團隊 A 的應用程式使用;換言之,團隊 A 不需具有 Cluster Admin 也能夠在自己團隊的 Namespace 底下建立 Namespace 給應用服務使用
  • Tenant Operator: 用來管理 Tenant 的一系列 CRD
  • Virtual clusters: 在單一個 K8s Cluster 裡面運行多個虛擬的 K8s Cluster
  • Multi-Tenancy SIG Virtual Cluster: 由 K8s 官方社群所開發的專案,去年在 Kubecon EU 有 Talk Demo 這個功能,他可以讓每個 Tenant 擁有自己的 K8s Control Plane 進而達成 Hard Multi-Tenancy,也有使用
  • loft vClusters: 由 loft.sh 推出的 Virtual Cluster 實作方案,本來是付費服務 (三個人以下免費),不過在這幾天 Open Source 出來了,底層是使用 K3s,目前對於 Hard Multi-Tenancy 有急迫性的人可以參考看看

Single-Tenancy K8s

  • 多座 K8s Cluster 的安裝,設定,升級,備份,還原…等,不只常常需要升級,功能還常常大改動
  • 多座 K8s Cluster 跟各種基礎元件的整合,例如儲存空間,網路,安全工具…等,在不同的環境架設都會有不同的事情需要做
  • 如何讓使用者安全的存取多座 K8s Cluster (Authentication 和 Authorization),且每一座的存取權限設定都不同,又要如何控制應用服務間的連線或是存取
  • 如何集中化管理這些 K8s Cluster 的 Log 和 Metric 跟各種 Tracing 資料
  • 資源使用效能不彰是一定的,除了會花比較多錢之外,其實上面列的管理成本比花費在 Cloud Provider 或是 Data Center 的金錢都來得高

Conclusion

Reference

--

--

一群技術人想要寫出一些好文章所建立的技術專欄。每週二一篇原創文章、一封電子報,歡迎大家訂閱!主網站: https://weekly.starbugs.dev/。

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
smalltown

原來只是一介草 QA,但開始研究自動化維運雲端服務後,便一頭栽進 DevOps 的世界裏,熱愛鑽研各種可以提升雲端服務品質及增進團隊開發效率的開源技術