k8s集群serviceIP和podIP不够踩坑记录

前言

构建k8s集群大体可分为三种方式:

  1. 使用kubeadm或者封装了kubeadm的框架进行部署。
  2. 使用terraform在支持的云厂商进行部署。
  3. 直接购买云厂商现成的k8s集群产品。

这三种方式由难到易(其实难的也没多难,就是可能会稍微复杂一点点),这里记载使用terraform在腾讯云构建k8s集群因参数设置不对,导致serviceIP不够,且不能动态添加,最后只能重建集群,迁移服务的坑。

还有因为公司采用了serverless架构,导致产生大量微小服务,虽然启动速度更快,内存占用更小,服务根据并发灵活扩缩容,甚至能缩容到0,但是会占用大量的内部虚拟IP,所以cluster_cidr、service_cidr设置不足导致问题更加突出严重。

前情分析

使用terraform在腾讯云部署k8s环境时,往往需要设置这两个参数:

| 参数 | 说明 | 是否必须显式设置 | 默认值(如果不填) |
| —————— | ————————– | ——————– | ———————- |
| cluster_cidr | 集群内 Pod 使用的 CIDR | | 172.16.0.0/16 |
| service_cidr | 集群内 Service 使用的 CIDR | | 10.0.0.0/16 |

虽然可以默认,但在生产环境下,强烈建议显式设置,原因如下:

  1. IP 冲突规避:默认的 Pod 网段(172.16.0.0/16)如果与你 VPC 自身的子网 CIDR 冲突,会导致容器无法通信。
  2. 网段规划:如果你的腾讯云环境通过对等连接(Peering Connection)或 VPN 连接了其他 VPC 或办公网,必须显式规划网段以防路由冲突。
  3. 后期不可更改这两个参数在集群创建后无法修改。如果默认值选错了,后期扩容或联网出现冲突时,只能删掉集群重建。

默认网段大小还可以,但是往往会因为1,2原因网段冲突导致需要显示设置这两个参数,但是问题恰恰出现在这里,运维人员不清楚IP网段的含义,设置了过小的网段,导致IP不够,k8s集群启动不了更多的服务。

service_cidr不够时会报以下错误:

Error from server (InternalError): error creating service: Internal error occurred: failed to allocate a serviceIP: range is full

解决方案

遇到cluster_cidr不足时还能通过在后边增加、service_cidr则就不能增加,只能重建集群了,带来的影响是不可估量的,如果使用了ArgoCD自动化部署工具,并且服务实现了helm脚本,则迁移集群的复杂度则会大大降低。

小结

版权声明:除特殊说明,博客文章均为Mark原创,依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。VIP内容严禁转载! | 广告招租请留言
暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