kubernetes资源对象之limitrange

kubernetes资源对象之limitrange

limitrange简述

当定义 pod时可以选择性地为每个 container设定所需要的资源数量。 最常见的可设定资源是 CPU 和内存(RAM)大小;此外还有其他类型的资源。当你为 Pod 中的 Container 指定了资源 请求 时,kube-scheduler就利用该信息决定将 Pod 调度到哪个节点上。 当你还为 Container 指定了资源 约束时,kubelet 就可以确保运行的容器不会使用超出所设约束的资源。 kubelet 还会为容器预留所 请求数量的系统资源,供其使用。

kubernetes中的资源单位

CPU 资源单位

CPU 资源的约束和请求以 “cpu” 为单位。 在 Kubernetes 中,一个 CPU 等于1 个物理 CPU 核或者 一个虚拟核, 取决于节点是一台物理主机还是运行在某物理主机上的虚拟机。也可以表达带小数 CPU 的请求。 当定义一个容器,将其 spec.containers.resources.requests.cpu 设置为 0.5 时, 你所请求的 CPU 是你请求 1.0 CPU 时的一半。 对于 CPU 资源单位,数量表达式 0.1 等价于表达式 100m,可以看作 “100 millicpu”。

CPU 资源总是设置为资源的绝对数量而非相对数量值。 例如,无论容器运行在单核、双核或者 48-核的机器上,500m CPU 表示的是大约相同的计算能力。

Kubernetes 不允许设置精度小于 1m 的 CPU 资源。 因此,当 CPU 单位小于 11000m 时,使用毫核的形式是有用的; 例如 5m 而不是 0.005

内存资源单位

memory 的约束和请求以字节为单位。你可以使用普通的证书,或者带有以下数量后缀 的定点数字来表示内存:E、P、T、G、M、k。 你也可以使用对应的 2 的幂数:Ei、Pi、Ti、Gi、Mi、Ki。 例如,以下表达式所代表的是大致相同的值:

128974848、129e6、129M、128974848000m、123Mi

请注意后缀的大小写。如果你请求 400m 内存,实际上请求的是 0.4 字节。 如果有人这样设定资源请求或限制,可能他的实际想法是申请 400 兆字节(400Mi) 或者 400M 字节。

limitrange资源清单解析

apiVersion: v1
kind: LimitRange
metadata:
  name: limitrange
  namespace: test
spec:
  limits:
  - type: Container       #限制的资源类型
    max:
      cpu: "2"            #限制单个容器的最大CPU
      memory: "2Gi"       #限制单个容器的最大内存
    min:
      cpu: "500m"         #限制单个容器的最小CPU
      memory: "512Mi"     #限制单个容器的最小内存
    default:
      cpu: "500m"         #默认单个容器的CPU限制
      memory: "512Mi"     #默认单个容器的内存限制
    defaultRequest:
      cpu: "500m"         #默认单个容器的CPU创建请求
      memory: "512Mi"     #默认单个容器的内存创建请求
    maxLimitRequestRatio:
      cpu: 2              #限制CPU limit/request比值最大为2  
      memory: 2           #限制内存limit/request比值最大为1.5
      
      
  - type: Pod
    max:
      cpu: "4"            #限制单个Pod的最大CPU
      memory: "4Gi"       #限制单个Pod最大内存
      
      
  - type: PersistentVolumeClaim
    max:
      storage: 50Gi        #限制PVC最大的requests.storage
    min:
      storage: 30Gi        #限制PVC最小的requests.storage

创建limitrange

[root@master test]# kubectl describe -n test limitrange
Name:                  limitrange
Namespace:             test
Type                   Resource  Min    Max   Default Request  Default Limit  Max Limit/Request Ratio
----                   --------  ---    ---   ---------------  -------------  -----------------------
Container              cpu       500m   2     500m             500m           2
Container              memory    512Mi  2Gi   512Mi            512Mi          2
Pod                    cpu       -      4     -                -              -
Pod                    memory    -      4Gi   -                -              -
PersistentVolumeClaim  storage   30Gi   50Gi  -                -              -

在test空间命令下创建一个pod并查看,发现使用设置默认的limit属性值

    resources:
      limits:
        cpu: 500m
        memory: 512Mi
      requests:
        cpu: 500m
        memory: 512Mi

Pod 和 容器的资源请求和约束

针对每个容器,都可以指定其资源约束和请求,包括如下选项:

  • spec.containers.resources.limits.cpu
  • spec.containers.resources.limits.memory
  • spec.containers.resources.limits.hugepages-
  • spec.containers.resources.requests.cpu
  • spec.containers.resources.requests.memory
  • spec.containers.resources.requests.hugepages-

尽管只能逐个容器地指定请求和限制值,考虑 Pod 的总体资源请求和约束也是有用的。 对特定资源而言,Pod 的资源请求/约束值是 Pod 中各容器对该类型资源的请求/约束值的总和。

apiVersion: v1
kind: Pod
metadata:
  name: test1
spec:
  containers:
  - name: app
    image: images.my-company.example/app:v4
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"
  - name: log-aggregator
    image: images.my-company.example/log-aggregator:v6
    resources:
      requests:
        memory: "100Mi"
        cpu: "300m"
      limits:
        memory: "128Mi"
        cpu: "500m"

