什么是 Kubernetes Namespace?

Namespace 是 Kubernetes 中用来实现资源隔离的机制。它允许在同一个集群中运行多个隔离的虚拟集群。

每个 Namespace 都有自己的:

  • 资源配额:如 Pod 数量的限制。
  • 网络策略。
  • Secrets。
  • ConfigMap。

默认情况下,Kubernetes 集群中会有以下几个 Namespace:

  • default: 默认的 Namespace。
  • kube-system: 包含 Kubernetes 系统组件。
  • kube-public: 此 Namespace 中的资源可以被所有人访问。

我们可以通过创建 Namespace 对象来定义新的 Namespace:

yaml
apiVersion: v1
kind: Namespace
metadata:
  name: dev

然后在创建各种资源对象时通过 namespace 字段指定所属的 Namespace:

yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: dev   
spec:
  containers:
  - name: nginx
    image: nginx

这里我们在创建 Pod 时指定其属于 dev Namespace,这样这个 Pod 就被隔离在这个 Namespace 中了。

同样,在创建 Deployment、Service 等其他对象时也可以指定 namespace 来隔离资源。

Namespace 也可以设置资源配额来限制某个 Namespace 中资源的数量。例如,限制 dev Namespace 中最多只能有 10 个 Pod:

yaml
apiVersion: v1
kind: ResourceQuota
metadata:
  name: pod-quota
  namespace: dev
spec:
  hard:
    pods: "10" 

此外,我们还可以为 Namespace 设置网络策略、 RBAC 规则等来控制 Namespace 中资源的访问。

所以总结来说,Namespace 用于实现 Kubernetes 集群资源的虚拟隔离。主要有以下用途:

  1. 资源隔离:每个 Namespace 有独立的 ResourceQuota、NetworkPolicy 等。
  2. 名称空间:不同 Namespace 中可以有相同的资源名称。
  3. 默认有 default、kube-system 和 kube-public 等 Namespace。
  4. 可以创建自定义 Namespace。
  5. 可以为 Namespace 设置资源配额、网络策略等。