本篇目录链接
背景
在t环境上的不同namespace(t1-t10)复制相同的服务(20+),由于前期在进行集群容量规划时,未考虑到svc所消耗的clusterip的数量,仅仅对其网络的ip范围设定了254个,即10.0.0.0/24。因此导致出现集群的svc网络用尽。
现象
Error from server (InternalError): error when creating "deployment-evaluation-api.yaml": Internal error occurred: failed to allocate a serviceIP: range is full
原因分析
step1:通过终端报错,显然提示svc的网络已经用尽,无法分配ip
说明:查看k8s集群的svc网络ip使用数量,这个svc网络主要是抽象到k8s集群service时用的到ip,用于为每组service分配一个clusterip。
kubectl get svc -A | grep '10.' | wc -l #查看整个集群的svc网络占用量
step2:查看apiserver中定义的svc网络(–service-cluster-ip-range)
说明:由于我的k8s集群是通过二进制部署的,我的k8s的apiserver配置位于/opt/kubernetes/cfg下面。
cat /opt/kubernetes/cfg/kube-apiserver.conf
可以看到,现有集群的service-cluster-ip-range是10.0.0.0/24,也就是说这个网段下只有254个可用的ip,也就验证了上面step1
分析的原因。
结论
k8s集群的svc网络资源用尽
处理方法
在aipserver的配置文件中,将--service-cluster-ip-range=10.0.0.0/24
改为--service-cluster-ip-range=10.0.0.0/16
(10.0.0.0/16这个网络可以支持65536个ip地址,对于svc的clusterip来说已经够用了),重启apisrever服务即可。
systemctl restart kube-apiserver.service
kubectl get svc -A | wc -l
温馨提示
因为我是将--service-cluster-ip-range=10.0.0.0/24
调整成--service-cluster-ip-range=10.0.0.0/16
,原则上对我已有的svc上的clusterip是不受影响了(这个已经验证过),因为10.0.0.0/16网段是包含10.0.0.0/24网段的,所以对已有的svc网络没有影响。但是如果将10.0.0.0/24调整为
10.254.0.0/16,那势必会对整个集群的svc网络会有改动,因为虽然10.254.0.0/16的容量也大了,但是却改变了整个集群svc的网络结构。
当然在生产环境中还是建议尽可能在规划阶段都要考虑到这个容量规划的问题。
原有的t4 namespace下的svc的时间并没有刷新。
10.0.0.0/24
10.0.0.0/16
10.254.0.0/16