K8s Pod管理与资源限制配置

准备工作:你需要知道的基础概念与环境

在动手配置之前,先理解两个核心术语。资源请求(requests)是Pod启动时保证获得的最低资源量,调度器会根据它选择合适的节点。资源限制(limits)是Pod允许使用的最大资源上限,超过限额的Pod可能被杀死或限流。
内存单位常用Mi(兆字节)或Gi(吉字节),CPU单位常用m(毫核,1000m=1核)。

你的环境需要满足:已部署Kubernetes集群,并且kubectl客户端已连接集群。
可以用kubectl cluster-info验证连接状态。
如果没有集群,建议使用Minikube或Kind搭建本地测试环境。

编写YAML:为Pod配置CPU与内存限制

创建一个名为nginx-limits.yaml的文件,内容如下。
这个示例定义了一个Nginx Pod,设置CPU请求为250m(即0.25核),内存请求为256Mi;
CPU限制为500m,内存限制为512Mi。

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
  - name: nginx
    image: nginx:latest
    resources:
      requests:
        memory: "256Mi"
        cpu: "250m"
      limits:
        memory: "512Mi"
        cpu: "500m"

这里的关键点:resources字段必须写在containers下
requests和limits中的CPU和内存键值对不要写错单位。
CPU单位用m或整数(如1代表1核),内存用Mi、Gi或Ki。

保存文件后,执行kubectl apply -f nginx-limits.yaml创建Pod。
创建成功后,可以使用kubectl get pod nginx-pod查看状态,直到显示Running。

避坑指南:常见错误与注意事项

新手最常遇到的问题是Pod处于Pending状态,原因通常是节点资源不足无法满足requests。
可以用kubectl describe pod nginx-pod查看Events部分,看到“0/1 nodes are available: 1 Insufficient cpu”之类的提示。
解决方法:检查节点可用资源,或调低requests值。

另一个坑是OOMKilled(内存超出限制被杀死)。
如果Pod实际使用内存超过limits值,Pod会被终止并自动重启。
查看kubectl get pod显示Restart次数增多时,可以用kubectl logs nginx-pod --previous查看上次崩溃日志。
建议根据应用负载设置合理的limits,比requests高20%-50%即可。

注意:如果不设置requests,K8s会默认使用limits值作为requests,可能导致资源浪费或调度失败。
所以即使你只关心上限,也建议显式写出requests。

效果验证:查看Pod真实资源使用情况及验证限制

Pod运行后,用以下命令查看资源使用:

kubectl top pod nginx-pod

输出会显示CPU和内存的当前使用量。
对比你设定的requests和limits,确认Pod实际占用落在预期范围内。

为了测试内存限制是否生效,可以用一个压力工具。
例如替换容器镜像为progrium/stress,并在Pod中执行内存压力命令。
但生产环境不推荐。
更安全的方式是观察kubectl describe pod nginx-pod中的Events,如果内存超过limits会记录“OOMKilled”事件。

你也可以用kubectl edit pod nginx-pod临时调整资源数值,然后再次观察Pod行为。
注意:修改只对当前Pod生效,如果Pod被重建会恢复原配置。

常见问题解答

问:CPU限制设置后怎么感觉没效果?
答:CPU限制是通过CFS配额实现的,在单核高负载时才会明显。可以用kubectl exec进入Pod,执行cat /sys/fs/cgroup/cpu/cpu.cfs_quota_us查看实际配额值(-1表示不限)。

问:内存限制设置得太低,Pod一直重启怎么办?
答:先调高limits,或者检查应用是否有内存泄漏。可以用kubectl logs查看日志,排除代码问题。

问:能不能动态调整正在运行的Pod资源?
答:K8s 1.19+支持InPlaceUpdate(alpha功能),但生产环境不推荐。通常建议删除并重新创建Pod,或者通过Deployment更新。

通过本文的完整步骤,你已经掌握了K8s Pod管理与资源限制配置的核心操作。
建议从简单的YAML开始,逐步调整实际生产中的资源数值,并配合监控工具(如Prometheus)长期观察。
遇到异常时,先回看避坑部分,再结合kubectl describe定位问题。

分享到:
上一篇
K8s零基础集群搭建实战:从三台CentOS开始
下一篇
K8s Service服务发布配置:零基础也能搞懂的实操教程
1
系统公告

高考专属福利来袭|凭准考证免费领香港 CN2 云服务器

值高考落幕之际,泽御云开启考生专属回馈 + 产品限时特惠双重活动,助力学子暑期学习建站 高考 考生专属福利 全体应届高考生,凭高考准考证即可免费申领【香港 CN2 轻量云服务器,4 核 4G AMD 处理器】,免费使用周期 30 天,可用于搭建个人站点、编程实操、技术实训,祝各位考生金榜题名,前程似锦! 泽御云资质齐全合规自营机房,线路覆盖香港 CN2、国内 BGP、内蒙电信、美国精品线路,售后全天候技术支持。 官方网站:www.zeyuyun.com,活动限时有效,优惠逾期不再保留。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意