Ack集群Terway網絡場景下的vSwitch擴容
目录
- 1、Terway 網絡介紹
- 2、問題現象
- 3、擴容操作
- 3.1 新增交換機並配置 NAT
- 3.2 配置集群的 Terway
- 3.3 重啟 terway
1、Terway 網絡介紹Terway是阿里雲開源的基於專有網絡 VPC 的容器網絡接口CNI(Container Network Interface)插件,支持基於Kubernetes標準的網絡策略來定義容器間的訪問策略。可以通過使用Terway網絡插件實現Kubernetes集群內部的網絡互通
Terway網絡插件將原生的彈性網卡分配給Pod實現Pod網絡,支持基於Kubernetes標準的網絡策略(Network Policy)來定義容器間的訪問策略,並兼容Calico的網絡策略
在Terway網絡插件中,每個Pod都擁有自己網絡棧和IP地址。同一台ECS內的Pod之間通信,直接通過機器內部的轉發,跨ECS的Pod通信,報文通過VPC的彈性網卡直接轉發。由於不需要使用VxLAN等的隧道技術封裝報文,因此Terway模式網絡具有較高的通信性能
一句話總結,Terway最大的特點就是藉助於雲上ECS服務器的特性,將pod與node的網絡進行了拉平,同時使用VPC下vSwitch中的ip
2、問題現象
由於使用了Terway網絡模式,隨著node機器和pod數量的增多,每分配一個ip出去都需要消耗掉vpc下vsw的可用ip。如果某短時間業務快速增長,導致pod大量消耗可用ip,這個時候就有可能因前期規劃不充足導致vSwitch的可用ip不足
這個時候新創建的pod狀態為ContainerCreating,describe查看pod提示error allocate ip...,這個時候查看Pod所在節點的Terway的日誌,會有下面內容
- Message: The specified VSwitch "vsw-xxxxx" has not enough IpAddress.
提示沒有足夠的ip,這個時候基本都是由於交換機的ip不夠用,登錄到交換機的控制台可以查看到這個節點所在的交換機的可用ip數,如果很少甚至為0,就表示需要擴容了
3、擴容操作
3.1 新增交換機並配置 NAT在專有網絡管理控制台對應的VPC創建新的vSwitch,該vSwitch必須與IP資源不足的vSwitch在同一個區域。這是因為Terway分配給pod ip時的策略是,分配node所在可用區中的vSwitch對應的ip,因此,擴容就需要擴容同一可用區的交換機
在初始化集群新建交換機以及擴容交換機的時候都應該考慮,因Pod密度越來越大,為了滿足Pod對IP地址日益增長的需求,建議創建給Pod使用的vSwitch的網絡位小於等於19,即每個網段中至少包含8192個可用IP地址
vSwitch創建完成後,需要對這個vSwitch配置NAT策略,以便訪問外部網絡。
3.2 配置集群的 Terway
配置集群的Terway,添加上面創建的vSwitch到Terway的ConfigMap配置中。
- kubectl -n kube-system edit cm eni-config
配置樣例參考Terway 配置參考[1],部分內容說明如下:
- apiVersion: v1
- kind: ConfigMap
- metadata:
- name: eni-config
- namespace: kube-system
- data:
- 10-terway.conf: |-
- {
- "cniVersion": "0.3.0",
- "name": "terway",
- "type": "terway"
- }
- disable_network_policy: "true"
- eni_conf: |-
- {
- "version": "1", # 版本
- "max_pool_size": 80, # 资源池最大水位
- "min_pool_size": 20, # 资源池最小水位
- "credential_path": "/var/addon/token-config",
- "vswitches": {"cn-shanghai-f":["vsw-AAA", "vsw-BBB"]}, # 关联的虚拟交换机(ENI多IP模式),添加vsw-BBB到VSwitches部分,其中vsw-AAA是已经存在的且IP资源不足的VSwitch
- "eni_tags": {"ack.aliyun.com":"xxxxxxxxx"},
- "service_cidr": "172.16.0.0/16", # 服务CIDR
- "security_group": "sg-xxxxxxx", # 安全组ID
- "vswitch_selection_policy": "ordered"
- }
上面配置參數中,資源池水位的配置值。 Terway使用底層虛擬化底層的網絡資源打通容器網絡,網絡資源的創建和釋放需要一系列的API調用,如果在Pod創建銷毀時頻繁調用API會導致Pod配置時間較長。 Terway通過池化的方式對資源進行緩存,當小於資源的池的最小水位時自動補充資源,在大於資源池最大水位時開始釋放資源,這樣保障了高效的資源利用和分配的效率。
相當於預先分配了ip,具體設置可以考慮到所在機器節點規格支持的最大eni輔助網卡個數以及最大pod數靈活設置。
3.3 重啟 terway
重啟所有Terway的pod以便快速刷新緩存生效。
- # kubectl -n kube-system delete pod -l app=terway-eniip
- # kubectl -n kube-system get pod | grep terway
重啟後檢查異常的pod是否正常獲取了ip即可。
當排查某個pod的ip分配相關問題時,也可以通過進入到所在節點的terway pod中,執行命令行,查看當前已分配的 ip 情況,以及已經從vSwitch分配得來後,暫時空閒的ip情況。
- # terway-cli mapping
- Status | Pod Name | Res ID | Factory Res ID
- Normal | node-problem-detector-l5h52 | 00:16:10:48:3e:37.10.244.18.167 | 00:16:10:48:3e:37.10.244.18.167
- ...
- Idle | | 00:16:10:48:3e:37.10.244.18.132 | 00:16:10:48:3e:37.10.244.18.132
- Idle | | 00:16:10:48:3e:37.10.244.18.18 | 00:16:10:48:3e:37.10.244.18.18
- Idle | | 00:16:10:48:3e:37.10.244.18.54 | 00:16:10:48:3e:37.10.244.18.54
See you ~
- kubectl -n kube-system edit cm eni-config
- Message: The specified VSwitch "vsw-xxxxx" has not enough IpAddress.