Menu

Namespace 是 Kubernetes 实现资源隔离、环境划分和多租户管理的基础机制,合理设计有助于提升集群安全性与可维护性。

什么是 Namespace

Namespace(命名空间)是 Kubernetes 中的一个抽象概念,用于在同一个物理集群中创建多个虚拟的集群环境。它为资源对象提供作用域,使得不同 Namespace 中的资源可以使用相同的名称而不会冲突,实现逻辑分组和隔离。

```mermaid “Namespace 资源隔离与作用域” flowchart TD A[物理集群] –> B1[Namespace: dev] A –> B2[Namespace: test] A –> B3[Namespace: prod] B1 –> C1[Pod/Service/Deployment…] B2 –> C2[Pod/Service/Deployment…] B3 –> C3[Pod/Service/Deployment…]


![Namespace 资源隔离与作用域](/cluster/namespace/fae0b147237ef7f231660d68ee11594a.svg)
{width=1920 height=805}

## 使用场景

Namespace 适用于以下典型场景:

- **环境隔离**:将开发、测试、预生产和生产环境部署在不同的 Namespace 中,互不影响。
- **团队隔离**:为不同团队或项目分配独立的 Namespace,便于权限和资源管理。
- **资源配额管理**:对不同 Namespace 设置资源使用限制,实现资源公平分配。
- **权限控制**:基于 Namespace 配合 RBAC 实现细粒度的访问控制和多租户安全。

## 基本操作

### 查看 Namespace

使用如下命令查看集群中所有 Namespace:

```bash
kubectl get namespaces
# 或简写
kubectl get ns

创建 Namespace

可以通过命令或 YAML 文件创建新的 Namespace:

# 命令方式
kubectl create namespace <namespace-name>

# YAML 文件方式
kubectl apply -f namespace.yaml

指定 Namespace 操作

在特定 Namespace 下操作资源,或设置默认 Namespace:

# 在指定 namespace 下查看 Pod
kubectl get pods -n <namespace-name>

# 设置当前上下文默认 namespace
kubectl config set-context --current --namespace=<namespace-name>

默认 Namespace

Kubernetes 集群默认包含以下 Namespace:

Kubernetes 默认命名空间说明

名称 作用描述
default 用户应用的默认部署位置
kube-system Kubernetes 系统组件的部署位置
kube-public 所有用户都可访问的公共资源
kube-node-lease 节点心跳检测的租约对象(提升大规模集群性能)

资源作用域

并非所有 Kubernetes 资源都属于 Namespace 作用域,需注意区分:

Kubernetes 资源作用域对比

资源类型 Namespace 作用域 集群作用域
Pod ✔️  
Service ✔️  
Deployment ✔️  
ConfigMap ✔️  
Secret ✔️  
PersistentVolumeClaim ✔️  
Node   ✔️
PersistentVolume   ✔️
StorageClass   ✔️
ClusterRole   ✔️
Namespace   ✔️

Namespace 生命周期与资源隔离

下图展示了 Namespace 的创建、资源隔离与删除流程:

```mermaid “Namespace 生命周期与资源隔离” sequenceDiagram participant User participant APIServer participant Namespace participant Resource

User->>APIServer: 创建 Namespace
APIServer->>Namespace: 新建命名空间
User->>APIServer: 在 Namespace 下创建资源
APIServer->>Resource: 资源归属 Namespace
User->>APIServer: 删除 Namespace
APIServer->>Namespace: 级联删除所有资源 ```

Namespace 生命周期与资源隔离 {width=1920 height=956}

资源配额与限制

在多团队或多租户场景下,合理分配和限制每个 Namespace 的资源使用非常关键。Kubernetes 提供了 ResourceQuota 和 LimitRange 两种机制:

```mermaid “Namespace 资源配额与限制” flowchart TD A[Namespace] –> B[ResourceQuota] A –> C[LimitRange] B –> D[总资源上限] C –> E[单 Pod/容器资源限制]


![Namespace 资源配额与限制](/cluster/namespace/384e5f0d14f55991f335ec894416057e.svg)
{width=1920 height=1603}

### ResourceQuota 示例

```yaml
apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-resources
  namespace: dev
spec:
  hard:
    pods: "20"
    requests.cpu: "10"
    requests.memory: 40Gi
    limits.cpu: "20"
    limits.memory: 80Gi

应用后,可通过如下命令查看配额使用情况:

kubectl -n dev describe resourcequota compute-resources

LimitRange 示例

apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
  namespace: dev
spec:
  limits:
  - default:
      memory: 2Gi
      cpu: 1
    defaultRequest:
      memory: 512Mi
      cpu: 0.2
    type: Container

应用后,未显式声明资源的 Pod/容器会自动继承默认 request/limit。

配置与管理建议

最佳实践

总结

Namespace 是 Kubernetes 实现多租户、资源隔离和环境划分的核心机制。通过合理设计和管理 Namespace,可提升集群的安全性、可维护性和资源利用率。结合资源配额、网络策略和 RBAC,可实现企业级的多团队协作与治理。

参考文献

  1. Namespaces - kubernetes.io
  2. Resource Quotas - kubernetes.io
  3. Network Policies - kubernetes.io
  4. 限制范围 - kubernetes.io
  5. 为命名空间配置默认的内存请求与限额 - kubernetes.io
  6. 在命名空间中配置默认的 CPU 请求与限额 - kubernetes.io

Menu