### 一、命名空间

Kubernetes 的命名空间是一种将集群内的资源进行逻辑分割的机制。它们是用来实现多租户环境的一种方式，允许不同的团队或项目在同一个集群中运行，而不会互相干扰。命名空间可以用来组织资源，提供一种隔离机制，并可以用于访问控制、资源配额以及策略的应用

### 二、命名空间的主要用途

1. **资源分隔**：命名空间可以让资源（如Pods、Services、Deployments等）彼此隔离。不同命名空间中同名的资源不会冲突
2. **多租户环境**：在同一个集群中，不同的用户（或团队、部门、项目）可以使用各自的命名空间，从而保持工作环境的独立性
3. **权限控制**：通过Role-Based Access Control（RBAC），可以为不同的命名空间设置不同的访问权限，实现细粒度的权限管理
4. **配额管理**：可以为每个命名空间设置资源配额（ResourceQuotas），限制该命名空间可以使用的资源数量，例如CPU、内存、存储等
5. **策略应用**：可以为命名空间应用策略，如网络策略（NetworkPolicies）来控制命名空间内部或跨命名空间的网络流量

### 三、默认命名空间

- `default`：如果不指定命名空间，资源默认被创建在这个命名空间中
- `kube-system`：由Kubernetes系统创建的资源所在的命名空间，如系统组件和服务
- `kube-public`：这是一个自动创建的命名空间，对所有用户都是可读的。它通常用于集群级别的资源，如集群信息（如集群CIDR范围）
- `kube-node-lease`：用于持有每个节点的租约对象，这些租约用于节点寿命的确定

### 四、命名空间操作

1. 使用kubectl 工具操作

   - **创建命名空间：**

   ```
   kubectl create namespace <namespace-name>
   ```

   - **获取命名空间列表：**

   ```
   kubectl get namespaces
   # 或者使用缩写
   kubectl get ns
   ```

   - **获取特定命名空间的详细信息：**

   ```
   kubectl describe namespace <namespace-name>
   ```

   - **删除命名空间：**

   ```
   kubectl delete namespace <namespace-name>
   ```

   - **设置默认命名空间：**

   为了避免每次都在`kubectl`命令中指定`--namespace`参数，你可以更改你的Kubernetes配置来设置默认的命名空间：

   ```
   kubectl config set-context $(kubectl config current-context) --namespace=<namespace-name>
   ```

   - **查看当前上下文的默认命名空间：**

   ```
   kubectl config view | grep namespace:
   ```

2. 使用yaml文件

   - **创建命名空间的YAML文件（namespace.yaml）：**

   ```
   apiVersion: v1
   kind: Namespace
   metadata:
     name: <namespace-name>
   ```

   - **应用YAML文件来创建命名空间：**

   ```
   kubectl apply -f namespace.yaml
   ```

   - **删除命名空间：**

     使用YAML文件删除命名空间，首先你需要确保知道要删除的命名空间的准确名称：

   ```
   kubectl delete -f namespace.yaml
   ```