容器服务Kubernetes的Terway网络场景中交换机的IP资源不足

更新时间:

问题描述

在创建Pod时发现无法创建,登录VPC控制台,选择目标地域,单击交换机,查看集群使用的交换机(vSwitch)信息,发现该vSwitch可用IP数为0。如何进一步确认问题请参见更多信息

问题原因

该节点的Terway所使用的vSwitch没有空余IP地址,导致Pod会因为没有IP资源而一直处于ContainerCreating状态。

解决方案

您可以参考以下内容,扩容vSwitch,即添加新的vSwitch,扩容集群的IP资源:

  1. 登录VPC控制台,选择目标地域,创建新的vSwitch。
    说明:该vSwitch必须与IP资源不足的vSwitch在同一个地域和可用区。如果Pod密度越来越大,建议给Pod使用的vSwitch网段的网络位小于等于19,也就是网段至少包含8192个IP地址。
  2. 执行以下命令,编辑Terway的ConfigMap配置。
    kubectl edit cm eni-config -n kube-system

    在编辑模式中添加vsw-BBB(新创建的交换机名)到vswitches处,vsw-AAA是已经存在的、IP资源不足的vSwitch。具体格式如下所示。

    eni_conf: |
    {
    "version": "1",
    "max_pool_size": 25,
    "min_pool_size": 10,
    "vswitches": {"cn-shanghai-f":["vsw-AAA", "vsw-BBB"]},
    "service_cidr": "172.X.X.0/20",
    "security_group": "sg-CCC"
    }
  3. 查看Terway版本,如果Terway不是最新的版本,需要您在组件管理页面将Terway升到最新版本,详情请参见管理组件
  4. 参考以下命令,删除全部Terway Pod,删除后Terway Pod会重新创建。
    说明:如果您在创建集群时,使用Terway并勾选了Pod独占弹性网卡以获得最佳性能,说明您是ENI单IP;没有勾选则是ENI多IP,详细信息请参见Terway网络插件
    • 针对ENI多IP场景:kubectl delete -n kube-system pod -l app=terway-eniip
    • 针对ENI单IP场景:kubectl delete -n kube-system pod -l app=terway-eni
  5. 然后执行kubectl get pod命令,确认全部Terway Pod重建成功。
  6. 创建新的Pod,确认Pod创建成功且可以从新vSwitch成功分配获得IP。

更多信息

连接Kubernetes集群,如何连接请参见通过kubectl连接Kubernetes集群,执行kubectl get pod命令,发现Pod状态为ContainerCreating。执行以下命令,查看Pod所在节点的容器日志。

kubectl logs --tail=100 -f [$Pod_Name] -n kube-system -c [$Container_Name]

说明

  • [$Pod_Name]为Pod的名称。
  • [$Container_Name]为Pod所在的容器名。

系统显示类似如下,出现类似InvalidVSwitchId.IpNotEnough错误信息。

time="2020-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-AAA\" has not enough IpAddress., retrying"

相关文档

适用于

  • 容器服务Kubernetes版