概念
官方文档定义:
Kubernetes 支持多个虚拟集群,它们底层依赖于同一个物理集群。这些虚拟集群被称为名字空间。
也就是说,可以通过在 K8S 集群内创建 namespace 来分隔资源和对象,实现若干个资源不可共享的虚拟集群的划分。
比如我有 2 个业务 A 和 B,那么我可以创建 ns-a 和 ns-b 分别部署业务 A 和 B 的服务,如在 ns-a 中部署了一个 deployment,名字是 hello,返回用户的是“hello a”;在 ns-b 中也部署了一个 deployment,名字恰巧也是 hello,返回用户的是“hello b”(要知道,在同一个 namespace 下 deployment 不能同名;但是不同 namespace 之间没有影响)。
Namespace 在很多情况下用于实现多租户的资源隔离。分组的不同项目、小组或用户组,便于不同的分组在共享使用整个集群的资源的同时还能被分别管理。
作用
- 允许团队或项目存在于自己的虚拟集群中,而不必担心相互影响。
- 通过将用户和进程限制在某些命名空间中,增强基于角色的访问控制(RBAC)。
- 通过资源配额,在多个团队和用户之间分配群集的资源。
- 提供了一种简单的方法,将容器化应用程序的开发、测试和部署分开,使整个生命周期都可以在同一群集上进行。
例子
Kubernetes提供了三个开箱即用的命名空间。它们是:
- default
顾名思义,这是默认情况下每个Kubernetes命令引用的命名空间,默认情况下每个Kubernetes资源都位于其中。在创建新的命名空间之前,整个群集驻留在“default”中。 - kube-system
该特殊命名空间中的资源对象通常由 Kubernetes 自动创建和管理,存储 Kubernetes 系统组件和插件的资源对象,用于管理和运行集群的核心组件,这些组件对于集群的正常运行至关重要。对这些资源进行手动修改或删除可能会导致集群出现问题,应避免使用。 - kube-public
用于存储一些集群相关的公共配置和公共资源对象(配置信息、证书、密钥等),不建议用户使用。该特殊命名空间中的资源对象对于整个集群都可见,包括所有命名空间中的用户和服务。