天天看點

深度解析容器服務Kubernetes叢集容量以及網絡規劃背景概念規劃總結相關文檔

背景

在目前雲原生技術被如火如荼的大規模使用的過程中。越來越多的使用者都會使用Kubernetes叢集去部署其應用。但是在這個過程中,如果由于早期對于容量和網絡的規劃不當,可能造成實際生産中實踐中,不能滿足業務的真實需要。如果此時在重新規劃就面臨着叢集重建、應用遷移的諸多事項,這樣不僅僅浪費了大量的精力,甚至可能會造成業務有一定的中斷。是以,為了使得廣大使用者可以更加深入的了解阿裡雲容器服務Kubernetes叢集容量和網絡規劃,本文章會詳細介紹相關概念以及如何進行規劃。

概念

叢集容量

這所指的叢集容量,指的一個Kubernetes叢集最多能容納的節點總數。

VPC網段

為了可以順利的在容器服務中建立VPC的容器叢集,首先我們需要根據實際的情況規劃網絡。建立VPC網絡的時候,您必須指定對應的CIDR來劃分對應的子網,如果想了解更多的關于CIDR的資訊,參見

RFC4632

了解更多關于 CIDR 的資訊.

每個專有網絡隻能指定 1 個網段,網段範圍如下,其中 172.16.0.0/12 是預設專有網絡使用的網段。

  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16

容器Pod網段

在建立容器服務Kubernetes叢集的時候,需要使用者指定對應的Pod網段,目前容器服務支援的容器網段如下:

  • 192.168.0.0/24
  • 172.[16-31].1.0/16

Flannel

使用的是簡單穩定的社群的

CNI 插件,配合阿裡雲的VPC的高速網絡,能給叢集高性能和穩定的容器網絡體驗,但功能偏簡單,支援的特性少,例如:不支援基于Kubernetes标準的Network Policy。

Terway

是阿裡雲容器服務自研的網絡插件,将阿裡雲的彈性網卡配置設定給容器,支援基于Kubernetes标準的NetworkPolicy來定義容器間的通路政策,支援對單個容器做帶寬的限流。對于不需要使用Network Policy的使用者,可以選擇Flannel,其他情況建議選擇Terway。

規劃

接下來,我們就按Flannel和Terway兩種類型就行相應的規劃說明。

在使用Flannel網絡的場景下,叢集的規模以及網絡規劃相對比較簡單一些,主要受限于叢集所在的VPC網段、pod網絡以及每台節點可以最多部署的Pod數量。

叢集規模的計算公式為:2 ^ (節點pod數量對應的掩碼 - Pod網段掩碼 ) 。例如 我們的Pod網段為 172.16.0.0/16,每台節點的Pod數為128(對應的掩碼是25), 那麼該叢集的規模 = 2 ^ (25-16) = 512 ,也就是說該叢集最多能容納512個節點。

當然,這個叢集的規模還受限于叢集所使用的VPC網段所能容納的節點數。一般來說這個問題不大,我們假設一個比較極端的場景,例如我們的VPC網段是 192.168.0.0/16 ,則該VPC最多能容納的主機數是 2^16 , 此時假設我們設定的Pod網段是 10.0.0.0/8 ,每台節點的Pod 數為 128 (對應的掩碼是 25),那麼該叢集的規則為 2 ^ (25 - 8) = 2^17 。由此我們可以看到叢集最多能容納的節點數已經超過了VPC網絡最多能容納的主機數。

另外由于Flannel網絡場景下,為了保證每個Pod可以互聯互通,在VPC的路由表裡添加了節點對應網段的路由,由于VPC路由表的預設路由條目是48條,是以一旦叢集的規模多于48個節點,建議提工單申請VPC路由表上限。

總上所述,在使用Flannel的場景下,需要從VPC網段、Pod網段以及節點能容納的Pod數總和考量,來規劃整體的叢集容量以及Pod網段。

對于使用Terway網絡而言,由于涉及到獨占和共享兩種方式,而且還涉及到所使用的ECS執行個體的規格,由于不同的執行個體規則可以容納的ENI數量是有限的。

以下示例是一個執行個體規格的屬性

{
    "CpuCoreCount": 32,
    "InstanceTypeFamily": "ecs.mn4",
    "InstanceBandwidthRx": 5120000,
    "InstancePpsRx": 500000,
    "InstancePpsTx": 500000,
    "EniQuantity": 8,     //彈性網卡數量
    "InstanceTypeId": "ecs.mn4.8xlarge",
    "GPUSpec": "",
    "InstanceBandwidthTx": 5120000,
    "InstanceFamilyLevel": "EntryLevel",
    "MemorySize": 128,
    "GPUAmount": 0,
    "LocalStorageCategory": "",
    "EniPrivateIpAddressQuantity": 4  //每張彈性網絡最多可以虛拟多少IP
}           

從以上,我們可以看出,如果是獨占模式,由于每個Pod會使用一張獨立的彈性網卡,是以該規格的機器最多能容納8個Pod;反之,如果是共享模式,由于每張網卡可以虛拟4個IP,是以該規則的機器最多可以容納 8 *4 = 32 個Pod。

當使用Terway的時候,我們需要指定一個Terway的交換機作為容器的網段,此時叢集内能容納的主機數,會有該交換機的網段以及節點的類型等決定。例如我們的Pod交換機網段是 172.16.1.0/24, 意味着該交換機内做多能容納 256個IP,如果我們叢集内的節點都使用如上所示的執行個體規則,如果在獨占模式下,該叢集最多能容納的節點數為 256/8 = 64 台;反之如果在共享模式下,該叢集最多能容納的節點數為 256/32 = 8 台。

綜上所述,在選擇Terway網絡的場景下,Pod網段的交換機選擇很重要,在規劃之前可以根據執行個體上容難的彈性網卡數量等做一個比較合理的計算和規劃。

總結

其實對于Kubernetes叢集網絡規劃并沒有想象的那麼複雜,隻要弄明白每種網絡元件之間的差異,以及和叢集規模、VPC網絡、路由等之間的關系,結合業務情況科學、合理的規劃容量和網絡,會起到事半功倍的效果。

相關文檔

繼續閱讀