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-***** -n kube-system -c terway- 若系统输出类似以下错误信息,说明该节点的Terway所使用的vSwitch没有空余的IP地址,Pod会因为没有IP资源而一直处于 - ContainerCreating状态。- time="20**-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-***\" 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地址。 
- 登录容器服务管理控制台,在左侧导航栏单击集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,单击组件管理。 
- 在组件管理页面,单击网络页签,选择需要升级的目标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网关的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。 
解决方法:您可以通过新建节点、轮转老节点的方式来确保配置文件在新节点上生效。