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