k8s初探(3)-kubernetes ReplicaSet(1)
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情
什么是 ReplicaSet 资源
replicaSet,简称为RS,是一种kubernetes资源,使用它,可使集群中运行相同数量的pod,当其中pod挂掉的时候,kubernetes会负责重建该pod,适合跑一些无状态服务的pod,我们可以抽象其为如下图示:
我们使用replicaSet管理了4个pod,分为为pod A、pod B、pod C以及pod D,当Node2挂掉之后,replicaSet会负责重建该pod,所以,pod会在Node1进行新建pod
ReplicaSet 扩缩容逻辑
我们一般在创建replicaset资源时,会指定一个初始pod个数 并且指定一个标签,这个时候kubernetes会创建这么多个pod,当pod挂了的时候,这个时候replicaSet会创新新的pod,注意,最重要的点,replicaset是根据pod的标签值来判定个数的,其逻辑如下
可能会想,怎么可能当前符合标签的pod数大于设置的阈值,有2种可能
- 我们创建pod,手动分配标签,强行加入
replicaset - 我们手动降低了
replicaset的预定副本值
这里还需要引入一个点,若创建RS后,镜像更新了,此后再扩容pod的时候,使用的是新镜像内容,而还在运行的pod则使用的老镜像,如:
假设在创建RS后,我们更新了镜像内容,此时若Node2崩溃,那么node2上的pod将会被意外停止,此时若kubernetes检查pod数目,发现少了,则会新创建符合标签的pod,而此时,创建的pod镜像为新的,而还在运行的则为老的,如下所示:
尝试使用replicaset
我们先使用explain来获取一下帮助
我们尝试编写一个rs
注意,示例中rs的标签选择器要和pod标签相对应才行,否则会报错,不允许创建
我们使用apply创建后,查看rs
我们查看pod的的信息
使用--show-labels可以打印pod的标签信息
现在我们创建一个新的Pod,并且将label也赋值为app=nginxpdudo
最主要是label
我们再次查看pod信息
我们发现该pod创建不上去
为了模拟这种实验,我们可以先创建单独的pod,再创建 replicaset,我们来看下
我们发现一个很有意思的事情,rs并没有删除掉redis的pod,而是判断现在已经有1个了,所以再创建2个就能达到阈值了,于是乎创建了2个。
我们再来一个实验。我们将rs允许的pod数阈值给调高上去查看一下,我们可以使用kubectl edit 来修改正在运行的rs
总结
我们之所以需要replicaset,是因为我们想运行多个无状态服务程序,并且想让之提供可靠的服务,具体扩缩容的逻辑,是根据pod的标签来决定的,所以说,在我们操作kubernetes中,给pod打标签,这个是至关重要的,尽量做到看名知意,且不会和其他资源冲突,若不确定,可以使用labels工具先行捞取一下在当前namespace中,是有有相匹配的pod。

浙公网安备 33010602011771号