Terway網路情境下,當虛擬交換器(vSwitch)IP資源不足時,或者您需要添加新的vSwitch(Pod 網段)時,您需要對vSwitch擴容。本文介紹如何新增虛擬交換器以增加新的IP地址資源供ACK叢集使用。
使用限制
請確保您添加的vSwitch包含節點的可用性區域,如果節點的可用性區域不在vSwitch列表中,則將使用主網卡對應的vSwitch。
對已經建立的彈性網卡(ENI),您無法修改vSwitch配置,建議您在擴容Pod虛擬交換器後新增節點使用。
虛擬交換器vSwitch的IP資源不足特徵
Terway網路情境下,vSwitch IP資源不足的特徵如下:
如果您發現Pod建立不成功,且狀態顯示為ContainerCreating,執行以下命令查看Pod所在節點的Terway的日誌。
kubectl logs --tail=100 -f terway-eniip-zwjwx -n kube-system -c terway
若系統輸出類似以下錯誤資訊,說明該節點的Terway所使用的vSwitch沒有空餘的IP地址,Pod會因為沒有IP資源而一直處於ContainerCreating狀態。
time="2020-03-17T07:03:40Z" level=warning msg="Assign private ip address failed: Aliyun API Error: RequestId: 2095E971-E473-4BA0-853F-0C41CF52651D Status Code: 403 Code: InvalidVSwitchId.IpNotEnough Message: The specified VSwitch \"vsw-AAA\" has not enough IpAddress., retrying"
登入專用網路管理主控台,在控制台左側導覽列中,單擊交換器查看該vSwitch的可用IP數為0。
新增虛擬交換器vSwitch
使用控制台方式新增vSwitch較為簡便,因此建議您將Terway組件升級到最新版本後在控制台上配置Pod虛擬交換器。
Terway v1.4.4及以上版本支援使用控制台和kubectl兩種方式配置Pod虛擬交換器;Terway v1.4.4以下版本僅支援kubectl方式配置Pod虛擬交換器。
方式一:控制台操作指導
在專用網路管理主控台建立新的vSwitch,該vSwitch必須與IP資源不足的vSwitch在同一個地區。具體關於如何建立vSwitch,請參見建立和管理交換器。
說明因Pod密度越來越大,為了滿足Pod對IP地址日益增長的需求,建議您建立給Pod使用的vSwitch的網路位小於等於19,即網段中至少包含8192個IP地址。
登入Container Service管理主控台,在左側導覽列單擊叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇
。在組件管理頁面,單擊網路頁簽,選擇需要升級的目標Terway組件,單擊升級,將組件升級至最新版本後,單擊配置。
若無升級按鈕,說明Terway組件已升級至最新版本。
說明除此配置方式之外,通過其他方式對已部署組件所做的修改,將在組件重新部署後被覆蓋。
在terway-eniip 參數配置頁面的PodVswitchId地區,選擇您所需的vSwitch,其他參數選擇預設即可,如下所示。
參數
說明
取值
TerwayMemoryRequest
Terway容器記憶體請求
100Mi
TerwayMemoryLimit
Terway容器記憶體限制
256Mi
TerwayCpuLimit
Terway容器CPU限制
100m
TerwayCpuRequest
Terway容器CPU請求
100m
PolicyMemoryRequest
Policy容器記憶體請求
250m
PolicyCpuRequest
Policy容器CPU請求
100m
PolicyMemoryLimit
Policy容器記憶體限制
無限制
PolicyCpuLimit
Policy容器CPU限制
1
NetworkPolicy
啟用NetworkPolicy
開啟
PodVswitchId
Terway Pod虛擬交換器
請確保Pod虛擬交換器可用性區域包含節點所在可用性區域。
參數配置完成後,單擊確定。
方式二:kubectl操作指導
在專用網路管理主控台建立新的vSwitch,該vSwitch必須與IP資源不足的vSwitch在同一個地區。具體關於如何建立vSwitch,請參見建立和管理交換器。
說明因Pod密度越來越大,為了滿足Pod對IP地址日益增長的需求,建議您建立給Pod使用的vSwitch的網路位小於等於19,即網段中至少包含8192個IP地址。
執行以下命令,添加vSwitch到Terway的ConfigMap配置中。
kubectl edit cm eni-config -n kube-system
添加vSwitch具體範例如下:
eni_conf: | { "version": "1", "max_pool_size": 25, "min_pool_size": 10, "vswitches": {"cn-shanghai-f":["vsw-AAA", "vsw-BBB"]}, "service_cidr": "172.21.0.0/20", "security_group": "sg-CCC" }
範例中添加
vsw-BBB
到vSwitches
部分,其中vsw-AAA
是已經存在的且IP資源不足的vSwitch。執行以下命令刪除全部Terway Pod後,系統將自動重建全部Terway Pod。
針對ENI多IP情境,執行以下命令刪除全部Terway Pod:
kubectl delete -n kube-system pod -l app=terway-eniip
針對ENI單IP情境,執行以下命令刪除全部Terway Pod:
kubectl delete -n kube-system pod -l app=terway-eni
執行以下命令檢查全部是否成功建立Terway Pod。
kubectl get pod -n kube-system | grep terway
建立Pod,驗證新建立的Pod是否可以從新添加的vSwitch成功分配獲得IP地址。
說明修改虛擬交換器配置後,新配置僅對建立的ENI生效,已建立的ENI將使用原有配置。您可以通過輪轉節點的方式,讓配置生效。
如果您在上述操作中遇到異常情況,請提交工單。
常見問題
Terway網路下,增加虛擬交換器(vSwitch)後,為何不能正常訪問公網?
問題現象:在Terway網路下,因Pod沒有IP資源而手動增加虛擬交換器,在增加虛擬交換器後,發現叢集不能正常訪問公網。
問題原因:Pod IP所屬的虛擬交換器不具備公網訪問的能力。
解決方案:您可以通過NAT Gateway的SNAT功能,為Pod IP所屬的虛擬交換器配置公網SNAT規則。更多資訊,請參見為已有叢集開啟公網訪問能力。
Pod分配的IP不在虛擬交換器網段中怎麼辦?
問題現象:在Terway網路下,建立的Pod IP不在配置的虛擬交換器網段內。
問題原因:Pod IP來源於VPC地址,並且通過ENI分配給容器使用。只有在建立ENI時,才可以配置虛擬交換器。如果ENI已經建立,則Pod IP將繼續從該ENI對應的虛擬交換器中分配。通常以下兩個使用情境會遇到該問題:
納管一個節點到叢集內,但這個節點之前在其他叢集使用,且刪除節點時沒有排空節點Pod。這種情況下節點上可能殘留之前叢集使用的ENI資源。
手動增加、修改Terway使用的虛擬交換器配置,由於節點上可能還存在原有配置的ENI,則建立的Pod將可能繼續使用原有ENI上的IP。
解決方案:您可以通過建立節點、輪轉老節點的方式來確保設定檔在新節點上生效。