介绍
在本实验中,你将学习 Kubernetes 的 LimitRange,它用于设置 Kubernetes Pod 中的资源消耗限制。LimitRange 是 Kubernetes 的一项功能,可帮助你管理分配给 Pod 的资源,并防止资源争用问题。
你将通过一系列逐步的指导,了解 LimitRange 的不同方面,从简单的示例开始,逐步过渡到更复杂的场景。每个步骤都将包含以 YAML 清单形式呈现的代码示例,你可以将其应用到 Kubernetes 集群中,以观察 LimitRange 的实际效果。
启动 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 来重置环境(如有需要)。
创建一个简单的 LimitRange
在这一步骤中,你将创建一个简单的 LimitRange,用于设置命名空间中 Pod 的 CPU 和内存资源限制。以下是具体操作步骤:
- 创建一个名为
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
- 使用
kubectl apply命令将limitrange.yaml文件应用到你的 Kubernetes 集群中:
kubectl apply -f limitrange.yaml
- 运行以下命令,验证 LimitRange 是否已成功创建:
kubectl describe limitrange example-limitrange
你应该会看到列出的 LimitRange example-limitrange,并显示你在 spec 部分中指定的限制。
将 LimitRange 应用到 Pod
在这一步骤中,你将创建一个受 步骤:创建一个简单的 LimitRange 中创建的 LimitRange 约束的 Pod。以下是具体操作步骤:
- 创建一个名为
pod.yaml的新 YAML 文件,内容如下:
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- name: nginx
image: nginx
此 Pod 定义创建了一个简单的 Pod,其中包含一个运行 Nginx 镜像的容器。
- 使用
kubectl apply命令将pod.yaml文件应用到你的 Kubernetes 集群中:
kubectl apply -f pod.yaml
- 运行以下命令,验证 Pod 是否已成功创建:
kubectl get pods example-pod
你应该会看到列出的 Pod example-pod,其状态为 Running。
- 运行以下命令,检查应用到 Pod 的资源限制:
kubectl describe pod example-pod
你应该会看到 Pod 的 CPU 和内存限制,与定义的一致。
测试 LimitRange 的强制执行
在这一步骤中,你将通过尝试创建一个超出 LimitRange 中定义的资源限制的 Pod 来测试 LimitRange 的强制执行。以下是具体操作步骤:
- 创建一个名为
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)。
- 使用
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,以修改资源限制。以下是具体操作步骤:
- 修改
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
- 使用
kubectl apply命令将更新后的limitrange.yaml文件应用到你的 Kubernetes 集群中:
kubectl apply -f limitrange.yaml
- 运行以下命令,验证 LimitRange 是否已成功更新:
kubectl describe limitranges example-limitrange
你应该会在输出中看到更新后的资源限制。
总结
在本实验中,你学习了如何使用 Kubernetes 的 LimitRange 来设置 Pod 的资源消耗限制。你从创建一个简单的 LimitRange 开始,将其应用到 Pod 中,测试了其强制执行效果,然后更新了 LimitRange 以修改资源限制。LimitRange 是 Kubernetes 中管理资源并确保集群中资源高效利用的强大工具。


