Kubernetes LimitRange 资源管理

KubernetesKubernetesBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本实验中,你将学习 Kubernetes 的 LimitRange,它用于设置 Kubernetes Pod 中的资源消耗限制。LimitRange 是 Kubernetes 的一项功能,可帮助你管理分配给 Pod 的资源,并防止资源争用问题。

你将通过一系列逐步的指导,了解 LimitRange 的不同方面,从简单的示例开始,逐步过渡到更复杂的场景。每个步骤都将包含以 YAML 清单形式呈现的代码示例,你可以将其应用到 Kubernetes 集群中,以观察 LimitRange 的实际效果。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("`Kubernetes`")) -.-> kubernetes/BasicsGroup(["`Basics`"]) kubernetes(("`Kubernetes`")) -.-> kubernetes/BasicCommandsGroup(["`Basic Commands`"]) kubernetes(("`Kubernetes`")) -.-> kubernetes/AdvancedCommandsGroup(["`Advanced Commands`"]) kubernetes(("`Kubernetes`")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["`Troubleshooting and Debugging Commands`"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("`Initialization`") kubernetes/BasicCommandsGroup -.-> kubernetes/create("`Create`") kubernetes/BasicCommandsGroup -.-> kubernetes/edit("`Edit`") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("`Apply`") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("`Describe`") subgraph Lab Skills kubernetes/initialization -.-> lab-15819{{"`Kubernetes LimitRange 资源管理`"}} kubernetes/create -.-> lab-15819{{"`Kubernetes LimitRange 资源管理`"}} kubernetes/edit -.-> lab-15819{{"`Kubernetes LimitRange 资源管理`"}} kubernetes/apply -.-> lab-15819{{"`Kubernetes LimitRange 资源管理`"}} kubernetes/describe -.-> lab-15819{{"`Kubernetes LimitRange 资源管理`"}} end

启动 Minikube 集群

在创建资源之前,你需要一个正在运行的 Kubernetes 集群。Minikube 是一个轻量级的 Kubernetes 环境,可以在你的本地机器上运行。

  1. 导航到工作目录

    打开终端并导航到默认的项目文件夹:

    cd /home/labex/project
  2. 启动 Minikube

    启动 Minikube 以初始化一个 Kubernetes 集群:

    minikube start
    • 此命令将在你的本地机器上设置一个单节点的 Kubernetes 集群。
    • 根据系统性能,Minikube 可能需要几分钟才能启动。
  3. 验证 Minikube 是否正在运行

    检查 Minikube 集群的状态:

    minikube status
    • 查找 kubeletapiserver 等组件是否显示为 Running
    • 如果集群未运行,请重新运行 minikube start

如果启动 Minikube 时遇到问题,可以使用 minikube delete 来重置环境(如有需要)。

创建一个简单的 LimitRange

在这一步骤中,你将创建一个简单的 LimitRange,用于设置命名空间中 Pod 的 CPU 和内存资源限制。以下是具体操作步骤:

  1. 创建一个名为 limitrange.yaml 的新 YAML 文件,内容如下:
apiVersion: v1
kind: LimitRange
metadata:
  name: example-limitrange
spec:
  limits:
    - type: Container
      max:
        cpu: "1"
        memory: "1Gi"
      min:
        cpu: "100m"
        memory: "100Mi"
      default:
        cpu: "500m"
        memory: "500Mi"

此 LimitRange 设置了以下限制:

  • 最大 CPU:1 核
  • 最大内存:1 GiB
  • 最小 CPU:100 毫核(100m)
  • 最小内存:100 MiB
  • 默认 CPU:500 毫核(500m)
  • 默认内存:500 MiB
  1. 使用 kubectl apply 命令将 limitrange.yaml 文件应用到你的 Kubernetes 集群中:
kubectl apply -f limitrange.yaml
  1. 运行以下命令,验证 LimitRange 是否已成功创建:
kubectl describe limitrange example-limitrange

你应该会看到列出的 LimitRange example-limitrange,并显示你在 spec 部分中指定的限制。

将 LimitRange 应用到 Pod

在这一步骤中,你将创建一个受 步骤:创建一个简单的 LimitRange 中创建的 LimitRange 约束的 Pod。以下是具体操作步骤:

  1. 创建一个名为 pod.yaml 的新 YAML 文件,内容如下:
apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
    - name: nginx
      image: nginx

此 Pod 定义创建了一个简单的 Pod,其中包含一个运行 Nginx 镜像的容器。

  1. 使用 kubectl apply 命令将 pod.yaml 文件应用到你的 Kubernetes 集群中:
kubectl apply -f pod.yaml
  1. 运行以下命令,验证 Pod 是否已成功创建:
kubectl get pods example-pod

你应该会看到列出的 Pod example-pod,其状态为 Running

  1. 运行以下命令,检查应用到 Pod 的资源限制:
kubectl describe pod example-pod

你应该会看到 Pod 的 CPU 和内存限制,与定义的一致。

测试 LimitRange 的强制执行

在这一步骤中,你将通过尝试创建一个超出 LimitRange 中定义的资源限制的 Pod 来测试 LimitRange 的强制执行。以下是具体操作步骤:

  1. 创建一个名为 pod-exceeding-limits.yaml 的新 YAML 文件,内容如下:
apiVersion: v1
kind: Pod
metadata:
  name: example-pod-exceeding-limits
spec:
  containers:
    - name: nginx
      image: nginx
      resources:
        limits:
          cpu: "2"
          memory: "2Gi"

此 Pod 定义创建了一个容器,其请求的资源超出了 LimitRange 中设置的限制(CPU: 2 核,内存: 2 GiB)。

  1. 使用 kubectl apply 命令将 pod-exceeding-limits.yaml 文件应用到你的 Kubernetes 集群中:
kubectl apply -f pod-exceeding-limits.yaml

你可以看到创建 Pod 的操作被拒绝,错误信息为 Error from server (Forbidden): error when creating "pod-exceeding-limits. yaml": pod "example-pod-exceeding-limits " Forbidden: [Maximum cpu usage per container is 1, but limited to 2, maximum memory usage per container is 1Gi, but limited to 2Gi]

更新 LimitRange

在这一步骤中,你将更新在 步骤:创建一个简单的 LimitRange 中创建的 LimitRange,以修改资源限制。以下是具体操作步骤:

  1. 修改 limitrange.yaml 文件,根据你的需求更新资源限制。例如:
apiVersion: v1
kind: LimitRange
metadata:
  name: example-limitrange
spec:
  limits:
    - type: Container
      max:
        cpu: "2"
        memory: "2Gi"
      min:
        cpu: "200m"
        memory: "200Mi"
      default:
        cpu: "1"
        memory: "1Gi"

此更新后的 LimitRange 设置了以下限制:

  • 最大 CPU:2 核
  • 最大内存:2 GiB
  • 最小 CPU:200 毫核(200m)
  • 最小内存:200 MiB
  • 默认 CPU:1 核
  • 默认内存:1 GiB
  1. 使用 kubectl apply 命令将更新后的 limitrange.yaml 文件应用到你的 Kubernetes 集群中:
kubectl apply -f limitrange.yaml
  1. 运行以下命令,验证 LimitRange 是否已成功更新:
kubectl describe limitranges example-limitrange

你应该会在输出中看到更新后的资源限制。

总结

在本实验中,你学习了如何使用 Kubernetes 的 LimitRange 来设置 Pod 的资源消耗限制。你从创建一个简单的 LimitRange 开始,将其应用到 Pod 中,测试了其强制执行效果,然后更新了 LimitRange 以修改资源限制。LimitRange 是 Kubernetes 中管理资源并确保集群中资源高效利用的强大工具。

您可能感兴趣的其他 Kubernetes 教程