k8s 命名空间

介绍

首先回到标签的概念,我们已经看到标签是如何将pod和其他对象组织成组的由于每个对象都可以有多个标签,因 这些对象组可以重叠。另外,当在集群中工作(例如通过 kubectl )时,如果没有明确指定标签选择器,我们总能看到所有对象但是,当你想将对象分割成完全独立且不重叠的组时,又该如何呢?可能你每次只想在一个小组内进行操作,因 Kubernetes也能将对象分组到命名空间中 。
注意这和用于相互隔离进程的Linux命名空间不一样Kubernetes命名空间简单地为对象名称提供了 个作用域,命名空间与标签最大的不同是它可以隔离资源,而标签不具有隔离作用。

命名空间的使用需求

1、在使用多个namespace 的前提下,我们可以将包含大量组件的复杂系统拆分为更小的不同组,这些不同组也可以用于在多租户环境中分配资源,将资源分配为生产、开发和 环境,或者以其他任何你需要的         方式分配资源。
 
2、资源名称只需在命名空间内保持唯一即可,因此两个不同的命名空间可以包含同名的资源。虽然大多数类型的资源都与命名空间相关(pod,service,ingress),但仍有一些与它无关,其中之一便是全局且未          被约束于单一命名空间的节点资源。
 
3、namespace 使我们能够将不属于一组的资源分到不重叠的组中。如果有多个用户或用户组正在使用同Kubernetes集群,并且它们都各自管理自己独特的资源集合,那么它们就应该分别使用各自的命名空间
     这样,它们就不用特别担无意中修改或删除其他用户的资源,也无须关心名称冲突。
 
4、除了隔离资源,命名空间还可用于仅允许某些用户访问某些特定资源,甚至限制单个用户可用的计算资源数量

相关操作

列出所有命名空间
kubectl get ns

列出命名空间下的资源(pod,service,ingress)

kubectl get pods  --namespace或-n  kube-system        #如果不指定命名空间,默认就是在default 命名空间内操作,包括其他更改资源的操作,都需要只能命名空间,否则都是在默认命名空间default 下的操作

创建命名空间

方式一

vi ns.yaml
apiVersion vl kind : Namespace metadata : name: custom
-namespace #这是命名空间的名称

kubectl create -f ns.yaml

方式二

kubectl create namespace custom-namespace  

 Tips: 命名空间名字和另外几个不允许包含点号

在已创建的命名空间中创建资源
kubectl create -f kubia-manual.yaml  -n custom-namespace

默认命名空间与当前上下文

在列出描述、修改或删除其他命名空间中的对象时需要给 kubectl 命令传递-- name space (或 -n) 选项如果不指定命名空间,kubect 将在当前上下文中配置的默认命名空间中执行操作 。而当前上下文的命名空间和当前上下文本身都可以通过 kubectl config命令进行更改

命名空间提供的隔离

解释一下命名空间不提供什么一一至少不是开箱即用的 。尽管命名空 将对象分隔到不同的组,只 许你对属于特定命名空间的对象进行操作但实际上命名空间之间并不提供对正在运行的对象的任何隔离
例如,你可能会认为当不同的用户在不同的命名空间中部署pod时,这些pod应该彼 隔离,并且无法通信,但事实却并非如此。命名空间之间是否提供网络隔离取决于 Kubemetes 所使用的网络解决方案。当该解决方案不提供命名空间间的网络隔离时-,如果命名空间中的某个pod知道命名空间 bar po IP 地址,那它就可以将流量( 例如 HTT 请求)发送到另一 pod
 

猜你喜欢

转载自www.cnblogs.com/fanggege/p/12120853.html
k8s