1. 前言

本页介绍如何设置在命名空间中运行的容器使用的内存的最小值和最大值。 你可以在 LimitRange 对象中指定最小和最大内存值。如果 Pod 不满足 LimitRange 施加的约束,则无法在命名空间中创建它

2. LimitRange 配置最大最小限制值

创建命名空间

kubectl create namespace constraints-mem-example

创建 LimitRange 和 Pod

apiVersion: v1
kind: LimitRange
metadata:
  name: mem-min-max-demo-lr
spec:
  limits:
  - max:
      memory: 1Gi
      memory: 500Mi
    type: Container
kubectl apply -f https://k8s.io/examples/admin/resource/memory-constraints.yaml --namespace=constraints-mem-example

查看 LimitRange 的详情:

kubectl get limitrange mem-min-max-demo-lr --namespace=constraints-mem-example --output=yaml

输出显示预期的最小和最大内存约束。 但请注意,即使你没有在 LimitRange 的配置文件中指定默认值,也会自动创建它们。

  limits:
  - default:
      memory: 1Gi
    defaultRequest:
      memory: 1Gi
      memory: 1Gi
      memory: 500Mi
    type: Container

3. 创建满足声明的最大值与最小值

apiVersion: v1
kind: Pod
metadata:
  name: constraints-mem-demo
spec:
  containers:
  - name: constraints-mem-demo-ctr
    image: nginx
    resources:
      limits:
        memory: "800Mi"
      requests:
        memory: "600Mi"
kubectl apply -f https://k8s.io/examples/admin/resource/memory-constraints-pod.yaml --namespace=constraints-mem-example

确认下 Pod 中的容器在运行:

kubectl get pod constraints-mem-demo --namespace=constraints-mem-example

查看 Pod 详情:

kubectl get pod constraints-mem-demo --output=yaml --namespace=constraints-mem-example

输出结果显示容器的内存请求为600 MiB,内存限制为800 MiB。这些满足了 LimitRange 设定的限制范围。

resources:
  limits:
     memory: 800Mi
  requests:
    memory: 600Mi

4. 尝试创建一个超过最大内存限制的 Pod

apiVersion: v1
kind: Pod
metadata:
  name: constraints-mem-demo-2
spec:
  containers:
  - name: constraints-mem-demo-2-ctr
    image: nginx
    resources:
      limits:
        memory: "1.5Gi"
      requests:
        memory: "800Mi"
kubectl apply -f https://k8s.io/examples/admin/resource/memory-constraints-pod-2.yaml --namespace=constraints-mem-example

输出结果显示 Pod 没有创建成功,因为容器声明的内存限制太大了:

Error from server (Forbidden): error when creating "examples/admin/resource/memory-constraints-pod-2.yaml":
pods "constraints-mem-demo-2" is forbidden: maximum memory usage per Container is 1Gi, but limit is 1536Mi.

5. 尝试创建一个不满足最小内存请求的 Pod

apiVersion: v1
kind: Pod
metadata:
  name: constraints-mem-demo-3
spec:
  containers:
  - name: constraints-mem-demo-3-ctr
    image: nginx
    resources:
      limits:
        memory: "800Mi"
      requests:
        memory: "100Mi"
kubectl apply -f https://k8s.io/examples/admin/resource/memory-constraints-pod-3.yaml --namespace=constraints-mem-example

输出结果显示 Pod 没有创建成功,因为容器声明的内存请求太小了:

Error from server (Forbidden): error when creating "examples/admin/resource/memory-constraints-pod-3.yaml":
pods "constraints-mem-demo-3" is forbidden: minimum memory usage per Container is 500Mi, but request is 100Mi.

6. 创建一个没有声明内存请求和限制的 Pod

apiVersion: v1
kind: Pod
metadata:
  name: constraints-mem-demo-4
spec:
  containers:
  - name: constraints-mem-demo-4-ctr
    image: nginx
kubectl apply -f https://k8s.io/examples/admin/resource/memory-constraints-pod-4.yaml --namespace=constraints-mem-example

查看 Pod 详情:

