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

  • 1 Before you begin
  • 2 QoS 等级
  • 3 创建一个命名空间
  • 4 创建一个 Pod 并分配 QoS 等级为 Guaranteed
  • 5 创建一个 Pod 并分配 QoS 等级为 Burstable
  • 6 创建一个 Pod 并分配 QoS 等级为 BestEffort
  • 7 创建一个拥有两个容器的 Pod
  • 8 清理
  • 9 What’s next
    • 9.1 对于集群管理员
    • 9.2 对于应用开发者

这篇教程指导如何给 Pod 配置特定的服务质量(QoS)等级。Kubernetes 使用 QoS 等级来确定何时调度和终结 Pod 。

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.

QoS 等级

当 Kubernetes 创建一个 Pod 时,它就会给这个 Pod 分配一个 QoS 等级:

  • Guaranteed
  • Burstable
  • BestEffort

创建一个命名空间

创建一个命名空间,以便将我们实验需求的资源与集群其他资源隔离开。

kubectl create namespace qos-example

创建一个 Pod 并分配 QoS 等级为 Guaranteed

想要给 Pod 分配 QoS 等级为 Guaranteed:

  • Pod 里的每个容器都必须有内存限制和请求,而且必须是一样的。
  • Pod 里的每个容器都必须有 CPU 限制和请求,而且必须是一样的。

这是一个含有一个容器的 Pod 的配置文件。这个容器配置了内存限制和请求,都是200MB。它还有 CPU 限制和请求,都是700 millicpu:

qos-pod.yaml 
apiVersion: v1
kind: Pod
metadata:name: qos-demo
spec:containers:- name: qos-demo-ctrimage: nginxresources:limits:memory: "200Mi"cpu: "700m"requests:memory: "200Mi"cpu: "700m"

创建 Pod:

kubectl create -f https://k8s.io/docs/tasks/configure-pod-container/qos-pod.yaml --namespace=qos-example

查看 Pod 的详细信息:

kubectl get pod qos-demo --namespace=qos-example --output=yaml

输出显示了 Kubernetes 给 Pod 配置的 QoS 等级为 Guaranteed 。也验证了容器的内存和 CPU 的限制都满足了它的请求。

spec:containers:...resources:limits:cpu: 700mmemory: 200Mirequests:cpu: 700mmemory: 200Mi
...qosClass: Guaranteed

注意: 如果一个容器配置了内存限制,但是没有配置内存申请,那 Kubernetes 会自动给容器分配一个符合内存限制的请求。 类似的,如果容器有 CPU 限制,但是没有 CPU 申请,Kubernetes 也会自动分配一个符合限制的请求。

删除你的 Pod:

kubectl delete pod qos-demo --namespace=qos-example

创建一个 Pod 并分配 QoS 等级为 Burstable

当出现下面的情况时,则是一个 Pod 被分配了 QoS 等级为 Burstable :

  • 该 Pod 不满足 QoS 等级 Guaranteed 的要求。
  • Pod 里至少有一个容器有内存或者 CPU 请求。

这是 Pod 的配置文件,里面有一个容器。这个容器配置了200MB的内存限制和100MB的内存申请。

qos-pod-2.yaml 
apiVersion: v1
kind: Pod
metadata:name: qos-demo-2
spec:containers:- name: qos-demo-2-ctrimage: nginxresources:limits:memory: "200Mi"requests:memory: "100Mi"

创建 Pod:

kubectl create -f https://k8s.io/docs/tasks/configure-pod-container/qos-pod-2.yaml --namespace=qos-example

查看 Pod 的详细信息:

kubectl get pod qos-demo-2 --namespace=qos-example --output=yaml

输出显示了 Kubernetes 给这个 Pod 配置了 QoS 等级为 Burstable.

spec:containers:- image: nginximagePullPolicy: Alwaysname: qos-demo-2-ctrresources:limits:memory: 200Mirequests:memory: 100Mi
...qosClass: Burstable

删除你的 Pod:

kubectl delete pod qos-demo-2 --namespace=qos-example

创建一个 Pod 并分配 QoS 等级为 BestEffort

要给一个 Pod 配置 BestEffort 的 QoS 等级, Pod 里的容器必须没有任何内存或者 CPU 的限制或请求。

下面是一个 Pod 的配置文件,包含一个容器。这个容器没有内存或者 CPU 的限制或者请求:

qos-pod-3.yaml 
apiVersion: v1
kind: Pod
metadata:name: qos-demo-3
spec:containers:- name: qos-demo-3-ctrimage: nginx

创建 Pod:

kubectl create -f https://k8s.io/docs/tasks/configure-pod-container/qos-pod-3.yaml --namespace=qos-example

查看 Pod 的详细信息:

kubectl get pod qos-demo-3 --namespace=qos-example --output=yaml

输出显示了 Kubernetes 给 Pod 配置的 QoS 等级是 BestEffort.

spec:containers:...resources: {}...qosClass: BestEffort

删除你的 Pod:

kubectl delete pod qos-demo-3 --namespace=qos-example

