
Kubernetes学习总结(8)—— Kubernetes Pod 资源管理 和 Pod 服务质量
BestEffort(尽最大努力):默认服务质量,优先级最低,资源分配灵活; Burstable(可波动):提供资源保障,requests资源要求固定,不能超过limits; Guaranteed(完全保障):资源数量与requests和limits相同,优先级最高。
发布日期:2025-04-03 07:25:32
浏览次数:9
分类:精选文章
本文共 3770 字,大约阅读时间需要 12 分钟。
一、Pod资源管理
1.1 resource的定义
容器运行过程中需要分配所需的资源,与CGGroup联动配合实现资源分配。资源的分配单位是CPU和内存,主要通过两种定义方式:requests和limits。
- requests:表示请求资源,用于初始Kubernetes调度Pod时的依据,表示必须满足的分配资源。
- limits:表示资源的限制,Pod不能超过这个限制值,超出的部分会通过CGGroup限制,确保资源使用不超出预定范围。
Pod中可以通过以下四个字段定义资源:
spec.container[].resources.requests.cpu
:请求CPU资源大小,如0.1个CPU或100m表示分配1/10个CPU;spec.container[].resources.requests.memory
:请求内存大小,单位可用Mi、Gi等;spec.container[].resources.limits.cpu
:限制CPU使用大小,不能超过阀值;spec.container[].resources.limits.memory
:限制内存使用大小,超过会导致OOM(出内存)。以nginx-demo为例,定义一个Pod请求250m CPU资源,限制500m;请求128Mi内存,限制256Mi:
apiVersion: v1kind: Podmetadata: name: nginx-demo labels: name: nginx-demospec: containers: - name: nginx-demo image: nginx:1.7.9 imagePullPolicy: IfNotPresent ports: - name: nginx-port-80 protocol: TCP containerPort: 80 resources: requests: cpu: 250m memory: 128Mi limits: cpu: 500m memory: 256Mi
1.2 配置定义
如果已经存在Pod,先将其删除:
kubectl delete pod nginx-demo
或者定义一个新的Pod名称。应用YAML文件:
kubectl apply -f nginx-resource.yaml
1.3 资源分配详情
查看Pod的资源分配情况:
kubectl get pods
查看Pod详细信息:
kubectl describe pods nginx-demo
1.4 资源测试
通过stress镜像测试CPU资源:
apiVersion: v1kind: Podmetadata: name: cpu-demo annotations: kubernetes.io/description: "demo for cpu requests and"spec: containers: - name: stress-cpu image: vish/stress resources: requests: cpu: 250m limits: cpu: 500m args: ["-cpus", "1"]
创建Pod并查看资源使用情况:
kubectl apply -f cpu-demo.yaml
1.5 内存测试
定义memory-demo.yaml限制内存为512Mi,使用stress镜像压侧256Mi:
apiVersion: v1kind: Podmetadata: name: memoryDemo annotations: kubernetes.io/description: "stress demo for memory limits"spec: containers: - name: memory-stress-limits image: polinux/stress resources: requests: memory: 128Mi limits: memory: 512Mi command: ["stress"] args: ["--vm", "1", "--vm-bytes", "256M", "--vm-hang", "1"]
应用并查看状态:
kubectl apply -f memory-demo.yaml
二、Pod服务质量
服务质量(QoS)为Pod调度和驱逐提供参考因素,无外乎三种QoS类型:
2.1 BestEffort服务质量
默认服务质量,无需额外定义:
apiVersion: v1kind: Podmetadata: name: nginx-qos-besteffort labels: name: nginx-qos-besteffortspec: containers: - name: nginx-qos-besteffort image: nginx:1.7.9 imagePullPolicy: IfNotPresent ports: - name: nginx-port-80 protocol: TCP containerPort: 80 resources: {}
创建Pod并查看QoS类型:
kubectl apply -f nginx-qos-besteffort.yaml
2.2 Burstable服务质量
定义一个可波动的Pod:
apiVersion: v1kind: Podmetadata: name: nginx-qos-burstable labels: name: nginx-qos-burstablespec: containers: - name: nginx-qos-burstable image: nginx:1.7.9 imagePullPolicy: IfNotPresent ports: - name: nginx-port-80 protocol: TCP containerPort: 80 resources: requests: cpu: 100m memory: 128Mi limits: cpu: 200m memory: 256Mi
应用并查看QoS类型:
kubectl apply -f nginx-qos-burstable.yaml
2.3 Guaranteed服务质量
定义一个完全保障的Pod:
apiVersion: v1kind: Podmetadata: name: nginx-qos-guaranteed labels: name: nginx-qos-guaranteedspec: containers: - name: nginx-qos-guaranteed image: nginx:1.7.9 imagePullPolicy: IfNotPresent ports: - name: nginx-port-80 protocol: TCP containerPort: 80 resources: requests: cpu: 200m memory: 256Mi limits: cpu: 200m memory: 256Mi
创建Pod并查看QoS类型:
kubectl apply -f nginx-qos-guaranteed.yaml
2.4 QoS策略
更高服务质量的Pod优先级更高,调度和驱逐时给予更高优先级。
总结
资源定义建议:
- limits和requests建议保持1:2比例,避免过多资源分配争抢;
- 推荐在namespace层面定义一个limitrange,确保Pod能分配到资源;
- 在节点上设置保留资源:
--system-reserved=cpu=200m,memory=1G
驱逐策略:
--eviction-hard=memory.available<500Mi
服务质量优先级:从高到低为Guaranteed > Burstable > BestEffort。
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月28日 23时14分05秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Kubernetes原生的CICD工具Tekton详解
2023-01-29
Kubernetes多master节点高可用集群安装
2023-01-29
Kubernetes存储之Persistent Volumes简介
2023-01-29
Kubernetes学习总结(11)—— Kubernetes Pod 到底是什么?
2023-01-29
Kubernetes学习总结(12)—— 学习 kubernetes 的10个技巧或建议
2023-01-29
Kubernetes学习总结(13)—— Kubernetes 各个组件的概念
2023-01-29
Kubernetes学习总结(14)—— Kubernetes 实用命令总结
2023-01-29
Kubernetes学习总结(18)—— Kubernetes 容器网络
2023-01-29
Kubernetes学习总结(1)——Kubernetes入门简介
2023-01-29
Kubernetes学习总结(2)——Kubernetes设计架构
2023-01-29
Kubernetes学习总结(5)——Kubernetes 常见面试题汇总
2023-01-29
Kubernetes学习总结(6)——Kubernetes 7周年:它为什么如此受欢迎?
2023-01-29
Kubernetes学习总结(7)——学习 Kubernetes 的 Pod
2023-01-29