容器编排技术 -- Kubernetes 为 Namespace 设置最小和最大内存限制

  • 1 Before you begin
  • 2 创建一个 namespace
  • 3 创建一个 LimitRange 和一个 Pod
  • 4 尝试创建一个超过最大内存限制的 Pod
  • 5 尝试创建一个不符合最小内存请求的 Pod
  • 6 创建一个没有指定任何内存请求和限制的 Pod
  • 7 应用最小和最大内存限制
  • 8 最小和最大内存限制的动因
  • 9 清理
  • 10 What’s next
    • 10.1 对于集群管理员
    • 10.2 对于应用开发者

本文展示了如何为 namespace 中运行的容器设置内存的最小和最大值。您可以设置 LimitRange 对象中内存的最小和最大值。如果 Pod 没有符合 LimitRange 施加的限制,那么它就不能在 namespace 中创建。

Before you begin

You need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. If you do not already have a cluster, you can create one by using Minikube.

集群中的每个节点至少需要 1 GiB 内存。

创建一个 namespace

请创建一个 namespace,这样您在本练习中创建的资源就可以和集群中其余资源相互隔离。

kubectl create namespace constraints-mem-example

创建一个 LimitRange 和一个 Pod

这是 LimitRange 的配置文件:

memory-constraints.yaml 
apiVersion: v1
kind: LimitRange
metadata:name: mem-min-max-demo-lr
spec:limits:- max:memory: 1Gimin:memory: 500Mitype: Container

创建 LimitRange:

kubectl create -f https://k8s.io/docs/tasks/administer-cluster/memory-constraints.yaml --namespace=constraints-mem-example

查看 LimitRange 的详细信息:

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

输出显示了符合预期的最小和最大内存限制。但请注意,即使您没有在配置文件中为 LimitRange 指定默认值,它们也会被自动创建。

  limits:- default:memory: 1GidefaultRequest:memory: 1Gimax:memory: 1Gimin:memory: 500Mitype: Container

现在,每当在 constraints-mem-example namespace 中创建一个容器时,Kubernetes 都会执行下列步骤:

  • 如果容器没有指定自己的内存请求(request)和限制(limit),系统将会为其分配默认值。
  • 验证容器的内存请求大于等于 500 MiB。
  • 验证容器的内存限制小于等于 1 GiB。

这是一份包含一个容器的 Pod 的配置文件。这个容器的配置清单指定了 600 MiB 的内存请求和 800 MiB 的内存限制。这些配置符合 LimitRange 施加的最小和最大内存限制。

memory-constraints-pod.yaml 
apiVersion: v1
kind: Pod
metadata:name: constraints-mem-demo
spec:containers:- name: constraints-mem-demo-ctrimage: nginxresources:limits:memory: "800Mi"requests:memory: "600Mi"

创建 Pod:

kubectl create -f https://k8s.io/docs/tasks/administer-cluster/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: 800Mirequests:memory: 600Mi

删除 Pod:

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

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

这是一份包含一个容器的 Pod 的配置文件。这个容器的配置清单指定了 800 MiB 的内存请求和 1.5 GiB 的内存限制。

memory-constraints-pod-2.yaml 
apiVersion: v1
kind: Pod
metadata:name: constraints-mem-demo-2
spec:containers:- name: constraints-mem-demo-2-ctrimage: nginxresources:limits:memory: "1.5Gi"requests:memory: "800Mi"

尝试创建 Pod:

kubectl create -f https://k8s.io/docs/tasks/administer-cluster/memory-constraints-pod-2.yaml --namespace=constraints-mem-example

输出显示 Pod 没有能够成功创建,因为容器指定的内存限制值太大:

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

尝试创建一个不符合最小内存请求的 Pod

这是一份包含一个容器的 Pod 的配置文件。这个容器的配置清单指定了 200 MiB 的内存请求和 800 MiB 的内存限制。

