在一个Kubernetes集群中可以使用namespace创建多个“虚拟集群”,这些namespace之间可以完全隔离,也可以通过某种方式,让一个namespace中的service可以访问到其他的namespace中的服务,我们在CentOS中部署kubernetes1.6集群的时候就用到了好几个跨越namespace的服务,比如Traefik ingress和kube-systemnamespace下的service就可以为整个集群提供服务,这些都需要通过RBAC定义集群级别的角色来实现。
因为namespace可以提供独立的命名空间,因此可以实现部分的环境隔离。当你的项目和人员众多的时候可以考虑根据项目属性,例如生产、测试、开发划分不同的namespace。
kubectl get namespace
NAME STATUS AGE
default Active 1d
kube-system Active 1d
kube-public Active 1d
Kubernetes以三个初始名称空间开头:
default
没有其他命名空间的对象的默认命名空间.kube-system
Kubernetes系统创建的对象的命名空间.kube-public
此命名空间是自动创建的,并且可供所有用户(包括未经过身份验证的用户)读取.此命名空间主要用于集群使用,关联的一些资源在集群中是可见的并且可以公开读取。此命名空间的公共方面知识一个约定,但不是非要这么要求。获取特定的Namespace信息:
kubectl get namespaces
获取特定的Namespace的详细信息:
kubectl describe namespaces
Name: default
Labels:
Annotations:
Status: Active
No resource quota.
Resource Limits
Type Resource Min Max Default
---- -------- --- --- ---
Container cpu - - 100m
命名空间可以分为两个阶段:
Active
当前命名空间正在被使用。Terminating
这个Namespace正在被删除,并且不能用于新对象。创建一个名为my-namespace.yaml的新YAML文件,其中包含以下内容:
vim my-namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
#
name: test
# 通过kubectl命令根据yaml创建namespace
kubectl create -f ./my-namespace.yaml
直接通过命令创建
kubectl create namespace
kubectl delete namespaces
default
命名空间。默认情况下,k8s集群在配置集群以保存默认的Pod集时,将实例化默认命名空间和集群使用的部署。
vim namespace-dev.json
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"name": "development",
"labels": {
"name": "development"
}
}
}
vim namespace-pro.json
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"name": "production",
"labels": {
"name": "production"
}
}
}
# 创建两个namespacenamespace-dev.json
kubectl create -f namespace-dev.json && kubectl create -f namespace-dev.json
查看namespace对应的lables
kubectl get namespace --show-lables
NAME STATUS AGE LABELS
default Active 32m
development Active 29s name=development
production Active 23s name=production
一个Namespace为集群中的Pods,Services,and Deployments提供了范围。
每一个Namespace创建的资源(pod,services,deployment)对于另一个Namespace都是隐藏的。
参考文档:
https://kubernetes.io/docs/tasks/administer-cluster/namespaces/#subdividing-your-cluster-using-kubernetes-namespaces
参考文档: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/#setting-the-namespace-for-a-request