文章目录
- Namespace
- Pod
- Label
- Pod控制器
- Service
Namespace
Namespace是kubernetes系统中的一种非常重要资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。
可以通过kubernetes的授权机制,将不同的namespace交给不同租户进行管理,这样就实现了多租户的资源隔离。此时还能结合kubernetes的资源配额机制,限定不同租户能占用的资源,例如CPU使用量、内存使用量等等,来实现租户可用资源的管理。
所有未指定Namespace的对象都会被分配在default命名空间
Pod
我们删除Pod成功,但是再查询,发现又新产生了一个 ,这是因为当前Pod是由Pod控制器创建的,控制器会监控Pod状况,一旦发现Pod死亡,会立即重建,此时要想删除Pod,必须删除Pod控制器
kubectl无法直接操作pod,我们都是去操作pod控制器的
每个pod都会分配一个单独的pod ip,pod删除之后。控制器去重建ip会发生变化,Pod IP 仅仅是集群内可见的虚拟IP,外部无法访问
Label
Label是kubernetes系统中的一个重要概念。它的作用就是在资源上添加标识,用来对它们进行区分和选择。
一个资源对象可以定义任意数量的Label ,同一个Label也可以被添加到任意数量的资源对象上去
跟命令空间类似,Namespace>Label
标签定义完毕之后,可以使用Label Selector用于查询和筛选拥有某些标签的资源对象
当前有两种Label Selector:
基于等式的Label Selector
name = slave: 选择所有包含Label中key="name"且value="slave"的对象
env != production: 选择所有包括Label中的key="env"且value不等于"production"的对象
基于集合的Label Selector
name in (master, slave): 选择所有包含Label中的key="name"且value="master"或"slave"的对象
name not in (frontend): 选择所有包含Label中的key="name"且value不等于"frontend"的对象
标签的选择条件可以使用多个,此时将多个Label Selector进行组合,使用逗号","进行分隔即可。例如:
name=slave,env!=production
name not in (frontend),env!=production
pod有个默认标签 run,表明这个pod是属于那个pod控制器的
控制器实际上就是通过标签来控制pod的
Pod控制器
删除pod控制器,会删除下面所有的pod
Service
Service可以看作是一组同类Pod对外的访问接口。借助Service,应用可以方便地实现服务发现和负载均衡。可以解决pod集群外无法访问的问题。
Service可以直接和控制器关联,也可以和标签关联,进而控制pod