在线客服

腾讯云TKE集群如何配置资源限制,防止应用占用过多资源

⏱️2026-04-23 09:00 👁️4

腾讯云TKE(Tencent Kubernetes Engine)集群配置资源限制,主要通过 Kubernetes 的 Resource Quotas 和 Limit Ranges 两个机制来实现,可以有效防止应用无限制地占用集群资源,保障集群的稳定性和公平性。下面分别介绍这两种方式,并提供详细的配置步骤和示例:

一、Resource Quotas (资源配额) 🧮

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 个 Pod
  • requests.cpu: 所有 Pod 的 CPU 请求总和不超过 2 个 core
  • requests.memory: 所有 Pod 的内存请求总和不超过 4GiB
  • limits.cpu: 所有 Pod 的 CPU 限制总和不超过 4 个 core
  • limits.memory: 所有 Pod 的内存限制总和不超过 8GiB
  • services: 最多 5 个 Service
  • replicationcontrollers: 最多 3 个 ReplicationController

3. 应用 ResourceQuota

使用 kubectl 命令应用这个 ResourceQuota:

kubectl apply -f resource-quota.yaml

4. 验证 ResourceQuota

使用以下命令查看 ResourceQuota 的状态:

kubectl describe resourcequota compute-resources -n my-namespace

你会看到当前资源的使用情况和配额限制。如果超过配额,创建 Pod 或其他资源将会失败,并提示相关错误信息。

二、Limit Ranges (限制范围) 🎯

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 控制台操作 💻

在腾讯云 TKE 控制台上,你也可以方便地配置 Resource Quotas 和 Limit Ranges。操作步骤如下:

  1. 登录腾讯云 TKE 控制台。
  2. 选择你的集群。
  3. 进入 "Namespace" 页面,选择你要配置的 Namespace。
  4. 在 "资源配额" 或 "限制范围" 标签页下,点击 "新建",然后根据页面提示填写相关信息。
  5. 保存配置。

五、注意事项 ⚠️

  • Resource Quotas 和 Limit Ranges 是作用于 Namespace 的,所以你需要先创建一个 Namespace。
  • 建议先设置 Limit Ranges,确保所有 Pod 都有合理的资源请求和限制,然后再设置 Resource Quotas,限制整个 Namespace 的资源使用量。
  • 监控资源使用情况,及时调整 Resource Quotas 和 Limit Ranges 的配置,以适应应用的需求变化。
  • 如果应用需要动态扩容,可以结合 Horizontal Pod Autoscaler (HPA) 来使用,HPA 会根据资源使用情况自动调整 Pod 的数量,但仍然受到 Resource Quotas 和 Limit Ranges 的限制。
  • 考虑使用 PodDisruptionBudget (PDB) 来保证应用在节点维护或升级期间的可用性。

通过合理配置 Resource Quotas 和 Limit Ranges,可以有效地控制 TKE 集群中应用的资源使用,提高集群的资源利用率和稳定性。 🎉

鲨鱼云自助平台

鲨鱼云自助平台是一站式国际云服务解决方案平台,支持阿里云国际、腾讯云国际、亚马逊AWS、谷歌云GCP等主流云厂商账号的开通、充值与管理。

热门文章
更多>