前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot 微服务上容器平台的最佳实践 - 7

Spring Boot 微服务上容器平台的最佳实践 - 7

作者头像
东风微鸣
发布2022-04-21 14:02:25
3450
发布2022-04-21 14:02:25
举报
文章被收录于专栏:东风微鸣技术博客

前言

今天开始第七篇, 主要介绍 spring微服务的相关设计和开发思路。

在第六篇, Spring Boot 微服务部署到容器平台已经完工. 接下来我们就会对Spring 微服务的相关设计和开发, 以及K8S(或OpenShift)与Spring Boot之间的协作进行更深一层的设计和开发.

今天先开个头, 先介绍下K8S的Resource Limits概念, 通过这个概念可以对每个微服务的资源用量进行控制. 防止单个有问题微服务吃光全部资源导致雪崩效应.

RESOURCE LIMITS

OpenShift允许管理员设置约束来限制每个项目中使用的对象的数量或计算资源的数量。虽然这些约束总体上适用于项目(即namespace),但每个pod也可以请求最小的资源和/或受到内存和CPU使用限制的约束。

项目存储库中提供的OpenShift template使用此功能请求至少20%的CPU内核和200MB内存可用于其容器。如果需要并且可用,可以向容器提供两倍的处理能力和四倍的内存,但再超过就不会分配了。

代码语言:javascript
复制
resources:
  limits:
    cpu: "400m"
    memory: "800Mi"
  requests:
    cpu: "200m"
    memory: "200Mi"

📓 备注:

根据我之前的文章: 《容器最佳实践》

JAVA程序都有一个启动阶段,启动阶段也会大量消耗CPU, CPU使用越多, 启动阶段越短. 下面是一个表,总结了不同CPU限制下的spring boot 示例应用启动时间(m表示millicore):

  • 500m — 80 seconds
  • 1000m — 35 seconds
  • 1500m — 22 seconds
  • 2500m — 17 seconds
  • 3000m — 12 seconds

根据以上情况, 容器平台管理员考虑对JAVA容器做如下限制:

  • 使用CPU requests, 不设置cpu limit (Kubernetes功能) (或者限制到3000m)
代码语言:javascript
复制
resources:
  requests:
    memory: "1024Mi"
    cpu: "500m"
  limits:
    memory: "1024Mi"

当使用fabric8 Maven插件创建镜像并直接编辑deployment config不方便时,可以使用资源片段(resource fragments)来提供所需的片段。此应用程序提供deployment.yml文件来利用这个功能,并在Spring启动项目上设置资源请求和限制.

代码语言:javascript
复制
spec:
   replicas: 1
   template:
     spec:
       containers:
         - resources:
             requests:
               cpu: '200m'
               memory: '400Mi'
             limits:
               cpu: '400m'
               memory: '800Mi'

对各个服务的内存和CPU使用的控制通常是关键的。如上所述,这些值的正确配置与部署和管理过程是无缝衔接的。在项目中设置资源配额以强制将它们包含在pod部署配置中是有帮助的。

小结

通过K8S的Resource Limits的概念, 可以对容器(以及其中的微服务)进行内存和CPU的resource request和limit的配置. 允许根据需求分配容器到满足条件的机器, 同时限制容器的最大资源使用.

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 东风微鸣技术博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • RESOURCE LIMITS
  • 小结
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档