全部產品
Search
文件中心

:配置Service負載平衡的注意事項及CCM資源更新策略

更新時間:Feb 28, 2024

當Service的類型設定為Type=LoadBalancer時,Container ServiceACK的CCM(Cloud Controller Manager)組件會為該Service建立或配置阿里雲Server Load Balancer(Server Load Balancer),包括含SLB、監聽、後端伺服器組等資源。本文介紹配置Service負載平衡的注意事項以及CCM的資源更新策略。

SLB更新策略

ACK支援為Service指定一個已有的SLB,或者讓CCM自動建立新的SLB。兩種方式在SLB的資源更新策略方面存在一些差異,如下表所示。

資來源物件

指定已有SLB

CCM管理SLB

SLB

設定annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id

  • CCM會使用該SLB作為Service的負載平衡,並根據其他annotation配置SLB,自動為SLB建立多個虛擬伺服器組。

  • 當Service刪除時,CCM不會刪除您通過ID指定的已有SLB。

  • CCM會根據Service的配置,自動建立和配置SLB、監聽、虛擬伺服器組等資源,所有資源由CCM管理。

  • 當Service刪除時,CCM會刪除自動建立的SLB。

監聽

設定annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners

  • 如果設定為"false",CCM不會為SLB管理任何監聽配置。

  • 如果設定為"true",CCM會根據Service組態管理監聽;如果監聽已經存在,則CCM會覆蓋已有監聽。

CCM會根據Service的配置,自動建立和配置監聽策略。

後端伺服器組

當Service對應的後端Endpoint或者叢集節點發生變化時,CCM會自動更新SLB的後端虛擬伺服器組。

  • 對於Terway網路外掛程式,CCM預設掛載PodIP,而非掛載ECS節點到SLB後端。

  • 對於Flannel網路外掛程式,根據Service模式的不同,後端伺服器組的更新策略也有所不同。

    • Cluster模式(spec.externalTrafficPolicy = Cluster):CCM預設會將所有節點掛載到SLB的後端(使用BackendLabel標籤配置後端的除外)。

      重要

      SLB存在配額限制,限制了每個ECS能夠使用的SLB個數,這種方式會快速消耗該配額。當配額耗盡後,會造成Service Reconcile失敗。解決辦法:使用Local模式的Service。

    • Local模式(spec.externalTrafficPolicy = Local):CCM預設只會將Service對應的Pod所在節點加入到SLB後端。這樣可以降低SLB配額的消耗速度,同時支援四層源IP保留。

  • 對於Flannel網路外掛程式,任何情況下CCM都不會將Master節點作為SLB的後端。

  • 對於Flannel網路外掛程式,CCM預設不會從SLB後端移除被驅逐(kubectl drain)或停止調度(kubectl cordon)的節點。如需移除節點,請設定service.beta.kubernetes.io/alibaba-cloud-loadbalancer-remove-unscheduled-backendon

注意事項

  • 哪些SLB可以被複用?

    • 僅支援複用通過SLB控制台建立的SLB,不支援複用CCM自動建立的SLB。

    • 如果您需要在Kubernetes叢集中複用私網類型的SLB,則該SLB需要和Kubernetes叢集處於同一VPC下。

  • CCM管理SLB時注意事項

    • CCM只為Type=LoadBalancer類型的Service配置SLB,對於非LoadBalancer類型的Service則不會為其配置負載平衡。

      重要

      Type=LoadBalancer的Service變更為Type!=LoadBalancer時,CCM會刪除為該SLB添加的配置,從而造成無法通過該SLB訪問Service。

    • CCM使用聲明式API,會在一定條件下自動根據Service的配置重新整理SLB配置。當service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: 設定為"true"時,您自行在SLB控制台上修改的配置均存在被覆蓋的風險。

      重要

      請勿在SLB控制台上手動修改Kubernetes建立並維護的SLB的任何配置,否則有配置丟失的風險,造成Service不可訪問。

配額限制

VPC

  • 叢集中一個節點對應一條路由表項,VPC預設情況下僅支援200條路由表項,如果叢集節點數目多於200個,請

  • 更多VPC使用限制,請參見限制與配額

    查詢VPC配額,請參見Virtual Private Cloud配額管理

SLB

  • CCM會為Type=LoadBalancer類型的Service建立SLB。預設情況下一個使用者可以保留60個SLB執行個體。如果需要建立的SLB數量大於60,請

  • CCM會根據Service的配置將ECS掛載到SLB後端伺服器組中。

    • 預設情況下一個ECS執行個體可掛載的後端伺服器組的數量為50個,如果一台ECS需要掛載到更多的後端伺服器組中,請

    • 預設情況下一個SLB執行個體可以掛載200個後端伺服器,如果需要掛載更多的後端伺服器,請

  • CCM會根據Service中定義的連接埠建立SLB監聽。預設情況下一個SLB執行個體可以添加50個監聽,如需添加更多監聽,請

  • 更多SLB使用限制請參見使用限制

    Server Load Balancer配額查詢請參見Server Load Balancer配額管理