memory-constraints-pod-3.yaml 
apiVersion: v1
kind: Pod
metadata:name: constraints-mem-demo-3
spec:containers:- name: constraints-mem-demo-3-ctrimage: nginxresources:limits:memory: "800Mi"requests:memory: "100Mi"

尝试创建 Pod:

kubectl create -f https://k8s.io/docs/tasks/administer-cluster/memory-constraints-pod-3.yaml --namespace=constraints-mem-example

输出显示 Pod 没有能够成功创建,因为容器指定的内存请求值太小:

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

创建一个没有指定任何内存请求和限制的 Pod

这是一份包含一个容器的 Pod 的配置文件。这个容器没有指定内存请求,也没有指定内存限制。

memory-constraints-pod-4.yaml 
apiVersion: v1
kind: Pod
metadata:name: constraints-mem-demo-4
spec:containers:- name: constraints-mem-demo-4-ctrimage: nginx

创建 Pod:

kubectl create -f https://k8s.io/docs/tasks/administer-cluster/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: 1Girequests:memory: 1Gi

因为您的容器没有指定自己的内存请求和限制,它将从 LimitRange 获取 默认的内存请求和限制值。

到目前为止,您的容器可能在运行,也可能没有运行。回想起来,有一个先决条件就是节点必须拥有至少 1 GiB 内存。如果每个节点都只有 1 GiB 内存,那么任何一个节点上都没有足够的内存来容纳 1 GiB 的内存请求。如果碰巧使用的节点拥有 2 GiB 内存,那么它可能会有足够的内存来容纳 1 GiB 的内存请求。

删除 Pod:

kubectl delete pod constraints-mem-demo-4 --namespace=constraints-mem-example

应用最小和最大内存限制

LimitRange 在 namespace 中施加的最小和最大内存限制只有在创建和更新 Pod 时才会被应用。改变 LimitRange 不会对之前创建的 Pod 造成影响。

最小和最大内存限制的动因

作为一个集群管理员,您可能希望为 Pod 能够使用的内存数量施加限制。例如:

  • 集群中每个节点拥有 2 GB 内存。您不希望任何 Pod 请求超过 2 GB 的内存,因为集群中没有节点能支持这个请求。
  • 集群被生产部门和开发部门共享。 您希望生产负载最多使用 8 GB 的内存而将开发负载限制为 512 MB。这种情况下,您可以为生产环境和开发环境创建单独的 namespace,并对每个 namespace 应用内存限制。

清理

删除 namespace:

kubectl delete namespace constraints-mem-example

What’s next

对于集群管理员

  • 为 Namespace 设置最小和最大内存限制
  • 为 Namespace 配置默认内存请求和限制
  • 为 Namespace 配置默认 CPU 请求和限制
  • 为 Namespace 配置最小和最大 CPU 限制
  • 为 Namespace 配置内存和 CPU 配额
  • 为 Namespace 配置 Pod 配额
  • 为 API 对象配置配额

对于应用开发者

  • 为容器和 Pod 分配内存资源
  • 为容器和 Pod 分配 CPU 资源
  • 为 Pod 配置服务质量

译者:xiaosuiba / 原文链接

