生产环境中MySQL容器的cpu、内存配置原则是什么?对应的worker节点上配置如何规划?
收起首先,在配置资源的时候,我们需要对可压缩资源有一个了解,那就是可压缩资源不会引起容器的自动销毁,不会异常退出。比如CPU这种通过时间片轮转的就是可压缩资源,MEM这种就是不可压缩资源,因为拿到的CPU时间片少了,只是影响算力,但MEM这种,一旦少了就会引起 outofmemory 异常,没法完成一个程序的正常加载,那自然就会引起容器的崩溃而重启。
回到话题,那具体配置多少CPU/MEM,甚至磁盘大小、网络IO,都是根据实际使用来规划的。一个比较好的做法是,分二步走。第一步,先不设置 limit,让他们跑一个星期左右,再来看看他们的CPU/MEM的使用率,这个kubelet的cadvisor 自带metrics数据,只要用 promethues或其他监控工具对接就可以看出来。然后取最高点的 1.25 倍,我觉得就可以的。如果资源富有,就可以设置更高一点。
对于 worker 中的配置,首先要预留一些系统资源给操作系统,还要预留一些资源给 K8S 组件,比如 kubelet 等,只有在保证他们的资源充足时,才不会影响到该 worker 节点上运行的容器的正常运行。这些都有参数进行配置,比如:
systemReserved:
memory: 1536Mi
cpu: 1536m
pid: "1024"
ephemeral-storage: 1Gi
kubeReserved:
memory: 1536Mi
cpu: 1536m
pid: "1024"
ephemeral-storage: 1Gi
具体参考 kubelet 参数列表。