11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

利用 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:59456

评论

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

以区块链技术推进应急管理体系现代化

CECBC

高危!Fastjson反序列化远程代码执行漏洞风险通告,请尽快升级

葡萄城技术团队

json 安全 Fastjson

【深入理解TcaplusDB技术】理解条件过滤与更新

TcaplusDB

数据库 nosql TcaplusDB 腾讯游戏

【深入理解TcaplusDB技术】TcaplusDB数据库介绍 TcaplusDB与MongoDB概念对比

TcaplusDB

数据库 TcaplusDB 腾讯游戏 NoSQL 数据库

【深入理解TcaplusDB技术】理解TcaplusDB本地索引

TcaplusDB

数据库 nosql TcaplusDB 腾讯游戏

推荐书籍-《持续行动-从想到到做到》

消失的子弹

书籍推荐

大数据培训数仓指标体系搭建

@零度

大数据开发

前端监控的搭建步骤,别再一头雾水了!

杨成功

架构 大前端 5月月更

重磅首发!火线安全发布《云安全攻防技术期刊》

火线安全

安全 云安全

集成底座内外网访问配置说明

agileai

k8s 集成底座 企业服务总线 身份管理平台 主数据平台

数字人民币智慧学生证来了,对于特定群体硬钱包或大有可为

CECBC

netty系列之:在netty中使用TCP协议请求DNS服务器

程序那些事

Java Netty 程序那些事 5月月更

【深入理解TcaplusDB技术】理解TcaplusDB全局索引

TcaplusDB

数据库 nosql TcaplusDB 腾讯游戏

网络攻击盯上民生领域,应对DDoS和APT攻击,如何有效防御?

郑州埃文科技

IP地址 网络资产保护 网络攻击防御

互联网通信安全之终端数据保护

融云 RongCloud

fastposter v2.8.2 发布 电商海报生成器

物有本末

更全、更精准,美创科技实现Caché数据库M语言精细化审计

美创科技

cache 数据安全 数据库审计

从流量交换到共享联盟,开放银行如何助力金融数字转型?

CECBC

uniapp 如何将输入值转成大写

CRMEB

盘点使用最广泛的14个最佳Scrum工具(功能与报价)

PingCode

《Mybatis 手撸专栏》第9章:细化XML语句构建器,完善静态SQL解析

小傅哥

源码分析 小傅哥 源码学习 手写Mybatis 源码实践

2021年证券类APP更新迭代监测专题分析(中)发布

易观分析

证券

等保二级和等保三级的三大区别讲解-行云管家

行云管家

网络安全 等保 等级保护 等保2.0 等保二级

【深入理解TcaplusDB技术】理解预设Schema表类型

TcaplusDB

数据库 nosql TcaplusDB 腾讯游戏

leetcode 75. Sort Colors 颜色分类

okokabcd

LeetCode 排序

TreeMap源码分析-新增

zarmnosaj

5月月更

数据库厂家有哪些?排名怎么样?

行云管家

数据库 IT运维 运维审计 数据库审计

【深入理解TcaplusDB技术】数组操作介绍

TcaplusDB

数据库 nosql TcaplusDB 腾讯游戏

为应用赋能!博云容器云产品族正式发布

BoCloud博云

容器 云原生 容器云

固定资产投资管理系统解决方案

低代码小观

资产管理 CRM系统 客户关系管理系统 企业设备管理 设备巡检管理系统

网页在线帮助中心的搭建策略

小炮

帮助中心

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