kubectl get pod constraints-mem-demo-4 --namespace=constraints-mem-example --output=yaml

输出结果显示 Pod 的内存请求为1 GiB,内存限制为1 GiB。容器怎样获得哪些数值呢?

resources:
  limits:
    memory: 1Gi
  requests:
    memory: 1Gi

因为你的容器没有声明自己的内存请求和限制,它从 LimitRange 那里获得了 默认的内存请求和限制。

相关阅读:

文章目录1. 前言2. LimitRange 配置最大最小限制值3. 创建满足声明的最大值与最小值4. 尝试创建一个超过最大内存限制的 Pod5. 尝试创建一个不满足最小内存请求的 Pod6. 创建一个没有声明内存请求和限制的 Pod1. 前言本页介绍如何设置在命名空间中运行的容器使用的内存的最小值和最大值。 你可以在 LimitRange 对象中指定最小和最大内存值。如果 Pod 不满足 LimitRange 施加的约束,则无法在命名空间中创建它2. LimitRange 配置最大最小限制值创..
一、资源需求与限制   在Kubernetes上,可由容器或Pod请求或消费的"计算资源"是指CPU和内存(RAM),这也是目前仅有的受支持的两种类型。相比较来说,CPU属于可压缩(compressible)型资源,即资源的使用额度可按需收缩,而内存(当前)则是不可压缩性资源,对其执行收缩操作可能会导致某种程度的问题。   目前来说,资源隔离尚且属于容器级别的,CPU和内存资源的配置需要在Pod的容器上进行,每种资源均可由"requests"属性定义其请求的确保可用值,即容器运行可能用不到这些额度的资源,
k8s资源对象LimitRange:是命名空间作用域的一个资源对象;作用是:当命名空间下的容器没有设置resources时,就使用LimitRange设置的值作为容器的默认值 当命名空间下没有LimitRange时 容器设置了requests和limits apiVersion: v1 kind: Pod metadata: name: default-mem-demo-2 spec: containers: - name: default
资源管理Resource(上) 文章目录资源管理Resource(上)初识核心设计如何使用极限测试内存过小会怎么样修改limits限制内存/CPU过大会怎么样把requests 内存/CPU调大会怎么样把 requests 内存变成10g启动三个副本 硬件是万物的基础,跟大多技术一样kubenetes 也需要 持久化存储 gpu用的不多这里不说 这里假设一个场景: kubernetes最大的优势之一:它能够有效地利用计算资源。对于资源的使用,k8s本身支持资源的配置。在K8s定义Pod运行容器有两个维度的限制:  1. 资源需求:即运行Pod的节点必须满足运行Pod的最基本需求才能运行Pod。    如: Pod运行至少需要2G内存,1核CPU 2. 资源限额:即运行Pod期间,可能内存使用量会增加,那最多能使用多少内存,...
记录一下: request请求 的值 小于limits限制值,对象有cpu和memory, 比较简单没什么好说的。至于分配到哪个节点,这个可以看container的元数据。 'resources': {'limits': {'cpu': '0.5', 'memory': '500Mi'},
如何配置命名空间的默认内存请求和限制。如果在具有默认内存限制的命名空间创建Container,并且Container未指定其自己的内存限制,则会为Container分配默认内存限制。Kubernetes在某些条件下分配默认内存请求。 要检查版本,请输入kubectl version。 群集的每个节点必须至少具有2 GiB的内存。 创建命名空间 创建命名空间,以便在此练习创建的资源与...
K8S集群管理之资源配额 为什么设置默认内存限制和请求? 通过为集群运行的容器配置内存请求和限制,可以有效利用集群节点上可用的内存资源。 通过将 Pod 的内存请求保持在较低水平,可以更好地安排 Pod 调度。 通过让内存限制大于内存请求,可以完成两件事: Pod 可以进行一些突发活动,从而更好的利用可用内存。 Pod 在突发活动期间,可使用的内存被限制为合理的数量。 如果命名空间下有设置资源配额,内存限制极为有益。资源配额可为命名空间下的容器设定内存限制;命名空间下所有运行容器的内存总量不能超过申明