我刚刚进入Kubernetes,并非常喜欢它编排容器的能力。我假设当应用开始增长时,我可以简单地增加副本来满足需求。但是,既然我已经进行了一些基准测试,结果使我感到困惑。
我在 GKE 上使用单个 g1-small 机器作为节点在上运行带Apache 的 Laravel 6.2。我只使用NodePort
服务来公开该应用程序,因为LoadBalancer
似乎很昂贵。
使用的基准测试工具是wrk
和ab
。当副本增加到2个时,请求以某种方式下降。我希望请求数量会增加,因为有2个 pods 可用于处理请求。某处是否存在瓶颈,或者我的理解存在缺陷。希望有人能指出我所缺少的。
最佳答案
g1-small
instance确实很小:单个内核和1.7 GB RAM的利用率为50%。您没有描述应用程序的功能或配置文件的方式,但是,如果应用程序受CPU的限制,那么添加该进程的更多副本将完全无济于事。您仍然受到GCP为您提供的CPU数量的限制。如果您达到实例的内存限制,这将大大降低性能,那么无论交换还是副本之一都被OOM杀死。
可能会影响此基准测试的另一件事是,有时在有限的时间内,您可以允许达到100%的CPU利用率。因此,如果您有一个实例并运行了第一个基准测试,则它可能使用了突发周期并获得了更高的性能,但是随后在同一实例上重新运行第二个基准测试可能无法做到这一点。
简而言之,您不能仅仅提高Deployment上的副本数并期望获得更好的性能。您需要确定实际瓶颈在系统中的什么位置。诸如Prometheus之类的监视工具可以报告有关每个Pod CPU使用率的高级统计信息,可以提供帮助。在典型的数据库支持的Web应用程序中,数据库本身就是瓶颈,在Kubernetes级别上您无能为力。