问题描述
在创建Pod时发现无法创建,登录VPC控制台,选择目标地域,单击交换机,查看集群使用的交换机(vSwitch)信息,发现该vSwitch可用IP数为0。如何进一步确认问题请参见更多信息。
问题原因
该节点的Terway所使用的vSwitch没有空余IP地址,导致Pod会因为没有IP资源而一直处于ContainerCreating状态。
解决方案
您可以参考以下内容,扩容vSwitch,即添加新的vSwitch,扩容集群的IP资源:
- 登录VPC控制台,选择目标地域,创建新的vSwitch。
说明:该vSwitch必须与IP资源不足的vSwitch在同一个地域和可用区。如果Pod密度越来越大,建议给Pod使用的vSwitch网段的网络位小于等于19,也就是网段至少包含8192个IP地址。
- 执行以下命令,编辑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" }
- 查看Terway版本,如果Terway不是最新的版本,需要您在组件管理页面将Terway升到最新版本,详情请参见管理组件。
- 参考以下命令,删除全部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
- 针对ENI多IP场景:
- 然后执行
kubectl get pod
命令,确认全部Terway Pod重建成功。 - 创建新的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版