介绍Kubernetes的Namespaces
k8s可以使用Namespace创建多个虚拟集群
何时使用多个Namespaces
团队或者项目中有许多用户,可以使用namespace来分区,如果需要他们提供特殊性质时,也可以使用namespace
- namespace为名称提供了一个范围,资源的name在namespace具有唯一性
- namespace是一种集群资源划分为多个用途(通过resource quota)的方法
- 未来,默认情况下,相同的namespace中的对象具有相同的访问控制策略
使用Namespace
创建
1 | 命令行直接创建 |
命名空间名称满足正则表达式[a-z0-9]([-a-z0-9]*[a-z0-9])?
,最大长度为63位
删除
1 | kubectl delete namespaces new-namespace |
- 删除一个namespace会自动删除所有属于该namespace的资源
- default和kube-system namespace不可删除
- PersistentVolumes是不属于任何namespace的,但是PersistentVolumeCliaim是属于某个特定namespace的
- Events是否属于namespace取决于产生events的对象
查看
1 | kubectl get namespaces |
k8s 从初始的两个namespace开始:default和kube-system(由k8s系统创建的对象的Namespace)
Setting the namespace for a request
临时设置request的namespace,需要使用–namespace标志1
2 kubectl --namespace=<insert-namespace-name-here> run nginx --image=nginx
kubectl --namespace=<insert-namespace-name-here> get pods
setting the namespace preference
可以使用kubectl命令创建Namespace可以永久保存在context中1
2
3 kubectl config set-context $(kubectl config current-context) --namespace=<insert-namespace-name-here>
Validate it
kubectl config view | grep namespace:
什么对象在Namespace中
大多数Kubernetes资源(例如pod、services、replication controllers或其他)都在某些Namespace中,但Namespace资源本身并不在Namespace中。
而低级别资源(如Node和persistentVolumes)不在任何Namespace中。
Events是一个例外:它们可能有也可能没有Namespace,具体取决于Events的对象。