命名空间(Namespace)可以将同一集群中的资源划分为不同的工作区,以便您进行资源隔离、配额管理、权限管理、业务分账等操作,降低多租户场景下管理和维护ACK集群的成本。
命名空间介绍
在ACK集群中,您可以使用命名空间(Namespace)作为一种机制,将同一集群中的资源划分为相互隔离的组。在集群用户数量较多时,多个命名空间可以有效划分工作区,将集群资源划分为多个用途,并通过资源配额对命名空间的资源进行分配和管理。
例如,默认情况下,运行中的Pod可以无限制地使用节点上的CPU和内存资源,这意味着某个命名空间的Pod可能会耗尽集群的资源。此时,您可以为命名空间配置资源配额额度,包括CPU、内存、Pod数量等。
创建命名空间
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择命名空间与配额。
单击创建,在弹出的对话框配置命名空间的名称和标签,然后单击确定。
创建命名空间。
kubectl create namespace test
验证命名空间是否创建成功。
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资源使用额度和开销。
在命名空间页面,单击目标命名空间操作列的资源配额与限制。
在资源配额与限制对话框,配置资源配额和默认的资源限制。
关于如何完成相关配置,您可以参见Kubernetes官方文档资源配额、为命名空间配置默认的内存请求和限制。
对命名空间设置CPU、内存配额(ResourceQuota)后,创建Pod时必须指定CPU和内存资源限制,或为命名空间配置默认资源限制(LimitRange)。
调整命名空间资源配额的最佳实践建议
建议在非高峰期调整,调整前,请检查现有工作负载的资源使用情况。
确保预留足够的弹性空间以支持HPA自动扩缩容。
调整后建议监控系统至少30分钟,确保HPA功能正常。
删除命名空间
系统内置的命名空间不支持删除。
如果开启命名空间删除保护,请先在操作列选择
> 关闭删除保护,然后进行删除。
删除命名空间时,请确保已清理命名空间下资源。如果长期处于终止状态,请参见下文删除命名空间时,长期处于终止状态要如何处理?进行强制删除。
在命名空间页面,找到待删除的命名空间,在操作列选择
> 删除。
在确认删除对话框中,确认关联删除的该命名空间下的资源,然后单击确认删除。
使用以下命令删除命名空间。
kubectl delete namespace test
常见问题
删除命名空间时,长期处于终止状态要如何处理?
当您删除一个存在资源的命名空间时,删除操作会长时间停留在Terminating状态。您可以通过移除命名空间的finalizers属性来快速终止该过程,该操作可能导致该命名空间资源残留在集群中,建议操作前清理命名空间下的资源。
当finalizers数组为空并且状态为终止时,Kubernetes将自动删除命名空间。您可以通过以下方式强制删除命名空间。
打开Shell终端,为您的Kubernetes集群创建一个反向代理。
kubectl proxy
输出示例如下:
Starting to serve on 127.0.0.1:8001
打开一个新的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
获取命名空间定义的内容,以命名空间istio-system为例。
kubectl get namespace istio-system -o json > istio-system.json
将finalizers数组置为空,并重新保存文件。
"spec": { "finalizers": [ ] },
去除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
相关文档
关于集群的配额与限制,例如产品与集群的配置限制、单集群容量限制、集群配额和依赖底层云产品配额等,请参见配额与限制。
关于如何为命名空间设置配额的示例,请参见配置 API 对象配额 | Kubernetes。
您可以将RAM用户或RAM角色与RBAC权限结合使用,实现集群或命名空间的精细化权限管理,请参见使用RAM授予集群及云资源访问权限、使用RBAC授予集群内资源操作权限。
- 本页导读 (1)
- 命名空间介绍
- 创建命名空间
- 设置资源配额和限制
- 调整命名空间资源配额的最佳实践建议
- 删除命名空间
- 常见问题
- 删除命名空间时,长期处于终止状态要如何处理?
- 相关文档