Kubernetes 实操:创建 LimitRange 和 Pod 并管理内存资源

Kubernetes 实操:创建 LimitRange 和 Pod 并管理内存资源

一、前言

在 Kubernetes 集群中,LimitRange 用于为命名空间内的容器设置默认资源请求(requests)和资源限额(limits),避免容器无限制占用资源。本文将通过实操演示如何创建 LimitRange、Pod,并验证不同资源配置场景下的默认值生效规则。

二、前提条件

  1. 已安装并配置 kubectl 命令行工具,能连接到 Kubernetes 集群。

  2. 已创建命名空间 default-mem-example(若未创建,可执行 kubectl create namespace default-mem-example)。

三、创建 LimitRange:设置默认内存资源规则

1. LimitRange 配置文件(memory-defaults.yaml)
复制代码
apiVersion: v1

kind: LimitRange

metadata:

name: mem-limit-range  # LimitRange 名称

spec:

limits:

- default:

    memory: 512Mi  # 容器默认内存限额(未指定时生效)

  defaultRequest:

    memory: 256Mi  # 容器默认内存请求(未指定时生效)

  type: Container  # 规则作用对象:容器
2. 执行创建命令
复制代码
kubectl create -f https://k8s.io/docs/tasks/administer-cluster/memory-defaults.yaml --namespace=default-mem-example
  • 作用:在 default-mem-example 命名空间中创建 LimitRange,为所有未指定内存请求 / 限额的容器应用默认值(256Mi 请求,512Mi 限额)。

四、场景 1:创建无内存配置的 Pod

1. Pod 配置文件(memory-defaults-pod.yaml)

容器未指定任何内存请求或限额:

复制代码
apiVersion: v1

kind: Pod

metadata:

name: default-mem-demo  # Pod 名称

spec:

containers:

\- name: default-mem-demo-ctr  # 容器名称

  image: nginx  # 基础镜像(Nginx)
2. 执行创建命令
复制代码
kubectl create -f https://k8s.io/docs/tasks/administer-cluster/memory-defaults-pod.yaml --namespace=default-mem-example
3. 验证默认值生效

查看 Pod 详细配置,验证 LimitRange 的默认值是否被应用:

复制代码
kubectl get pod default-mem-demo --output=yaml --namespace=default-mem-example
4. 预期输出(关键部分)

容器自动继承 LimitRange 的默认配置:

复制代码
containers:

\- image: nginx

imagePullPolicy: Always

name: default-mem-demo-ctr

resources:

  limits:

    memory: 512Mi  # 继承默认限额

  requests:

    memory: 256Mi  # 继承默认请求
5. 清理资源
复制代码
kubectl delete pod default-mem-demo --namespace=default-mem-example

五、场景 2:创建仅指定内存限额的 Pod

1. Pod 配置文件(memory-defaults-pod-2.yaml)

容器仅指定内存限额,未指定请求:

复制代码
apiVersion: v1

kind: Pod

metadata:

name: default-mem-demo-2  # Pod 名称

spec:

containers:

- name: defalt-mem-demo-2-ctr  # 容器名称

  image: nginx

  resources:

    limits:

      memory: "1Gi"  # 手动指定内存限额(1Gi)
2. 执行创建命令
复制代码
kubectl create -f https://k8s.io/docs/tasks/administer-cluster/memory-defaults-pod-2.yaml --namespace=default-mem-example
3. 验证资源配置
复制代码
kubectl get pod default-mem-demo-2 --output=yaml --namespace=default-mem-example
4. 预期输出(关键部分)

内存请求会自动与限额相等,不继承 LimitRange 的默认请求值

复制代码
resources:

limits:

  memory: 1Gi  # 手动指定的限额

requests:

  memory: 1Gi  # 自动匹配限额值(而非 256Mi)
5. 清理资源
复制代码
kubectl delete pod default-mem-demo-2 --namespace=default-mem-example

六、场景 3:创建仅指定内存请求的 Pod

1. Pod 配置文件(memory-defaults-pod-3.yaml)

容器仅指定内存请求,未指定限额:

复制代码
apiVersion: v1

kind: Pod

metadata:

name: default-mem-demo-3  # Pod 名称

spec:

containers:

\- name: default-mem-demo-3-ctr  # 容器名称

  image: nginx

  resources:

    requests:

      memory: "128Mi"  # 手动指定内存请求(128Mi)
2. 执行创建命令
复制代码
kubectl create -f https://k8s.io/docs/tasks/administer-cluster/memory-defaults-pod-3.yaml --namespace=default-mem-example
3. 验证资源配置
复制代码
kubectl get pod default-mem-demo-3 --output=yaml --namespace=default-mem-example
4. 预期输出(关键部分)

内存限额会继承 LimitRange 的默认值(512Mi),请求值为手动指定:

复制代码
resources:

limits:

  memory: 512Mi  # 继承 LimitRange 的默认限额

requests:

  memory: 128Mi  # 手动指定的请求
5. 清理资源
复制代码
kubectl delete pod default-mem-demo-3 --namespace=default-mem-example

七、核心规则总结

容器资源配置场景 内存请求(requests) 内存限额(limits)
未指定请求和限额 继承 LimitRange 的 defaultRequest(256Mi) 继承 LimitRange 的 default(512Mi)
仅指定限额,未指定请求 自动匹配限额值(如 1Gi) 手动指定值(如 1Gi)
仅指定请求,未指定限额 手动指定值(如 128Mi) 继承 LimitRange 的 default(512Mi)

八、设置默认资源的核心动机

当命名空间配置了 资源配额(ResourceQuota) 时,默认资源规则尤为重要:

  1. 资源配额可能要求所有容器必须指定内存限额,否则无法运行;

  2. 资源配额会限制命名空间的总内存使用量,默认限额可避免单个容器过度占用资源。

    通过 LimitRange 设置默认值,既能满足配额要求,又能简化容器配置(无需逐个指定资源参数)。

相关推荐
衫水1 小时前
项目后端服务 Docker 部署SOP (2026-06-04)
运维·docker·容器
H_老邪1 小时前
Docker 学习之路-Linux安装指定版本docker
学习·docker·容器
IT策士2 小时前
第 40 篇 k8s之Helm:编写自定义 Helm Chart
云原生·容器·kubernetes
江华森2 小时前
Nacos 微服务注册与配置中心深度学习指南
微服务·云原生·架构
codeejun2 小时前
每日一Go-74、Go 云原生可观测性实战之OpenTelemetry 全链路采集:Trace + Metrics + Logs
开发语言·云原生·golang
木雷坞2 小时前
自托管 n8n:Docker Compose、Webhook 和升级备份排查
运维·容器
qq_452396232 小时前
第十八篇:《Docker 监控与性能优化》
docker·容器·性能优化
openFuyao3 小时前
AI Native基础设施的目标形态和它存在的一些挑战有哪些?K8s驱动异构算力面临挑战,下一代的K8s是渐进式优化,还是革命式的驱动AI的发展
人工智能·容器·kubernetes
Albert Edison3 小时前
【Docker】镜像仓库(Registry)
运维·docker·容器
小猿姐3 小时前
MongoDB Kubernetes Operator 实测对比:Community、Percona 与 KubeBlocks,谁更适合团队落地?
数据库·mongodb·kubernetes