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 设置默认值,既能满足配额要求,又能简化容器配置(无需逐个指定资源参数)。

相关推荐
LSL666_2 小时前
什么是微服务
微服务·云原生·架构
lars_lhuan3 小时前
K8s跨命名空间SSL认证解决方案:Reflector工具实战
容器·kubernetes·ssl
郝开3 小时前
Docker Compose 本地环境搭建:redis
redis·docker·容器
青槿吖3 小时前
第二篇:从复制粘贴到自定义规则!Spring Cloud Gateway 断言 + 过滤全玩法,拿捏微服务流量管控
java·spring boot·后端·spring cloud·微服务·云原生·架构
爱莉希雅&&&4 小时前
Ansible+Docker案例(含ansible配置安装docker)
linux·运维·mysql·nginx·docker·容器·ansible
lulukanshijie4 小时前
Helm 入门:Kubernetes 包管理器介绍
其他·云原生·容器·kubernetes
王的宝库4 小时前
【K8s】集群安全机制(三):准入控制
网络·安全·kubernetes
七七powerful4 小时前
Kubernetes 弹性伸缩(HPA)设计思想深度解析
云原生·容器·kubernetes
雨奔5 小时前
Kubernetes Pod Preset 详解:自动注入 Pod 配置的高效方案
云原生·容器·kubernetes