写点什么

利用 Kubernetes 名称空间来管理内存和 CPU 资源(三)

  • 2019 年 11 月 21 日
  • 本文字数:2827 字

    阅读完需:约 9 分钟

利用Kubernetes名称空间来管理内存和CPU资源(三)

众所周知,Kubernetes 是允许指定 CPU 和 RAM 的请求和限制的,这一特性对于单独的 pod 的资源消耗管理非常有用。在本系列文章中,我们将向大家展示集群资源的高效管理的三种策略。


众所周知,Kubernetes 是允许指定 CPU 和 RAM 的请求和限制的,这一特性对于单独的 pod 的资源消耗管理非常有用。


但是,如果你是 Kubernetes 集群管理员,你可能还希望控制集群中资源的全局性消耗,并/或配置所有容器的默认资源需求。


值得高兴的是,Kubernetes 支持名称空间级别的集群资源管理。正如你可能已经知道的,Kubernetes 的名称空间提供了名称和资源配额的范围,这允许在多个用户、项目和团队之间有效地划分集群资源。在 Kubernetes 中,你可以定义缺省资源请求和限制、资源约束(最小和最大资源请求和限制),以及在给定名称空间中运行的所有容器的资源配额。这些特性使得集群中的应用程序能够高效地利用资源,并在不同的团队之间有效地分配资源。例如,使用名称空间的资源约束允许你控制生产和开发工作负载如何使用资源,从而允许它们消耗有限的集群资源的公平份额。这可以通过为生产和开发工作负载创建单独的名称空间来实现,并为它们分配不同的资源约束。


在系列文章中,我们将向你展示集群资源的高效管理的三种策略:


1.设置默认的资源请求和容器的限制


2.定义最小和最大的资源约束


3.为名称空间中的所有容器设置资源配额


这些策略将帮助你解决各种各样的用例,利用 Kubernetes 名称空间和资源管理的全部功能。


为名称空间设置内存和 CPU 配额

在前面的例子中,我们为运行在名称空间中的单个容器设置了资源约束。但是,也可以限制资源请求,并限制在名称空间中运行的所有容器的总数。这可以很容易地通过为名称空间定义的 ResourceQuota 资源对象来实现。


为了说明资源配额是如何工作的,让我们首先创建一个新的名称空间,以便在这个练习中创建的资源与集群的其他部分隔离:


kubectl create namespace resource-quota-demonamespace "resource-quota-demo" created
复制代码


接下来,让我们创建一个 ResourceQuota 对象,为我们的名称空间提供资源配额:


apiVersion: v1kind: ResourceQuotametadata:  name: resource-quotaspec:  hard:    requests.cpu: "1.4"    requests.memory: 2Gi    limits.cpu: "2"    limits.memory: 3Gi
复制代码


这种 ResourceQuota 为名称空间设置了以下要求:


  • ResourceQuota 强制每个容器定义它的内存和 CPU 请求和限制。

  • 所有容器的内存请求总数不得超过 2 Gi。

  • 名称空间中所有容器的 CPU 请求总数不应超过 1.4 CPU。

  • 名称空间中所有容器的内存限制不应超过 3 Gi。

  • 名称空间中所有容器的 CPU 限制总数不应该超过 2 个 CPU。


将这个规范保存在 resource-quota.yaml 并通过以下命令创建 ResourceQuota:


kubectl create -f resource-quota.yaml --namespace resource-quota-demoresourcequota "resource-quota" created
复制代码


ResouceQuota 对象是在我们的名称空间中创建的,并准备好控制该名称空间中的所有容器的总请求和限制。让我们看看 ResourceQuota 的描述:


kubectl get resourcequota --namespace resource-quota-demo --output=yaml
复制代码


响应如下:


hard:      limits.cpu: "2"      limits.memory: 3Gi      requests.cpu: 1400m      requests.memory: 2Gi  status:    hard:      limits.cpu: "2"      limits.memory: 3Gi      requests.cpu: 1400m      requests.memory: 2Gi    used:      limits.cpu: "0"      limits.memory: "0"      requests.cpu: "0"      requests.memory: "0"kind: List
复制代码


这个输出表明在名称空间中还没有消耗内存和 CPU。让我们创建两个 pod 来改变这种情况。


第一个 pod 将请求 1.3 Gi RAM 和 0.8 个 CPU,并拥有 1.2 个 CPU 和 2 Gi RAM 的资源限制。


apiVersion: v1kind: Podmetadata:  name: resource-quota-pod-1spec:  containers:  - name: resource-quota-ctr-1    image: httpd:2.4    resources:      limits:        memory: "2Gi"        cpu: 1.2      requests:        memory: "1.3Gi"        cpu: 0.8
复制代码


我们保存为 resource-quota-pod-1.yaml 并在我们的名称空间中创建 pod:


kubectl create -f resource-quota-pod-1.yaml --namespace resource-quota-demopod "resource-quota-pod-1" created
复制代码


pod 之所以成功创建,是因为容器的请求和限制都在名称空间的资源配额中。让我们通过检查 ResourceQuota 对象的当前使用量来验证这一点:


kubectl get resourcequota --namespace resource-quota-demo --output=yaml
复制代码


响应如下:


status:    hard:      limits.cpu: "2"      limits.memory: 3Gi      requests.cpu: 1400m      requests.memory: 2Gi    used:      limits.cpu: 1200m      limits.memory: 2Gi      requests.cpu: 800m      requests.memory: 1395864371200m
复制代码


如你所见,第一个 pod 已经消耗了 ResourceQuota 中的一些资源。让我们创建另一个 pod,以进一步增加可用资源的消耗:


apiVersion: v1kind: Podmetadata:  name: resource-quota-pod-2spec:  containers:  - name: resource-quota-ctr-2    image: httpd:2.4    resources:      limits:        memory: "1.3Gi"        cpu: 0.9      requests:        memory: "1Gi"        cpu: 0.8
复制代码


我们保存为 resource-quota-pod-2.yaml 并创建 pod:


kubectl create -f resource-quota-pod-2.yaml --namespace resource-quota-demo
复制代码


运行此命令将导致以下错误:


Error from server (Forbidden): error when creating "resource-quota-pod-2.yaml": pods "resource-quota-pod-2" is forbidden: exceeded quota: resource-quota, requested: limits.cpu=900m,limits.memory=1395864371200m,requests.cpu=800m,requests.memory=1Gi, used: limits.cpu=1200m,limits.memory=2Gi,requests.cpu=800m,requests.memory=1395864371200m, limited: limits.cpu=2,limits.memory=3Gi,requests
复制代码


如上所见,Kubernetes 不允许我们创建这个 pod,因为容器的 CPU 和 RAM 请求和限制超出了这个名称空间的 ResourceQuota 要求。


清理

这个例子已经完成了,让我们来清理一下:


删除名称空间:


kubectl delete namespace resource-quota-demonamespace "resource-quota-demo" deleted
复制代码


总结

我们已经讨论了如何设置默认的资源请求和限制,以及如何在 Kubernetes 名称空间中为容器创建资源约束和资源配额。


如你所见,通过设置名称空间中的容器的默认请求和限制,我们可以在没有人工指定的资源请求和限制的情况下,强制使用名称空间范围的资源政策。


此外,我们还了解了如何使用资源约束来限制容器在名称空间中消耗的资源数量。该特性有助于不同应用程序类和团队有效地管理资源,并确保集群中空闲资源的持续可用性。同样的效果(但在更大的范围内)可以通过资源配额来实现,这允许定义名称空间中所有容器的资源总消耗的资源约束。


本文转载自公众号 360 云计算(ID:hulktalk)。


原文链接:


