浅析kubernetes的控制器和标签
01 k8s中的常用控制器
之前我们了解了pod是k8s集群中调度的最小单元,pod是由pause容器+应用容器组成的。
在k8s中,经常会出现一种资源对象管理另一种资源对象的情况,我们把这类资源对象称之为"控制器"。
我们简单看看控制器的类型,以及他们的功能,其实每种控制器都有他们的特点,后续我们会逐一分析,现在只需要有个概念即可。
rc控制器
它定义了一个期望的场景,它声明某种pod的副本数量任意时刻都符合某个特定的预期值。例如mysql的一主两从结构,我们期望,任意时刻都有2个从库,如果不够了,就需要扩充一个从库。
它的定义中,需要下面3个关键参数:
1、预期的pod数量
2、pod的标签,也就是一个类型标识
3、创建新pod的pod模板
它的大概结构如下:
对照上面的文字,可以看到rc的基本yaml文件模板。
rc一旦定义并提交到k8s的master,那么controller manager就会巡检当前存活的目标pod,并确保当前存活的pod等于期望的pod,如果多了,则删除,如果少了,则创建。
deployment控制器
它是k8s 1.2版本引入的新概念,这个控制器和rc控制器的相似程度达到了90%,它和rc的不同是它可以随时获取当前pod的"部署进度"。它的yaml文件定义大概如下:
有了deployment之后,使用rc的场景几乎都可以使用deployment来替代。
statefulset控制器
这个控制器也是生成某些pod的期望值,但是它与rc和deployment的不同点在于,它生成的pod是有状态的。
在rc和deployment生成的pod中,我们只需要生成期望值个pod即可,类似1主2从架构中mysql的2个从库一样。他们没有先后顺序、权重的概念。而statefulset控制器控制的pod,生成顺序或者权重存在一定的逻辑关系,例如mysql主从架构中,需要先生成主节点,然后在生成从节点,这个时候,使用statefulset就比较合适。
常用的控制器类型还有一些,这些内容我们下次再详细分享,这里我们知道"控制器"的概念即可。
02 label(标签)的概念
,我们说了k8s中pod的yaml文件中的几个关键字段,今天我们来看另外一个pod的一个属性,就是label。
label的含义是标签,它的格式也是key-value格式的,它可以附加到k8s集群中的某个对象上,包括但不限于pod,node,rc等。资源对象和label的绑定关系可以使一对一,也可以是多对一,不同的label可以对资源进行分组管理。
当我们给某个资源打上标签后,就可以使用标签选择器label selector来选择这个资源进行调度,如下:
上面的例子为我们定义一个pod,它的标签是app=mysql。
然后我们定义一个"控制器",利用控制器中的标签选择器selector,让它选择这个app=mysql的这个pod,并保持这个pod在集群中有2个副本,方法如下:
新版本的selector还可以指定更为详细的筛选条件,它主要借助下面参数:
一个参数是matchlabels,他后面可以跟多个key-value格式的label条件;
另外一个参数是matchexpression,它可以指定一个数组,并结合条件运算,上述例子中表示aaa参数在mysql-slave中,而bbb参数不在mysql-master中的那些pod
如果这两个参数同时出现,则会自动取and,以他们的交集作为最终的筛选条件去筛选pod
可以看到,标签的使用,使得"控制器"选择被控制对象,更加灵活,更加方便了。
以上就是浅析kubernetes的控制器和标签的详细内容,更多关于kubernetes 控制器和标签的资料请关注其它相关文章!
上一篇: 大庆11月好玩的地方大全
推荐阅读