查看pod详情

Containers:
  app:
    Container ID:   
    Image:          images.my-company.example/app:v4
    Limits:
      cpu:     500m
      memory:  128Mi
    Requests:
      cpu:        250m
      memory:     64Mi
  log-aggregator:
    Container ID:   
    Image:          images.my-company.example/log-aggregator:v6
    Limits:
      cpu:     500m
      memory:  128Mi
    Requests:
      cpu:        300m
      memory:     100Mi
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Kubernetes 是一个开源的容器编排工具,可以帮助用户自动化部署、扩展和管理容器化应用程序。在 Kubernetes 中,资源对象是指用于描述和管理集群中各种资源的抽象概念。 以下是 Kubernetes 中常见的资源对象类型: 1. Pod(容器组):Pod 是 Kubernetes 中最小的可部署对象,通常包含一个或多个容器,共享同一个网络命名空间和存储卷。 2. ReplicaSet(副本集):ReplicaSet 用于管理一组相同的 Pod 副本,保证在集群中的任何时间都有指定数量的副本运行。 3. Deployment(部署):Deployment 是一种管理 Pod 和 ReplicaSet 的高级对象,用于实现容器化应用程序的滚动更新和回滚。 4. Service(服务):Service 提供了一种逻辑方式来访问一组 Pod,通常用于将网络流量路由到后端的 Pod。 5. ConfigMap(配置映射):ConfigMap 用于存储集群中的配置数据,例如应用程序的环境变量和配置文件。 6. Secret(密钥):Secret 用于存储敏感信息,例如密码和证书,以安全地在集群中传输和存储。 7. PersistentVolume(持久卷):PersistentVolume 用于将持久化存储抽象出来,使其在不同的存储系统之间具有可移植性。 8. StatefulSet(有状态集):StatefulSet 用于管理具有唯一标识和稳定网络标识符的 Pod,通常用于运行需要持久化存储和有状态服务的应用程序。 这些资源对象Kubernetes 集群中的基本构建块,使用它们可以轻松地管理和扩展容器化应用程序。 ### 回答2: Kubernetes中的资源对象是指在Kubernetes集群中由用户定义和管理的各种资源类型,用于表示和控制应用程序、服务和基础设施等方面的相关资源Kubernetes提供了多种资源对象,包括但不限于以下几种: 1. Pod(容器组):Pod是Kubernetes中最小的可调度和部署单元,可以包含一个或多个容器。Pod通常将相关的容器组合在一起,共享网络和存储,并提供容器之间的通信和数据共享。 2. ReplicaSet(副本集):ReplicaSet用于定义和管理Pod的集合。它确保指定数量的Pod副本运行,并根据需要自动进行缩放,以实现应用程序的高可用性和负载均衡。 3. Deployment(部署):Deployment是ReplicaSet的高级抽象,用于实现无缝的应用程序部署和升级。它可以定义应用程序的副本数、升级策略和滚动升级等参数,并确保在应用程序版本变更时无需停机。 4. Service(服务):Service定义了一组Pod的访问方式和网络连接,提供了一个稳定的地址和端口,使得其他Pod或外部用户能够与应用程序进行通信。 除了上述常用资源对象,还有诸如ConfigMap(配置映射)、Secret(密钥)、Namespace(命名空间)等资源对象,它们用于管理和传递应用程序的配置信息、敏感数据和资源隔离等方面的需求。 通过使用这些资源对象,用户可以方便地定义和管理各种不同类型的应用程序和服务,并通过Kubernetes提供的强大的调度和管理功能,实现高可用性、弹性伸缩和自动化的应用程序部署和运维。 ### 回答3: Kubernetes 中的资源对象是指在集群中定义和管理的可部署的计算资源。它们用来描述和控制应用程序的部署、扩展和管理。Kubernetes 中有多种资源对象可供使用,如下所示: 1. Pod: Pod 是 Kubernetes 中最小的可部署对象单元。它由一个或多个容器组成,并共享相同的网络和存储资源。Pod 可以用来运行一个或多个容器应用程序。 2. Deployment: Deployment 是用来管理 Pod 的资源对象。它定义了一组 Pod 的副本,并负责监控和维护这些 Pod 的状态。通过 Deployment,可以方便地进行应用的部署、升级和回滚操作。 3. Service: Service 是用来暴露 Pod 的网络服务的资源对象。它为一组 Pod 提供了一个统一的访问入口,并负责将请求按照相应的负载均衡算法分发给后端的 Pod。 4. Volume: Volume 是用来管理 Pod 中的存储资源资源对象。它可以将外部存储系统挂载到 Pod 中,以便应用程序可以进行持久化数据的存储。 此外,Kubernetes 还提供了许多其他类型的资源对象,如 StatefulSet、DaemonSet、Job、CronJob 等,用于满足不同应用程序的需求。这些资源对象可以通过 YAML 或 JSON 文件进行定义和配置,并通过 Kubernetes API 进行管理和操作。 通过使用 Kubernetes资源对象,我们可以更方便地管理和部署应用程序,实现高可用性和弹性的系统架构,提高应用程序的可靠性和可扩展性。它为开发人员和运维人员提供了一种简单而强大的方式来管理和扩展应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值