k8s初探(3)-kubernetes ReplicaSet(1)

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情

什么是 ReplicaSet 资源

replicaSet,简称为RS,是一种kubernetes资源,使用它,可使集群中运行相同数量的pod,当其中pod挂掉的时候,kubernetes会负责重建该pod适合跑一些无状态服务的pod,我们可以抽象其为如下图示:

我们使用replicaSet管理了4个pod,分为为pod Apod Bpod 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并没有删除掉redispod,而是判断现在已经有1个了,所以再创建2个就能达到阈值了,于是乎创建了2个。

我们再来一个实验。我们将rs允许的pod数阈值给调高上去查看一下,我们可以使用kubectl edit 来修改正在运行的rs

总结

我们之所以需要replicaset,是因为我们想运行多个无状态服务程序,并且想让之提供可靠的服务,具体扩缩容的逻辑,是根据pod的标签来决定的,所以说,在我们操作kubernetes中,给pod打标签,这个是至关重要的,尽量做到看名知意,且不会和其他资源冲突,若不确定,可以使用labels工具先行捞取一下在当前namespace中,是有有相匹配的pod

posted @ 2022-06-01 16:56  pdudos  阅读(0)  评论(0编辑  收藏  举报  来源