创建一个拥有两个容器的 Pod

这是一个含有两个容器的 Pod 的配置文件,其中一个容器指定了内存申请为 200MB ,另外一个没有任何申请或限制。

qos-pod-4.yaml 
apiVersion: v1
kind: Pod
metadata:name: qos-demo-4
spec:containers:- name: qos-demo-4-ctr-1image: nginxresources:requests:memory: "200Mi"- name: qos-demo-4-ctr-2image: redis

注意到这个 Pod 满足了 QoS 等级 Burstable 的要求. 就是说,它不满足 Guaranteed 的要求,而且其中一个容器有内存请求。

创建 Pod:

kubectl create -f https://k8s.io/docs/tasks/configure-pod-container/qos-pod-4.yaml --namespace=qos-example

查看 Pod 的详细信息:

kubectl get pod qos-demo-4 --namespace=qos-example --output=yaml

输出显示了 Kubernetes 给 Pod 配置的 QoS 等级是 Burstable:

spec:containers:...name: qos-demo-4-ctr-1resources:requests:memory: 200Mi...name: qos-demo-4-ctr-2resources: {}...qosClass: Burstable

删除你的 Pod:

kubectl delete pod qos-demo-4 --namespace=qos-example

清理

删除你的 namespace:

kubectl delete namespace qos-example

What’s next

对于集群管理员

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

对于应用开发者

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

译者:NickSu86 / 原文链接

容器编排技术 -- Kubernetes 给 Pod 配置服务质量等级相关推荐

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

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

  2. 容器编排技术 -- Kubernetes DNS Pod 与 Service 介绍

    容器编排技术 -- Kubernetes DNS Pod 与 Service 介绍 1 介绍 2 怎样获取 DNS 名字? 3 支持的 DNS 模式 3.1 Service 3.1.1 A 记录 3. ...

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

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

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

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

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

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

  6. 容器编排技术 -- Kubernetes 给容器和Pod分配CPU资源

    容器编排技术 -- Kubernetes 给容器和Pod分配CPU资源 1 Before you begin 2 创建一个命名空间 3 声明一个CPU申请和限制 4 CPU 单位 5 请求的CPU超出 ...

  7. 容器编排技术 -- Kubernetes 给容器和Pod分配内存资源

    容器编排技术 -- Kubernetes 给容器和Pod分配内存资源 1 Before you begin 2 创建一个命名空间 3 配置内存申请和限制 4 超出容器的内存限制 5 配置超出节点能力范 ...

  8. 容器编排技术 -- Kubernetes 重新配置活动集群中节点的 Kubelet

    容器编排技术 -- Kubernetes 重新配置活动集群中节点的 Kubelet 1 Before you begin 2 重新配置集群活动节点上的 Kubelet 2.1 基本工作流程概览 2.2 ...

  9. 容器编排技术 -- Kubernetes Pod 优先级和抢占

    容器编排技术 -- Kubernetes Pod 优先级和抢占 1 怎么样使用优先级和抢占 2 启用优先级和抢占 3 PriorityClass 3.1 PriorityClass 示例 4 Pod ...

最新文章

  1. 在Hibernate中处理批量更新和批量删除
  2. MySQL基础篇:数据定义语言DDL
  3. 自定义博客园地址栏ico图标 标签logo
  4. wpf 用户自定义事件传参
  5. cnpm install时提示resource busy or locked,syslink...
  6. Ubuntu Android Studio/IntelliJ IDEA 支持文件中文命名
  7. python批量读取文件夹的图片并处理成模型输入格式
  8. c# 可变二维数组_C#| 具有固定行大小和可变列大小的二维数组
  9. Golang实践录:调用C++函数
  10. IT培训班到底有没有必要参加?
  11. Idea自定义Maven骨架(archetype)
  12. sql查询数据库所有表(select * from sysobjects )
  13. 中国石油大学《测井解释与生产测井》第二阶段在线作业
  14. 手机注册短信验证码实现的全流程及代码
  15. 计算机桌面不能显示器,电脑显示屏亮但是主机已开机无法显示桌面
  16. 在Server 2008中添加磁盘清理
  17. 霜降后养生,做好“三防”
  18. 开启定位权限还是定位失败
  19. 迷你MVVM框架 avalonjs 入门教程(司徒正美)
  20. code128条码生成与显示

热门文章

  1. SVG 入门教程系列列表
  2. 使用 jQuery Mobile 与 HTML5 开发 Web App (十九) —— HTML5 对 Web App 的影响
  3. 初探PHP的SQL注入攻击的技术实现以及预防措施
  4. magento常用的语句
  5. 全排列及相关扩展算法(六)——全排列最蛋疼的算法:邻位对换法
  6. ubuntu14.04安装opencv3.1(亲测)
  7. virtualenv创建独立的Python环境
  8. 【AI视野·今日Robot 机器人论文速览 第九期】Thu, 17 Jun 2021
  9. 【AI视野·今日NLP 自然语言处理论文速览 第一期】Fri, 4 Jun 2021
  10. 【jupyter】notebook屏蔽warning信息输出