前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ack集群Terway网络场景下的vSwitch扩容

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

作者头像
仙人技术
发布2021-12-28 12:47:02
9990
发布2021-12-28 12:47:02
举报

1、Terway网络介绍

Terway是阿里云开源的基于专有网络VPC的容器网络接口CNI(Container Network Interface)插件,支持基于Kubernetes标准的网络策略来定义容器间的访问策略。可以通过使用Terway网络插件实现Kubernetes集群内部的网络互通

Terway网络插件将原生的弹性网卡分配给Pod实现Pod网络,支持基于Kubernetes标准的网络策略(Network Policy)来定义容器间的访问策略,并兼容Calico的网络策略

Terway网络插件中,每个Pod都拥有自己网络栈和IP地址。同一台ECS内的Pod之间通信,直接通过机器内部的转发,跨ECSPod通信,报文通过VPC的弹性网卡直接转发。由于不需要使用VxLAN等的隧道技术封装报文,因此Terway模式网络具有较高的通信性能

一句话总结,Terway最大的特点就是借助于云上ECS服务器的特性,将podnode的网络进行了拉平,同时使用VPCvSwitch中的ip

2、问题现象

由于使用了Terway网络模式,随着node机器和pod数量的增多,每分配一个ip出去都需要消耗掉vpcvsw的可用ip。如果某短时间业务快速增长,导致pod大量消耗可用ip,这个时候就有可能因前期规划不充足导致vSwitch的可用ip不足

这个时候新创建的pod状态为ContainerCreatingdescribe查看pod提示error allocate ip...,这个时候查看Pod所在节点的Terway的日志,会有下面内容

代码语言:javascript
复制
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密度越来越大,为了满足PodIP地址日益增长的需求,建议创建给Pod使用的vSwitch的网络位小于等于19,即每个网段中至少包含8192个可用IP地址

vSwitch创建完成后,需要对这个vSwitch配置NAT策略,以便访问外部网络

3.2 配置集群的Terway

配置集群的Terway,添加上面创建的vSwitchTerwayConfigMap配置中

代码语言:javascript
复制
kubectl -n kube-system edit cm eni-config

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

代码语言:javascript
复制
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

重启所有Terwaypod以便快速刷新缓存生效

代码语言:javascript
复制
# kubectl -n kube-system delete pod -l app=terway-eniip
# kubectl -n kube-system get pod | grep terway

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

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

代码语言:javascript
复制
# 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 ~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、Terway网络介绍
  • 2、问题现象
  • 3、扩容操作
    • 3.1 新增交换机并配置NAT
      • 3.2 配置集群的Terway
        • 3.3 重启terway
        相关产品与服务
        私有网络
        私有网络(Virtual Private Cloud,VPC)是基于腾讯云构建的专属云上网络空间,为您在腾讯云上的资源提供网络服务,不同私有网络间完全逻辑隔离。作为您在云上的专属网络空间,您可以通过软件定义网络的方式管理您的私有网络 VPC,实现 IP 地址、子网、路由表、网络 ACL 、流日志等功能的配置管理。私有网络还支持多种方式连接 Internet,如弹性 IP 、NAT 网关等。同时,您也可以通过 VPN 连接或专线接入连通腾讯云与您本地的数据中心,灵活构建混合云。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档