# Namespace

这里的**命名空间**与容器中的命名空间不是一类东西，这里说的命名空间只是针对Kubernetes资源进行逻辑分组的东西，并且没有进行真实的隔离，比如不同命名空间中的Pod若知道对方的IP，在网络插件允许的情况下，也是可以互相访问的。

## 对命名空间需求

通常，我们选择在**多租户环境**下使用命名空间，不同的租户使用各自的命名空间，不同的命名空间中可以创建同名的资源。

## 管理命名空间

### 查看

可以通过`ns`查看现有的Namespace：

```bash
kubectl get ns
```

通过`-n`可以查看指定Namespace中的资源。例如查看`custom-namespace`中的Service资源：

```bash
kubectl get services -n custom-namespace
```

### 创建

创建命名空间可以通过两种方式实现：

1. 通过YAML文件创建；
2. 通过命令创建；

#### 通过YAML创建

因为Namespace也是一种资源，因此可以将`Kind`设置为该资源类型即可。例如，创建一个名为`custom-namespace`的命名空间：

```yaml
apiVersion: v1
kind: Namespace    # 资源类型为Namespace
metadata:
  name: custom-namespace    # 命名空间的名字
```

然后通过`kubectl apply -f xxx.yaml`就可以生成对应资源。

#### 通过命令创建

可以使用`kubectl create`命令的方式创建命名空间：

```bash
kubectl create namespace custom-namespace
```

### 删除

可以通过命令行的方式删除Namespace，但是需要注意的是，这种删除方式会同时删除这个命名空间中的所有的资源。例如删除`custom-namespace`这个命名空间：

```bash
kubectl delete ns custom-namespace
```
