介绍
在本实验中,你将学习如何使用 Kubernetes 的 ResourceQuota 来设置 Kubernetes 集群中资源消耗的限制。ResourceQuota 允许你控制和管理 Kubernetes 集群中命名空间(namespace)的资源分配,例如 CPU 和内存。你将从简单的示例开始,逐步过渡到更复杂的场景。每个步骤都将提供代码示例以及如何将其应用到你的 Kubernetes 集群中的说明。
启动 Minikube 集群
在创建资源之前,你需要一个正在运行的 Kubernetes 集群。Minikube 是一个轻量级的 Kubernetes 环境,可以在你的本地机器上运行。
导航到工作目录:
打开终端并导航到默认的项目文件夹:
cd /home/labex/project启动 Minikube:
启动 Minikube 以初始化一个 Kubernetes 集群:
minikube start- 此命令将在你的本地机器上设置一个单节点的 Kubernetes 集群。
- 根据系统性能,Minikube 可能需要几分钟才能启动。
验证 Minikube 是否正在运行:
检查 Minikube 集群的状态:
minikube status- 查找
kubelet和apiserver等组件是否显示为Running。 - 如果集群未运行,请重新运行
minikube start。
- 查找
如果启动 Minikube 时遇到问题,可以使用 minikube delete 来重置环境(如有需要)。
创建 ResourceQuota
在本步骤中,你将创建一个简单的 ResourceQuota,用于限制命名空间中可以使用的 CPU 和内存量。以下是具体操作步骤:
- 创建一个名为
resourcequota.yaml的文件,内容如下:
apiVersion: v1
kind: ResourceQuota
metadata:
name: example-resourcequota
spec:
hard:
cpu: "1"
memory: "1Gi"
此 ResourceQuota 设置了以下硬性限制:
- CPU:1 核
- 内存:1 GiB
- 使用
kubectl apply命令将resourcequota.yaml文件应用到你的 Kubernetes 集群中:
kubectl apply -f resourcequota.yaml
- 运行以下命令以验证 ResourceQuota 是否已成功创建:
kubectl describe resourcequota example-resourcequota
你应该在输出中看到 ResourceQuota 的详细信息。
将 ResourceQuota 应用到命名空间
在本步骤中,你将把在「步骤:创建 ResourceQuota」中创建的 ResourceQuota 应用到一个命名空间。以下是具体操作步骤:
- 创建一个名为
namespace.yaml的文件,内容如下:
apiVersion: v1
kind: Namespace
metadata:
name: example-namespace
此命名空间定义创建了一个名为 example-namespace 的命名空间。
- 使用
kubectl apply命令将namespace.yaml文件应用到你的 Kubernetes 集群中:
kubectl apply -f namespace.yaml
- 使用
kubectl apply命令将 ResourceQuota 应用到example-namespace命名空间:
kubectl apply -f resourcequota.yaml -n example-namespace
- 运行以下命令以验证 ResourceQuota 是否已成功应用到命名空间:
kubectl describe namespace example-namespace
你应该在输出中看到应用到命名空间的 ResourceQuota 的详细信息。
测试 ResourceQuota 的强制执行
在本步骤中,你将创建一个超出 ResourceQuota 中定义的资源限制的 Pod,并验证 ResourceQuota 是否强制执行这些限制。以下是具体操作步骤:
- 创建一个名为
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)。
- 使用
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 以更新资源限制。以下是具体操作步骤:
- 编辑
resourcequota.yaml文件,将 CPU 和内存限制更新为更高的值:
apiVersion: v1
kind: ResourceQuota
metadata:
name: example-resourcequota
spec:
hard:
cpu: "2"
memory: "2Gi"
此操作将 ResourceQuota 更新为允许更高的 CPU 和内存限制(分别为 2 核和 2 GiB)。
- 使用
kubectl apply命令将更新后的resourcequota.yaml文件应用到你的 Kubernetes 集群中:
kubectl apply -f resourcequota.yaml
- 运行以下命令以验证 ResourceQuota 是否已更新:
kubectl describe resourcequotas example-resourcequota
你应该在输出中看到更新后的 CPU 和内存限制。
总结
在本实验中,你学习了如何使用 Kubernetes 的 ResourceQuota 来设置 Kubernetes 集群中资源消耗的限制。你从创建一个简单的 ResourceQuota 开始,将其应用到一个命名空间,并通过创建一个超出资源限制的 Pod 来测试其强制执行。你还学习了如何修改现有的 ResourceQuota 以更新资源限制。ResourceQuota 是管理 Kubernetes 集群资源并确保应用程序不会消耗过多资源的强大工具。


