ReplicationController,ReplicationSet和DaemonSet的区别

1.ReplicationController

用于控制和管理Pod资源,通常由label selector,replica count和pod temple三部分组成。

replica count:pod个数。ReplicationController总是会保证集群中存在replica count个pod。若实际pod数少于replica coun那么就会新建pod使其数量达到replica count,若实际pod数多于replica count那么就会删除多余的pod数量。在实际情况中,pod数少于replica count一般是因为pod因某种意外而终止运行,pod数多于replica count一般是因为有人手动创建了某个pod。

label selector:用于确定ReplicationController的作用域,即确定哪些pod是由ReplicationController监管控制的。若一个pod的label与label selector的内容不一致,那么ReplicationController就不会监管该pod。即该pod并不会计入replica count中。若修改了一个pod的label,会使得该pod脱离rc监管范围,并让replica count数减1,这会让rc自动地再创建一个新的pod。

pod temple:顾名思义,rc使用temple新建pod。模板中的标签名显然应该与label selector中的内容一致,否则rc使用模板所创建出来的pod并不会计入replica count中,这会让rc无休止的不停创建pod。

1.1 ReplicationController相关命令

1.kubectl create -f xxxx.yml//通过yaml文件创建新的rc。

2.kubectl delete rc xxx//删除掉某个rc,删掉某个rc会使得所有由该rc监控的pod都被级联删除掉。若想要保持pod不被删除掉,应该使用–cascade = false来保持pod的运行。当想要用ReplicationSet替换掉ReplicationController时,可以这样做。

3.kubectl label pod xxxx app=foo --overwrite//修改xxxpod的标签名,使其脱离rc监管

4.kubectl scale rc xxxx --replicas = 10//修改replica count值

2.ReplicationSet与ReplicationController

RS和RC区别仅仅在于label selector上,RS提供了语义更强的选择器,这使得RS能够更快捷的选择pod。

Q:为什么要用RS?
A:实际工程中,一个pod可能会存在一个以上的标签,但RC的选择器只选择出单个。在rc中为了能够选出所有有env=xxx标签的pod,需要一个一个单独的在RC的yml文件中声明。在RS中则可以使用env = *的方式去选择出所有含有env标签名的pod。

//一个rs的selector实例
selectot:
	matchExpressions:
	-key:app
	operator:In
	values:
		-kubia
		-xxxx

operator详解
IN:Label的值必须与values中的某个值相等
NotIN:顾名思义,label值不在values集合中
Exists:pod的lable应包含指定key,key的内容不关心,即env=*
DoesNotExist:顾名思义。

3.DaemonSet

RC和RS仅仅只是保证集群中存在有replica count数量的pod,但具体哪个节点上运行几个pod并不关心,甚至某一个节点或许一个pod也不会运行。而DaemonSet就是确保集群中每一个节点都至少会运行一个pod。与RC和RS不同的是,DaemonSet多了一个nodeSelector,这用于指定在哪些节点上,运行pod。

kubectl label node xxxx disk= ssd//为xxxx节点打上disk= ssd的label。

//一个ds的node selector实例
selectot:
	matchExpressions:
	disk:ssd

这样DS就能保证所有被打上disk = ssd的节点上至少运行一个pod。

你可能感兴趣的:(ReplicationController,ReplicationSet和DaemonSet的区别)