K8S名称空间和资源配额

2023-09-15 15:59:53

       Kubernetes 支持多个虚拟集群,底层依赖于同一个物理集群。 这些虚拟集群被称为名称空间。名称空间namespace是k8s集群级别的资源,可以给不同的用户、租户、环境或项目创建对应的名称空间,例如,可以为test、dev、prod环境分别创建各自的命名空间。

      当多个用户或团队共享具有固定节点数目的集群时,人们会担心有人使用超过其基于公平原则所分配到的资源量。资源配额是帮助管理员解决这一问题的工具。

      资源配额,通过 ResourceQuota 对象来定义,对每个命名空间的资源消耗总量提供限制。 它可以限制命名空间中某种类型的对象的总数目上限,也可以限制命名空间中的 Pod 可以使用的计算资源的总上限。

      资源配额的工作方式如下:

  • 不同的团队可以在不同的命名空间下工作。这可以通过 RBAC 强制执行。

  • 集群管理员可以为每个命名空间创建一个或多个 ResourceQuota 对象。

  • 当用户在命名空间下创建资源(如 Pod、Service 等)时,Kubernetes 的配额系统会跟踪集群的资源使用情况, 以确保使用的资源用量不超过 ResourceQuota 中定义的硬性资源限额。

  • 如果资源创建或者更新请求违反了配额约束,那么该请求会报错(HTTP 403 FORBIDDEN), 并在消息中给出有可能违反的约束。

  • 如果命名空间下的计算资源 (如 cpu 和 memory)的配额被启用, 则用户必须为这些资源设定请求值(request)和约束值(limit),否则配额系统将拒绝 Pod 的创建。 提示: 可使用 LimitRanger 准入控制器来为没有设置计算资源需求的 Pod 设置默认值。

下面介绍下怎么给k8s集群中的名称空间做资源配额限制。

查看名称空间:

# kubectl get ns

k8s 默认有以上四个名称空间

创建一个test名称空间

# kubectl create ns test

如何对namespace资源做限额呢?

查看帮助命令:

# kubectl explain quota

参数介绍:

资源名称描述
limits.cpu所有非终止状态的 Pod,其 CPU 限额总量不能超过该值。
limits.memory所有非终止状态的 Pod,其内存限额总量不能超过该值。
requests.cpu所有非终止状态的 Pod,其 CPU 需求总量不能超过该值。
requests.memory所有非终止状态的 Pod,其内存需求总量不能超过该值。
hugepages-<size>对于所有非终止状态的 Pod,针对指定尺寸的巨页请求总数不能超过此值。
cpu与 requests.cpu 相同。
memory与 requests.memory 相同。

下面我们给test这个名称空间创建一个资源配额限制

# vi namespace-quota.yaml

apiVersion: v1
kind: ResourceQuota
metadata:
  name: mem-cpu-quota
  namespace: test
spec:
  hard:
    requests.cpu: "2"
    requests.memory: 2Gi
    limits.cpu: "4"
    limits.memory: 4Gi

说明:每个容器必须设置内存请求(memory request),内存限额(memory limit),cpu请求(cpu request)和cpu限额(cpu limit)。

所有容器的内存请求总额不得超过2GiB。

所有容器的CPU请求总额不得超过2 CPU。

所有容器的内存限额总额不得超过4 GiB。

所有容器的CPU限额总额不得超过4CPU

执行资源文件:

# kubectl apply -f namespace-quota.yaml

查看test 名称空间下的资源配额信息,验证是否执行成功:

# kubectl describe ns test

如上所示 test名称空间 已经加上的配额限制信息,下面我们在test名称空间下创建POD,验证是否可以限制成功。

编辑资源文件:

# vi pod-test-quota2.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-test-quota
  namespace: test
  labels:
    app: tomcat-pod
spec:
  containers:
  - name:  tomcat-test
    ports:
    - containerPort: 8080
    image: docker.io/library/tomcat:latest
    imagePullPolicy: IfNotPresent
    resources:
      requests:
        memory: "10Gi"
        cpu: "5"
      limits:
        memory: "20Gi"
        cpu: "10"

很明显,当前我们所创建的POD 配置的Resources资源,已经大于前面我们对test名称空间的限制。

执行以下,看看

# kubectl apply -f pod-test-quota2.yaml

如上,创建不成功

再次编辑资源文件:

# vi pod-test-quota2.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-test-quota
  namespace: test
  labels:
    app: tomcat-pod
spec:
  containers:
  - name:  tomcat-test
    ports:
    - containerPort: 8080
    image: docker.io/library/tomcat:latest
    imagePullPolicy: IfNotPresent
    resources:
      requests:
        memory: "200Mi"
        cpu: "100m"
      limits:
        memory: "2Gi"
        cpu: "2"