https://mp.weixin.qq.com/s/rUErpD9PFr3QNYOkXTqB5g


2019 年 11 月 21 日 17:59382

评论

发布
暂无评论
发现更多内容

英特尔举办第十四届物联网峰会,携手中国生态伙伴迈向融合边缘新时代

科技新消息

【直播回顾】5步实现精细化用户触达,助力业务增长

极光JIGUANG

消息推送 用户触达

这还不够全?阿里P8架构师耗时八年时间才整理出来这“Java核心知识PDF(Java高岗)

Java 程序员 架构 面试 后端

轻松搞懂mysql的执行计划,再也不怕sql优化了

互联网架构师小马

Angular 依赖注入 - 全面解析

PingCode研发中心

angular 依赖注入 对象提供者 注入器 令牌

EDA 事件驱动架构与 EventBridge 二三事

阿里巴巴云原生

阿里云 云原生 EDA架构 事件驱动型架构

Java集合核心内容之葵花宝面,搞定90%以上的技术面!建议收藏

程序员小呆

Java 程序员 架构师

Qcon 免费报名 | 融云「实时通信技术专场」议题抢鲜看

融云 RongCloud

开发者 通信云 场景化

2021云栖大会丨果断收藏!「混合云参会指南」来啦~

阿里云情报局

人工智能 阿里云 互联网 云栖大会 前沿科技

音视频编解码 -- 编码参数 CRF

声网

ffmpeg 视频编解码 视频压缩 CRF

阿里P8手抄本惨遭泄露,并出现病毒式传播,致28人斩获大厂offer

收到请回复

Java 面试 阿里 大厂Offer

惊了!网易架构大牛熬夜手敲千页网络协议笔记,竟在Github上标星百万!

Java 架构 面试 程序人生 编程语言

阿里巨擎耗时六个月整理的这套图解HTTP笔记,在Github上被疯狂转载!

Java 架构 面试 程序人生 编程语言

递推算法与递推套路(算法基础篇)

有道技术团队

算法 大前端 网易有道

【浪潮云说】直播间第九期今晚20:00准时开播

浪潮云

云计算

Zookeeper 集群部署的那些事儿

牧小农

zookeeper

EMQ X VS RabbitMQ:两大消息服务器 MQTT 性能对比全解(下)

EMQ映云科技

RabbitMQ 物联网 IoT mqtt emq

Python代码阅读(第36篇):列表偏移

Felix

Python 编程 Code Programing 阅读代码

MyBatis 执行流程及源码解析

互联网架构师小马

动态模型之增压暂停【FunTester测试框架】

FunTester

性能测试 接口测试 测试框架 FunTester 动态模型

拒绝焦虑!Alibaba巨擎随手甩来的一本Java性能优化让我收获满满

Java 架构 面试 程序人生 编程语言

智能化如何升级传统厨房烹饪体验?苏泊尔与鸿蒙智联携手交出创新答卷

科技汇

堡垒机提供的运维报表有什么用?怎么简单解释?

行云管家

运维 堡垒机 IT运维

网络安全产品之堡垒机应用于金融行业案例讲解

行云管家

云计算 网络安全 等保 堡垒机

Android 资源溢出崩溃轻松解

字节跳动终端技术

字节跳动 移动开发 Mars 火山引擎 MARS-APMPlus

保持高效学习的 7 个方法

Phoenix

学习方法

J2PaaS 低代码平台,正式发布开源版!

J2PaaS低代码平台

低代码 零代码 低代码开发 低代码开发平台 无代码平台

Linux服务器部署服务

黄敏

网易云信 NERTC 高清画质体验之 H.265的工程实践 | 体验共享技术专题

网易云信

Java 测试 音视频 视频

2.两数相加(链表)

黄敏

自定义View:文字的测量与绘制

Changing Lin

10月日更

利用Kubernetes名称空间来管理内存和CPU资源(三)_文化 & 方法_360云计算_InfoQ精选文章