管理命名空间与配额

更新时间:2025-03-05 06:33:59

命名空间(Namespace)可以将同一集群中的资源划分为不同的工作区,以便您进行资源隔离、配额管理、权限管理、业务分账等操作,降低多租户场景下管理和维护ACK集群的成本。

命名空间介绍

ACK集群中,您可以使用命名空间(Namespace)作为一种机制,将同一集群中的资源划分为相互隔离的组。在集群用户数量较多时,多个命名空间可以有效划分工作区,将集群资源划分为多个用途,并通过资源配额对命名空间的资源进行分配和管理。

例如,默认情况下,运行中的Pod可以无限制地使用节点上的CPU和内存资源,这意味着某个命名空间的Pod可能会耗尽集群的资源。此时,您可以为命名空间配置资源配额额度,包括CPU、内存、Pod数量等。

创建命名空间

控制台
kubectl
  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择命名空间与配额

  3. 单击创建,在弹出的对话框配置命名空间的名称和标签,然后单击确定

  1. 创建命名空间。

    kubectl create namespace  test
  2. 验证命名空间是否创建成功。

    kubectl get namespaces

    预期输出:

    NAME              STATUS   AGE
    default           Active   46h
    kube-node-lease   Active   46h
    kube-public       Active   46h
    kube-system       Active   46h
    test              Active   9s

    可以看到,新建的test命名空间出现在列表中。

命名空间创建完成后,您可以对命名空间进行编辑配置(修改标签)、设置资源配额和限制、删除等操作。

设置资源配额和限制

创建命名空间后,您可以为其配置对应的资源配额(Quota)和默认的资源限制(Limit Range),从而控制该命名空间下的Pod资源使用额度和开销。

  1. 命名空间页面,单击目标命名空间操作列的资源配额与限制

  2. 资源配额与限制对话框,配置资源配额和默认的资源限制。

    关于如何完成相关配置,您可以参见Kubernetes官方文档资源配额为命名空间配置默认的内存请求和限制

    说明

    对命名空间设置CPU、内存配额(ResourceQuota)后,创建Pod时必须指定CPU和内存资源限制,或为命名空间配置默认资源限制(LimitRange)。

调整命名空间资源配额的最佳实践建议

  • 建议在非高峰期调整,调整前,请检查现有工作负载的资源使用情况。

  • 确保预留足够的弹性空间以支持HPA自动扩缩容。

  • 调整后建议监控系统至少30分钟,确保HPA功能正常。

删除命名空间

说明
  • 系统内置的命名空间不支持删除。

  • 如果开启命名空间删除保护,请先在操作列选择image > 关闭删除保护,然后进行删除。

  • 删除命名空间时,请确保已清理命名空间下资源。如果长期处于终止状态,请参见下文删除命名空间时,长期处于终止状态要如何处理?进行强制删除。

控制台
kubectl
  1. 命名空间页面,找到待删除的命名空间,在操作列选择image > 删除

  2. 确认删除对话框中,确认关联删除的该命名空间下的资源,然后单击确认删除

使用以下命令删除命名空间。

kubectl delete namespace test

常见问题

删除命名空间时,长期处于终止状态要如何处理?

当您删除一个存在资源的命名空间时,删除操作会长时间停留在Terminating状态。您可以通过移除命名空间的finalizers属性来快速终止该过程,该操作可能导致该命名空间资源残留在集群中,建议操作前清理命名空间下的资源。

finalizers数组为空并且状态为终止时,Kubernetes将自动删除命名空间。您可以通过以下方式强制删除命名空间。

  1. 打开Shell终端,为您的Kubernetes集群创建一个反向代理。

    kubectl proxy

    输出示例如下:

    Starting to serve on 127.0.0.1:8001
  2. 打开一个新的Shell终端,通过定义环境变量来连接到Kubernetes集群,使用curl测试连接性和授权。

    export TOKEN=$(kubectl describe secret $(kubectl get secrets | grep default | cut -f1 -d ' ') | grep -E '^token' | cut -f2 -d':' | tr -d '\t')
    curl http://localhost:8001/api/v1/namespaces --header "Authorization: Bearer $TOKEN" --insecure
  3. 获取命名空间定义的内容,以命名空间istio-system为例。

    kubectl get namespace istio-system -o json > istio-system.json
  4. finalizers数组置为空,并重新保存文件。

        "spec": {
            "finalizers": [
            ]
        },
  5. 去除finalizers,以命名空间istio-system为例。

    curl -X PUT --data-binary @istio-system.json http://localhost:8001/api/v1/namespaces/istio-system/finalize -H "Content-Type: application/json" --header "Authorization: Bearer $TOKEN" --insecure

相关文档

  • 本页导读 (1)
  • 命名空间介绍
  • 创建命名空间
  • 设置资源配额和限制
  • 调整命名空间资源配额的最佳实践建议
  • 删除命名空间
  • 常见问题
  • 删除命名空间时,长期处于终止状态要如何处理?
  • 相关文档