命名空间是什么?你为什么需要它?
kubernetes 命名空间(namespace)是什么?所谓的命名空间,或者任何其他名字,就是虚拟集群。通过虚拟集群,意味着 kubernetes 可以在单个集群上提供多个 kubernetes 的集群,类似一个在其主机抽象出来的虚拟机。kubernetes 文档 中的解释:

kubernetes 在一个物理集群上提供了多个虚拟集群。这些虚拟集群被称为命名空间。

你为什么需要命名空间?一言以蔽之:隔离。

隔离有很多优点,如它提供了安全和干净的环境。如果你是基础设施的所属者,并且要为开发者提供环境,隔离就相当重要。你最不需要的就是,一个不熟悉你集群是如何搭建的人去修改系统配置 —— 这可能导致所有人都无法登录。

初始命名空间
一个集群的三个初始命名空间:default、kube-system 和 kube-public。虽然技术上你可以用这三个命名空间作部署,但我还是推荐你把这三个命名空间留作系统配置用,而不是你的项目。

Default 用于某些没有指明命名空间的部署,这是一种快速创建混乱的做法,如果你在没有正确信息的情况下做了很多部署,将很难清理。我不会去动它,因为它只有这一个用途,而且在不止一种情况下误导过我。
Kube-system 是 Kubernetes 系统相关的所有对象组成的命名空间。任何对此命名空间的部署都可能是危险的操作,可能对系统本身造成不可挽回的破坏。没错,我试过;所以我不推荐。
Kube-public 所有人可读,但是这个命名空间是为系统保留的。

命名空间命令操作

获取命名空间

kubectl get namespace
# namespace可以简写为ns,如:kubectl get ns

默认是在default这个命名空间里。

查看指定的命名空间里的pod

kubectl get pods -n kube-system

创建命名空间

kubectl create ns ns1

删除命名空间

kubectl delete ns ns1

切换命名空间
切换命名空间实现起来比较麻烦,可以使用第三方命令来实现。
下载第三方命令kubens

mv kubens /bin/
chmod +x /bin/kubens

使用kubens命令查看当前在哪个命名空间

kubens

使用kubens命令切换命名空间

kubens kube-system