腾讯云TKE(Tencent Kubernetes Engine)集群配置资源限制,主要通过 Kubernetes 的 Resource Quotas 和 Limit Ranges 两个机制来实现,可以有效防止应用无限制地占用集群资源,保障集群的稳定性和公平性。下面分别介绍这两种方式,并提供详细的配置步骤和示例:
Resource Quotas 用于限制单个 Namespace (命名空间) 内所有资源的总使用量。可以限制 CPU、内存、存储、Pod 数量、Service 数量等等。
1. 创建 Namespace (如果还没有)
首先,你需要一个 Namespace 来应用 Resource Quota。如果没有,可以创建一个:
kubectl create namespace my-namespace
2. 定义 ResourceQuota YAML 文件
创建一个名为 resource-quota.yaml 的文件,内容如下:
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute-resources
namespace: my-namespace
spec:
hard:
pods: "10"
requests.cpu: "2" # 2 CPU cores
requests.memory: "4Gi" # 4 GB memory
limits.cpu: "4" # 4 CPU cores (limit)
limits.memory: "8Gi" # 8 GB memory (limit)
services: "5"
replicationcontrollers: "3"
这个例子中,我们限制了:
pods: 最多 10 个 Podrequests.cpu: 所有 Pod 的 CPU 请求总和不超过 2 个 corerequests.memory: 所有 Pod 的内存请求总和不超过 4GiBlimits.cpu: 所有 Pod 的 CPU 限制总和不超过 4 个 corelimits.memory: 所有 Pod 的内存限制总和不超过 8GiBservices: 最多 5 个 Servicereplicationcontrollers: 最多 3 个 ReplicationController3. 应用 ResourceQuota
使用 kubectl 命令应用这个 ResourceQuota:
kubectl apply -f resource-quota.yaml
4. 验证 ResourceQuota
使用以下命令查看 ResourceQuota 的状态:
kubectl describe resourcequota compute-resources -n my-namespace
你会看到当前资源的使用情况和配额限制。如果超过配额,创建 Pod 或其他资源将会失败,并提示相关错误信息。
Limit Ranges 用于为 Namespace 内的 Pod 和 Container 设置默认的资源请求和限制,以及允许的资源请求和限制的范围。这有助于防止用户创建没有资源限制的 Pod,从而保证集群的资源合理分配。
1. 定义 LimitRange YAML 文件
创建一个名为 limit-range.yaml 的文件,内容如下:
apiVersion: v1
kind: LimitRange
metadata:
name: cpu-mem-limit-range
namespace: my-namespace
spec:
limits:
- default:
cpu: 500m # 0.5 CPU core
memory: 1Gi # 1 GB memory
defaultRequest:
cpu: 250m # 0.25 CPU core
memory: 512Mi # 512 MB memory
max:
cpu: "1" # 1 CPU core
memory: 2Gi # 2 GB memory
min:
cpu: 100m # 0.1 CPU core
memory: 100Mi # 100 MB memory
type: Container
这个例子中,我们设置了:
default: 如果 Container 没有指定 limit,则默认 CPU 限制为 0.5 core,内存限制为 1GiB。defaultRequest: 如果 Container 没有指定 request,则默认 CPU 请求为 0.25 core,内存请求为 512MiB。max: Container 的 CPU 限制不能超过 1 core,内存限制不能超过 2GiB。min: Container 的 CPU 请求不能低于 0.1 core,内存请求不能低于 100MiB。2. 应用 LimitRange
使用 kubectl 命令应用这个 LimitRange:
kubectl apply -f limit-range.yaml
3. 验证 LimitRange
使用以下命令查看 LimitRange 的状态:
kubectl describe limitrange cpu-mem-limit-range -n my-namespace
创建 Pod 时,如果没有指定资源请求和限制,Kubernetes 会自动应用 LimitRange 中定义的默认值。如果指定的资源请求或限制超出了 LimitRange 的范围,创建 Pod 将会失败,并提示相关错误信息。
下面是一个简单的 Pod 定义,展示了如何应用这些限制:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
namespace: my-namespace
spec:
containers:
- name: my-container
image: nginx
resources:
requests:
cpu: 200m
memory: 256Mi
limits:
cpu: 400m
memory: 512Mi
在这个例子中,Pod my-pod 位于 my-namespace 中,Container my-container 请求 200m CPU 和 256MiB 内存,限制为 400m CPU 和 512MiB 内存。这些值必须在 LimitRange 规定的范围内,并且不会超过 ResourceQuota 的限制。
在腾讯云 TKE 控制台上,你也可以方便地配置 Resource Quotas 和 Limit Ranges。操作步骤如下:
通过合理配置 Resource Quotas 和 Limit Ranges,可以有效地控制 TKE 集群中应用的资源使用,提高集群的资源利用率和稳定性。 🎉