kubernetes - Kubernetes 资源管理最佳实践
问题描述
我有一个集群,我在其中管理每个项目的命名空间。
每个命名空间都有一个资源配额对象,DevOps 定义每个部署的使用情况。
我面临的一个反复出现的问题是,Kubernetes 根据“已使用”限制与“硬”配额的非常基本的总和来调度 Pod。
我可能被迫设置相当高的数量,尤其是在 CPU 中,因为 pod 需要管理突发,但很少同时超过几个。
如果我有一个 10 个 pod 应用程序,每个都有可能爆发到 4 个核心,我需要定义 40 个核心的资源配额限制,即使它与应用程序的潜在使用完全无关,即使在压力下也是如此。
尤其如此,因为这些项目中的大多数都需要爆发来处理 pod 启动。
VPA 本来可以解决这个问题,但我主要关心的是 pod 启动,而 VPA 需要杀死 pod 以调整其资源使用情况,所以它有点死锁。
我不确定在 k8s 集群中管理资源使用的最佳实践是什么。
很明显,我的方法是失败的。
解决方案
如果我有一个10 个 pod应用程序,每个都有可能爆发到4 个核心,我需要定义 40 个核心的资源配额限制,即使它与应用程序的潜在使用完全无关,即使在压力下也是如此。
您不需要定义 40 个内核。
在 K8S 中,您可以为您的对象定义最小和最大资源。
例如,如果您希望将资源限制为最多 4 个 CPU,您仍然可以从 0.5 CPU 开始,这意味着对于 10 个 Pod,您只需要 0.5*10=5CPU
apiVersion: v1
kind: Pod
metadata:
name: ...
spec:
containers:
- name: app
image: ...
#
# Here we limit our Object regarding resources consuming
#
resources:
# Minimum resources for starting
requests:
memory: "64Mi"
# m= mili, in this sample it will require 0.5CPU
cpu: "500m"
# Maximum resources consumption
limits:
memory: "128Mi"
cpu: "4"
推荐阅读
- java - 使用 BouncyCastle/Java 对 InputStream 进行 PGP 加密
- numpy - pyqgis:从列表中创建多层(自动)
- c++ - 尝试运行 CusolverSSgels 测试用例,但它不起作用
- flutter - Flutter Https 未处理异常:参数无效
- magento2 - 状态码:安装 Magento-2 后出现 500 错误。我无法查看我的主页,也无法登录到后端
- lua - 如何在路由请求之前从 haproxy 中的 lua 发送 https 请求?
- data-structures - 展开树中的有序继任者和前任者
- reactjs - 如何让 KeycloakProvider 包装 next-redux-wrapper?
- spring-jdbc - 使用带参数的 SET_JSON 时,NamedParameterJdbcTemplate 语法错误
- reactjs - 托管在通过 Azure Front Door 访问的存储帐户上的静态网站未正确加载