再次执行资源文件:

# kubectl apply -f pod-test-quota2.yaml

说明我们的名称空间资源配额限制是生效的

更多推荐

Python爬虫技巧:使用代理IP和User-Agent应对反爬虫机制

在当今的网络环境中,反爬虫机制广泛应用于各个网站,为爬虫程序增加了困难。然而,作为一名Python爬虫开发者,我们可以利用一些技巧应对这些反爬虫措施。本文将分享一个重要的爬虫技巧:使用代理IP和User-Agent来应对反爬虫机制,帮助您更有效地进行数据爬取。1.使用代理IP许多网站通过监控来自同一IP地址的高频请求来

从零开始—【Mac系统】MacOS配置Java环境变量

系统环境说明AppleM1macOSVentura版本13.5.21.下载JDK安装包Oracle官网下载地址JDK下载【注:推荐下载JDK8Oracle官网JDK8下载】关于JDK、JRE、JVM的关系说明JDK(JavaDevelopmentKit,Java开发工具包),是整个JAVA的核心,包括JRE,很多Jav

【C++】封装unordered_map和unordered_set(用哈希桶实现)

前言:前面我们学习了unordered_map和unordered_set容器,比较了他们和map、set的查找效率,我们发现他们的效率比map、set高,进而我们研究他们的底层是由哈希实现。哈希是一种直接映射的方式,所以查找的效率很快。与学习红黑树和map、set的思路一样,我们现在学完了unordered_map和

11:STM32---spl通信

目录一:SPL通信1:简历2:硬件电路3:移动数据图4:SPI时序基本单元A:开/终条件B:SPI时序基本单元A:模式0B:模式1C:模式2D:模式3C:SPl时序A:发送指令B:指定地址写C:指定地址读二:W25Q641:简历2:硬件电路3:W25Q64框图4:Flash操作注意事项5:指令集三:案例A:软件SPI读

Ceph入门到精通-CEPH故障以其处理方法

1.SlowOSDheartbeats#ceph-shealth:HEALTH_WARNSlowOSDheartbeatsonback(longest6181.010ms)SlowOSDheartbeatsonfront(longest5953.232ms)OSDs之间会相互测试(ping)访问速度,若两个OSDs之间

Docker 常用命令

帮助启动类命令1、启动docker:systemctlstartdocker2、停l止docker:systemctlstopdocker3、重启docker:systemctlrestartdocker4、查看docker状态:systemctlstatusdocker5、开机启动:systemctlenabledo

【Flink实战】Flink对接Kafka Connetor使用docker部署kafka

🚀作者:“大数据小禅”🚀文章简介:Flink对接KafkaConnetor第一步使用docker部署kafka🚀欢迎小伙伴们点赞👍、收藏⭐、留言💬目录导航什么是DockerDocker常用命令Docker安装过程Docker部署kafka什么是DockerDocker是一个开源的容器化平台,用于将应用程序和其

Kafka消费一致性和幂等性分析

1、前言在分布式系统中,消息队列被广泛用于数据的传输和处理。其中,Kafka因其高吞吐量、可扩展性和容错性而备受关注。然而,在处理海量数据时,确保消息的一致性和幂等性十分重要。本文将通过代码示例,对Kafka消费一致性和幂等性进行分析。2、问题背景在Kafka消费过程中,消费者从消息队列中获取消息并处理。然而,在某些场

分布式面试题

文章目录前言一、大型网站系统的特点二、拆分VS集群三、微服务VSSOA四、前后端完全分离与Rest规范总结前言大型网站系统的特点拆分VS集群微服务VSSOA前后端完全分离与Rest规范一、大型网站系统的特点高并发,大流量需要面对高并发用户,大流量访问。Google日均PV35亿,日IP访问数3亿;腾讯QQ的最大在线用户

简述现代加油站的智能防雷设计及其解决措施

随着经济的发展,人民群众生活水平不断提高,汽车已经成为非常普通的代步工具,与其配套的汽车加油站也越来越多。据统计,目前,我国各种类型加油加气站将近10万座,其中中石油约有18000座,中石化约有28000多座,其他国有、民营和外资等约有46000多座。与此同时,加油站的安全问题显得更加重要。加油站是易燃易爆场所,属于第

Selenium常用操作之单选复选框、下拉列表、键盘、截屏、断言、(显式隐式)等待

目录1.窗口最大化2.单选框操作3.复选框操作4.下拉列表5.selenium三种等待6.键盘操作7.截屏8.断言9.Selenium操作JS弹窗控件10.鼠标悬停与释放1.窗口最大化driver.maximize_window()2.单选框操作driver.find_element_by_xpath("//input

热文推荐