容器编排技术 -- Kubernetes 为 Namespace 设置最小和最大内存限制相关推荐

  1. 容器编排技术 -- Kubernetes 为 Namespace 配置最小和最大 CPU 限制

    容器编排技术 -- Kubernetes 为 Namespace 配置最小和最大 CPU 限制 1 Before you begin 2 创建一个 namespace 3 创建一个 LimitRang ...

  2. 容器编排技术 -- Kubernetes 为 Namespace 配置CPU和内存配额

    容器编排技术 -- Kubernetes 为 Namespace 配置CPU和内存配额 1 Before you begin 2 创建名字空间 3 创建ResourceQuota对象 4 创建一个Po ...

  3. 容器编排技术 -- Kubernetes 为 Namespace 配置默认的内存请求与限额

    容器编排技术 -- Kubernetes 为 Namespace 配置默认的内存请求与限额 1 Before you begin 2 创建命名空间 3 创建 LimitRange 和 Pod 4 如果 ...

  4. 容器编排技术 -- Kubernetes 在 Namespace 中配置默认的CPU请求与限额

    容器编排技术 -- Kubernetes 在 Namespace 中配置默认的CPU请求与限额 1 Before you begin 2 创建一个命名空间 3 创建一个LimitRange和一个Pod ...

  5. 容器编排技术 -- Kubernetes 为 Namespace 配置Pod配额

    容器编排技术 -- Kubernetes 为 Namespace 配置Pod配额 1 Before you begin 2 创建名字空间 3 创建ResourceQuota对象 4 练习环境的清理 5 ...

  6. 容器编排技术 -- Kubernetes kubectl create namespace 命令详解

    容器编排技术 -- Kubernetes kubectl create namespace 命令详解 1 kubectl create namespace 2 语法 3 示例 4 Flags kube ...

  7. 容器编排技术 -- Kubernetes Deployment

    容器编排技术 -- Kubernetes Deployment 1 创建 Deployment 1.1 Pod-template-hash label 2 更新Deployment 2.1 Rollo ...

  8. 容器编排技术 -- Kubernetes 给 Pod 配置服务质量等级

    容器编排技术 -- Kubernetes 给 Pod 配置服务质量等级 1 Before you begin 2 QoS 等级 3 创建一个命名空间 4 创建一个 Pod 并分配 QoS 等级为 Gu ...

  9. 容器编排技术 -- Kubernetes kubectl set 命令详解

    容器编排技术 -- Kubernetes kubectl set 命令详解 1 kubectl set 2 语法 3 子命令 kubectl set 配置应用资源. 使用这些命令能帮你更改现有应用资源 ...

最新文章

  1. 单词搜索(二维字符网格中)
  2. Computer Browser服务不能启动
  3. 17-比赛1 A - Weak in the Middle (栈)
  4. python 十六进制转中文_Python列表中包含中文时输出十六进制转中文的小方法
  5. Packet Tracer 思科模拟器之交换机配置快速生成树协议(RSTP)
  6. JAVA基础知识总结8(设计模式)
  7. 微服务架构和SOA的区别
  8. pptv如何绑定邮箱账号
  9. linux 权限管理命令chown、chgrp、umask、linux新建文件或目录的默认权限755
  10. Dell台式机重装win 10系统之后开机报错
  11. Django 高级(其他知识点)
  12. BZOJ3514 / Codechef GERALD07 Chef and Graph Queries LCT、主席树
  13. R6300V2 从 DD-WRT 回刷恢复 官方原厂固件   DD-WRT to R6300V2
  14. 外壳IK防护等级测试
  15. FireBug使用方法
  16. 分类与聚类的区别以及聚类的方法分类
  17. linux 硬件raid 坏道,Linux服务器磁盘坏道的修复过程
  18. app上架因为副标题被App Store残忍拒绝!
  19. win7网络不显示共享计算机,Win7电脑已开启共享却找不到设备 局域网显示空白该怎么解决...
  20. 驱动设计思想(机制、策略、分离、分层)

热门文章

  1. CSS3: 常用动画特效及4个最流行的动画库
  2. jQuery函数 - 左右抖动效果,用于提示
  3. iPad iPhone程序增加和删除启动画面
  4. Leetcode算法题(C语言)14--颠倒整数
  5. PL/SQL中的=作用
  6. 【AI视野·今日Sound 声学论文速览 第三期】Wed, 20 Apr 2022
  7. 【AI视野·今日CV 计算机视觉论文速览 第203期】Fri, 21 May 2021
  8. 窗体跳转传值 1130
  9. 190906二级刷题水果与小女孩
  10. django-模板的母版与子版