Kubernetes 资源配额管理

KubernetesKubernetesBeginner
立即练习

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

介绍

在本实验中,你将学习如何使用 Kubernetes 的 ResourceQuota 来设置 Kubernetes 集群中资源消耗的限制。ResourceQuota 允许你控制和管理 Kubernetes 集群中命名空间(namespace)的资源分配,例如 CPU 和内存。你将从简单的示例开始,逐步过渡到更复杂的场景。每个步骤都将提供代码示例以及如何将其应用到你的 Kubernetes 集群中的说明。


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/get("`Get`") 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-15823{{"`Kubernetes 资源配额管理`"}} kubernetes/get -.-> lab-15823{{"`Kubernetes 资源配额管理`"}} kubernetes/create -.-> lab-15823{{"`Kubernetes 资源配额管理`"}} kubernetes/edit -.-> lab-15823{{"`Kubernetes 资源配额管理`"}} kubernetes/apply -.-> lab-15823{{"`Kubernetes 资源配额管理`"}} kubernetes/describe -.-> lab-15823{{"`Kubernetes 资源配额管理`"}} 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 来重置环境(如有需要)。

创建 ResourceQuota

在本步骤中,你将创建一个简单的 ResourceQuota,用于限制命名空间中可以使用的 CPU 和内存量。以下是具体操作步骤:

  1. 创建一个名为 resourcequota.yaml 的文件,内容如下:
apiVersion: v1
kind: ResourceQuota
metadata:
  name: example-resourcequota
spec:
  hard:
    cpu: "1"
    memory: "1Gi"

此 ResourceQuota 设置了以下硬性限制:

  • CPU:1 核
  • 内存:1 GiB
  1. 使用 kubectl apply 命令将 resourcequota.yaml 文件应用到你的 Kubernetes 集群中:
kubectl apply -f resourcequota.yaml
  1. 运行以下命令以验证 ResourceQuota 是否已成功创建:
kubectl describe resourcequota example-resourcequota

你应该在输出中看到 ResourceQuota 的详细信息。

将 ResourceQuota 应用到命名空间

在本步骤中,你将把在「步骤:创建 ResourceQuota」中创建的 ResourceQuota 应用到一个命名空间。以下是具体操作步骤:

  1. 创建一个名为 namespace.yaml 的文件,内容如下:
apiVersion: v1
kind: Namespace
metadata:
  name: example-namespace

此命名空间定义创建了一个名为 example-namespace 的命名空间。

  1. 使用 kubectl apply 命令将 namespace.yaml 文件应用到你的 Kubernetes 集群中:
kubectl apply -f namespace.yaml
  1. 使用 kubectl apply 命令将 ResourceQuota 应用到 example-namespace 命名空间:
kubectl apply -f resourcequota.yaml -n example-namespace
  1. 运行以下命令以验证 ResourceQuota 是否已成功应用到命名空间:
kubectl describe namespace example-namespace

你应该在输出中看到应用到命名空间的 ResourceQuota 的详细信息。

测试 ResourceQuota 的强制执行

在本步骤中,你将创建一个超出 ResourceQuota 中定义的资源限制的 Pod,并验证 ResourceQuota 是否强制执行这些限制。以下是具体操作步骤:

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

此 Pod 定义创建了一个容器,其请求的资源超出了在「步骤:创建 ResourceQuota」中设置的 ResourceQuota 限制(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": pods "example-pod-exceeding-limits" is forbidden: exceeded quota: example-resourcequota, requested: cpu=2,memory=2Gi, used: cpu=0,memory=0, limited: cpu=1,memory=1Gi

修改 ResourceQuota

在本步骤中,你将学习如何修改现有的 ResourceQuota 以更新资源限制。以下是具体操作步骤:

  1. 编辑 resourcequota.yaml 文件,将 CPU 和内存限制更新为更高的值:
apiVersion: v1
kind: ResourceQuota
metadata:
  name: example-resourcequota
spec:
  hard:
    cpu: "2"
    memory: "2Gi"

此操作将 ResourceQuota 更新为允许更高的 CPU 和内存限制(分别为 2 核和 2 GiB)。

  1. 使用 kubectl apply 命令将更新后的 resourcequota.yaml 文件应用到你的 Kubernetes 集群中:
kubectl apply -f resourcequota.yaml
  1. 运行以下命令以验证 ResourceQuota 是否已更新:
kubectl describe resourcequotas example-resourcequota

你应该在输出中看到更新后的 CPU 和内存限制。

总结

在本实验中,你学习了如何使用 Kubernetes 的 ResourceQuota 来设置 Kubernetes 集群中资源消耗的限制。你从创建一个简单的 ResourceQuota 开始,将其应用到一个命名空间,并通过创建一个超出资源限制的 Pod 来测试其强制执行。你还学习了如何修改现有的 ResourceQuota 以更新资源限制。ResourceQuota 是管理 Kubernetes 集群资源并确保应用程序不会消耗过多资源的强大工具。

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