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 集群资源的虚拟隔离。主要有以下用途:
- 资源隔离:每个 Namespace 有独立的 ResourceQuota、NetworkPolicy 等。
- 名称空间:不同 Namespace 中可以有相同的资源名称。
- 默认有 default、kube-system 和 kube-public 等 Namespace。
- 可以创建自定义 Namespace。
- 可以为 Namespace 设置资源配额、网络策略等。