Ack集群Terway网络场景下的vSwitch扩容

网络 通信技术
Terway是阿里云开源的基于专有网络 VPC 的容器网络接口CNI(Container Network Interface)插件,支持基于Kubernetes标准的网络策略来定义容器间的访问策略。

[[442525]]

 目录

  • 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的日志,会有下面内容

  1. 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配置中。

  1. kubectl -n kube-system edit cm eni-config 

配置样例参考Terway 配置参考[1],部分内容说明如下:

  1. apiVersion: v1 
  2. kind: ConfigMap 
  3. metadata: 
  4.   name: eni-config 
  5.   namespace: kube-system 
  6. data: 
  7.   10-terway.conf: |- 
  8.     { 
  9.       "cniVersion""0.3.0"
  10.       "name""terway"
  11.       "type""terway" 
  12.     } 
  13.   disable_network_policy: "true" 
  14.   eni_conf: |- 
  15.     { 
  16.       "version""1",  # 版本 
  17.       "max_pool_size": 80,  # 资源池最大水位 
  18.       "min_pool_size": 20,  # 资源池最小水位 
  19.       "credential_path""/var/addon/token-config"
  20.       "vswitches": {"cn-shanghai-f":["vsw-AAA""vsw-BBB"]},  # 关联的虚拟交换机(ENI多IP模式),添加vsw-BBB到VSwitches部分,其中vsw-AAA是已经存在的且IP资源不足的VSwitch 
  21.       "eni_tags": {"ack.aliyun.com":"xxxxxxxxx"}, 
  22.       "service_cidr""172.16.0.0/16",  # 服务CIDR 
  23.       "security_group""sg-xxxxxxx", # 安全组ID 
  24.       "vswitch_selection_policy""ordered" 
  25.     } 

上面配置参数中,资源池水位的配置值。Terway使用底层虚拟化底层的网络资源打通容器网络,网络资源的创建和释放需要一系列的API调用,如果在Pod创建销毁时频繁调用API会导致Pod配置时间较长。Terway通过池化的方式对资源进行缓存,当小于资源的池的最小水位时自动补充资源,在大于资源池最大水位时开始释放资源,这样保障了高效的资源利用和分配的效率。

相当于预先分配了ip,具体设置可以考虑到所在机器节点规格支持的最大eni辅助网卡个数以及最大pod数灵活设置。

3.3 重启 terway

重启所有Terway的pod以便快速刷新缓存生效。

  1. # kubectl -n kube-system delete pod -l app=terway-eniip 
  2. # kubectl -n kube-system get pod | grep terway 

重启后检查异常的pod是否正常获取了ip即可。

当排查某个pod的ip分配相关问题时,也可以通过进入到所在节点的terway pod中,执行命令行,查看当前已分配的 ip 情况,以及已经从vSwitch分配得来后,暂时空闲的ip情况。

  1. # terway-cli mapping 
  2. Status | Pod Name                                               | Res ID                           | Factory Res ID 
  3. 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 
  4. ... 
  5. Idle   |                                                        | 00:16:10:48:3e:37.10.244.18.132 | 00:16:10:48:3e:37.10.244.18.132 
  6. Idle   |                                                        | 00:16:10:48:3e:37.10.244.18.18  | 00:16:10:48:3e:37.10.244.18.18 
  7. 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

本文转载自微信公众号「仙人技术」,可以通过以下二维码关注。转载本文请联系仙人技术公众号。

 

 

责任编辑:武晓燕 来源: 仙人技术
相关推荐

2021-02-06 08:51:32

MyCAT扩容场景

2015-10-10 14:54:00

网络虚拟化物理网络vSwitch

2018-08-08 15:35:42

网络故障网络异常网络报错

2011-10-27 10:21:57

数据中心虚拟化虚拟交换机

2021-03-29 15:59:52

区块链比特币扩容

2011-08-18 12:19:17

vSwitchVMNIC

2020-11-04 11:25:33

Linux目录命令

2018-08-08 10:32:55

分布式集群存储

2012-11-19 16:16:05

TD-LTECDMA网络架构

2016-08-12 15:40:17

CCEKubernetes华为

2011-08-30 10:10:21

vSphere vSwVLAN虚拟交换机

2021-09-28 11:30:37

阿里云容器ACK

2024-08-13 15:46:57

2021-10-07 16:45:44

存储网络场景

2016-10-21 15:07:11

2022-05-27 09:25:49

数据并发

2023-10-18 07:09:31

AIGC浏览器

2023-12-26 08:59:52

分布式场景事务机制

2020-04-20 10:40:19

红蓝对抗网络攻击数据泄露

2022-05-13 07:26:28

策略模式设计模式
点赞
收藏

51CTO技术栈公众号