在Kubernetes中部署应用程序时,您必须遵循一些良好做法才能成为好公民。
您必须配置所需的资源,但更重要的是:向Kubernetes发出信号,表明您的应用程序仍在运行并且已经可以接收请求。
为了解释这些概念以及与自动缩放和限制有关的更多信息,Igor Domrev撰写了一篇文章:“ 如何在K8S上快速启动Java服务 ”。
- 在k8s和微服务时代,快速启动很重要,尤其是在集群运行于竞价型实例上的情况下,而且如果您希望轻松地横向扩展,在数据库故障转移甚至您自己的服务内存后重新启动,则非常重要。
- 像Netty这样的库,它使用可用处理器的数量来决定多事件循环的大小,或者是HikaeriCP一个流行的jdbc连接池,它使用处理器数来确定连接池的大小。所有这些工具和JVM本身都进行了优化,以调整线程与处理器的最佳比例,以便最佳利用CPU并减少线程上下文切换。
- JVM使用可用核的数量来确定GC线程和编译器线程(jit线程)的数量,所有这些线程都在争夺CPU。
- 当他们共享200个k8s微核时会发生什么呢?从本质上讲,Docker的CPU分配机制将限制请求更多CPU资源的容器,这将导致线程阻塞和执行缓慢。
- 增加Java服务CPU的限制虽然使其启动更快,但会导致CPU超负荷使用,需要仔细管理。
如果要部署到容器,请记住使用新的+XX:MaxRAMPercentage配置参数正确配置分配给JVM的内存,使其与容器中的可用内存成比例。您可以在本文中阅读有关它的更多信息:“ 容器中的JVM ”。