Ack集群Terway網絡場景下的vSwitch擴容
目錄
- 1、Terway 網絡介紹
- 2、問題現(xiàn)象
- 3、擴容操作
- 3.1 新增交換機并配置 NAT
- 3.2 配置集群的 Terway
- 3.3 重啟 terway
1、Terway 網絡介紹
Terway是阿里云開源的基于專有網絡 VPC 的容器網絡接口CNI(Container Network Interface)插件,支持基于Kubernetes標準的網絡策略來定義容器間的訪問策略??梢酝ㄟ^使用Terway網絡插件實現(xiàn)Kubernetes集群內部的網絡互通
Terway網絡插件將原生的彈性網卡分配給Pod實現(xiàn)Pod網絡,支持基于Kubernetes標準的網絡策略(Network Policy)來定義容器間的訪問策略,并兼容Calico的網絡策略
在Terway網絡插件中,每個Pod都擁有自己網絡棧和IP地址。同一臺ECS內的Pod之間通信,直接通過機器內部的轉發(fā),跨ECS的Pod通信,報文通過VPC的彈性網卡直接轉發(fā)。由于不需要使用VxLAN等的隧道技術封裝報文,因此Terway模式網絡具有較高的通信性能
一句話總結,Terway最大的特點就是借助于云上ECS服務器的特性,將pod與node的網絡進行了拉平,同時使用VPC下vSwitch中的ip
2、問題現(xiàn)象
由于使用了Terway網絡模式,隨著node機器和pod數量的增多,每分配一個ip出去都需要消耗掉vpc下vsw的可用ip。如果某短時間業(yè)務快速增長,導致pod大量消耗可用ip,這個時候就有可能因前期規(guī)劃不充足導致vSwitch的可用ip不足
這個時候新創(chuàng)建的pod狀態(tài)為ContainerCreating,describe查看pod提示error allocate ip...,這個時候查看Pod所在節(jié)點的Terway的日志,會有下面內容
- Message: The specified VSwitch "vsw-xxxxx" has not enough IpAddress.
提示沒有足夠的ip,這個時候基本都是由于交換機的ip不夠用,登錄到交換機的控制臺可以查看到這個節(jié)點所在的交換機的可用ip數,如果很少甚至為0,就表示需要擴容了
3、擴容操作
3.1 新增交換機并配置 NAT
在專有網絡管理控制臺對應的VPC創(chuàng)建新的vSwitch,該vSwitch必須與IP資源不足的vSwitch在同一個區(qū)域。這是因為Terway分配給pod ip時的策略是,分配node所在可用區(qū)中的vSwitch對應的ip,因此,擴容就需要擴容同一可用區(qū)的交換機
在初始化集群新建交換機以及擴容交換機的時候都應該考慮,因Pod密度越來越大,為了滿足Pod對IP地址日益增長的需求,建議創(chuàng)建給Pod使用的vSwitch的網絡位小于等于19,即每個網段中至少包含8192個可用IP地址
vSwitch創(chuàng)建完成后,需要對這個vSwitch配置NAT策略,以便訪問外部網絡。
3.2 配置集群的 Terway
配置集群的Terway,添加上面創(chuàng)建的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"]}, # 關聯(lián)的虛擬交換機(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使用底層虛擬化底層的網絡資源打通容器網絡,網絡資源的創(chuàng)建和釋放需要一系列的API調用,如果在Pod創(chuàng)建銷毀時頻繁調用API會導致Pod配置時間較長。Terway通過池化的方式對資源進行緩存,當小于資源的池的最小水位時自動補充資源,在大于資源池最大水位時開始釋放資源,這樣保障了高效的資源利用和分配的效率。
相當于預先分配了ip,具體設置可以考慮到所在機器節(jié)點規(guī)格支持的最大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分配相關問題時,也可以通過進入到所在節(jié)點的terway pod中,執(zhí)行命令行,查看當前已分配的 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 ~
參考資料
[1]Terway 配置參考:
https://github.com/AliyunContainerService/terway/blob/main/docs/dynamic-config.md
本文轉載自微信公眾號「仙人技術」,可以通過以下二維碼關注。轉載本文請聯(lián)系仙人技術公眾號。