关于kubernetes:k8s初面考点ReplicaSet副本集极限9连击你懂了吗

25次阅读

共计 3474 个字符,预计需要花费 9 分钟才能阅读完成。

k8s 初面考点 ReplicaSet 正本集极限 9 连击你懂了吗?

k8s 考点灵魂拷问 9 连击

考点之简略形容一下 k8s 正本集 ReplicaSet 有什么作用?
考点之为什么 ReplicaSet 将取代 ReplicationController 控制器?
考点之编写 ReplicaSet 的 spec 有什么须要留神的点?
考点之 k8s 集群中创立非模板 Pod 为什么可能会被正本集主动收纳?
考点之线上预警 k8s 集群循环创立、删除 Pod 正本,始终无奈稳固指定指标正本数量?

如果排除了是 Pod 外部产生了故障,从 RS 角度你猜想可能是什么起因?
考点之标签 Pod 和可辨认标签正本集 ReplicaSet 先后创立程序不同,会造成什么影响?
考点之生产环境想要对某个 Pod 排错、数据恢复、故障复盘有什么方法?
考点之缩放 RepliaSet 有哪些算法策略?
考点之如何去影响淘汰策略,设置独自偏好?

囧么肥事 - 胡言乱语

考点之 k8s 正本集 ReplicaSet 有什么作用?

ReplicaSet的次要作用是管制正本数量的,这里的每一个正本就是一个 PodReplicaSet 它是用来确保咱们有指定数量的 Pod 正本正在运行的 Kubernetes 控制器,这里为了不便前面对立把 ReplicaSet 简称 RS。

进一步说什么是管制正本数量?

RS 确保 Pod 以你指定的正本数运行,即如果有容器异样退出,会主动创立新的 Pod 来代替,而异样多进去的容器也会主动回收。

假如 k8s 集群中,你想要运行 10 个 Pod,如果这时候有 4 个 Pod 产生故障,异样退出,那么 RS 会主动创立新的 4 个 Pod 来代替产生故障的 4 个 Pod。

RS尽力保障 零碎以后正在运行的 Pod等于冀望状态 里指定的 Pod 数目。

你想要 10 个,那么 RS 就尽可能保障在任何时候都给你提供 10 个,没有就创立,多了就删除。

总之,ReplicaSet 尽可能确保任何工夫都有指定数量的 Pod 正本在运行。

考点之为什么 ReplicaSet 将取代 ReplicationController 控制器?

ReplicationController控制器(简称为 RC)。

在之前旧版本的 k8s 中,应用的是 RC 控制器实现了 k8s 集群的高可用性,它跟当初的 RS 控制器作用相似,作用是,确保 Pod 以指定的正本数运行。

ReplicaSet 继承了 RC 的性能,并实现了扩大,次要突出扩大是更弱小的 标签抉择能力,即 selector。

进一步说什么是标签抉择能力?

ReplicaSet会通过标签选择器(Label-Selector)治理所有被打上与选择器匹配的标签的容器。

上面通过一段拟人对白,来了解什么是标签抉择:

RS 说:”嘿嘿,我要治理被打上 A,AA,AAA 标签的 Pod,都不许跑,听我指挥,排队站好,🧍🏻立正,向前看!“

Pod-001 说:”我被打上了 BBB 标签,我才不归你管呢!“

Pod-002 说:”我被打上了 AA 标签,快来接管我吧,我筹备好了“

Pod-003 说:”呜呜,我想独立,我不想被 RS 管,我要做一个无拘无束的孩子,然而可怜的是,我被打上了 A 标签,RS 给我管的紧紧的,我失去了自在,我好可怜呀“

ReplicationController本人也有标签抉择能力,然而它只能抉择蕴含某个标签的匹配 Pod;

ReplicaSet 的选择器在根底上减少了容许匹配短少某个标签的 pod,或蕴含特定标签名的 Pod;

举个例子

两组 Pod,env 标签别离是 productiondevel

Pod-A env=production

Pod-B env=devel

RC 只能匹配其中的 Pod- A 或者 Pod- B 中的一个;

RS 则能够同时能够匹配并将它们视为一个大组,无论标签 env 的值具体是什么(env=*), 都能够标签名来进行匹配;

考点之编写 ReplicaSet 的 spec 有什么须要留神的点?

相似其余Kubernetes API 对象,RS 也须要指定 apiVersionkind、和 metadata 字段。

  1. 对于 ReplicaSets 而言,其 kind 始终是 ReplicaSet。
  2. ReplicaSet 对象的名称必须是非法的 DNS 子域名
  3. 属性 .spec.template 是一个 Pod 模版,要求设置标签,留神不要将标签与其余控制器的 标签选择器重叠
  4. 属性.spec.template.spec.restartPolicy 指定模板的重启策略,容许的取值是 Always
  5. 属性 .spec.selector 字段是一个 标签选择器 用来筛选匹配标签的 Pod 归属
  6. 在 ReplicaSet 中,.spec.template.metadata.labels 的值必须与 spec.selector 值 相匹配,否则该配置会被 API 回绝。

考点之 k8s 集群中创立非模板 Pod 为什么可能会被正本集主动收纳?

后面提到了,RS 采纳了最新的标签抉择能力,通过指定 .spec.selector 标签选择器,不仅可依据标签值,甚至连标签名统一都能够进行匹配。

首先如果采纳 Pod 模板创立 Pod,会被指定标签,RS 会依据标签主动接管 Pod

再来看看非模板

非模板创立,其实就是间接创立裸的 Pods。

为什么可能会被正本集 RS 主动接管?

除非在创立裸 Pod 的时候,你确保这些裸的 Pods 并不蕴含可能与你的某个 ReplicaSet 的 .spec.selector 相匹配的标签。

在创立裸 Pods 前,必须齐全排除跟任何 RS 有可能雷同的标签,否则,RS 认为你创立的 Pod 就是要指定给本人接管的。

考点之线上预警 k8s 集群循环创立、删除 Pod 正本,始终无奈稳固指定指标正本数量,排除了是 Pod 外部产生了故障,从 RS 角度你猜想可能是什么起因?

首先了解一下问题,循环创立 Pod 正本?

RS 始终在失常工作,维持 Pod 正本数量,短少就创立,多了就删除。问题来了,始终创立,而后又删除,却不能稳固 Pod 正本数量?

看下这个 循环过程

RS 指定 Pod 正本数量 10 个

以后正本 7 个
RS 检测不够 10 个
RS 开启均衡机制,创立 2 个维持稳固

再检测发现 15 个
RS 开启均衡机制,删除 5 个维持稳固

再检测发现 13 个
RS 开启均衡机制,删除 3 个维持稳固

再检测发现 9 个
RS 开启均衡机制,减少 1 个维持稳固

再检测发现 10 个
无需稳固

再检测发现 8 个...
再检测发现 18 个...

总之,RS 检测正本数量,不是比 10 个多,就是比 10 少,始终难以维持 10 个无效正本

既然排除了是 Pod 外部故障问题,那么从 RS 角度进行可能剖析,能够初步断定是多个 RS 标签选择器规定反复导致的。

剖析初步断定起因

ReplicaSet会通过标签选择器(Label-Selector)治理所有带有与选择器匹配的标签的容器。

创立 Pod 时,它会认为所有Pod 是一样的,是无状态的,所以在创立程序上不会有先后之分。

应用雷同的标签选择器创立多个ReplicaSet,则多个 RS 无奈辨认哪个 Pod 是本人创立的,都会认为是归属于本人治理的 Pod。

例如

第一个 RS-A,指定正本数量 10
标签选择器能够匹配 env=xxx

RS- A 生成 10 个 Pod 标签为 env=xxx
一组 Pod:Pod-1(env=xxx)
Pod-2(env=xxx)
Pod-3(env=xxx)
...
...
Pod-10(env=xxx)


这时候创立了一个 RS-B

第二个 RS-B,指定正本数量 25
标签选择器和 RS-A 雷同
标签选择器能够匹配 env=xxx


因为选择器匹配一样
RS-B 匹配到了 RS- A 创立的 10 个 Pod
RS-B 发现 Pod-x(env=xxx)数量不够 25

RS-B 持续创立额定的 10 个

Pod-11(env=xxx)
Pod-12(env=xxx)
Pod-13(env=xxx)
...
...

此时 RS-A 发现自己匹配的 Pod > 10
它认为是本人创立多了
启动均衡机制

删除超过 10 个的额定 Pod
删除 Pod-Xi(env=xxx)

而 RS-B 发现自己匹配的 Pod < 25
就启动均衡机制
创立 Pod-Xi(env=xxx)



就这样
一个不停的创立
一个不停的删除

最终总是无奈满足稳固数量的 10 和 25

单方的以后状态始终 不等于冀望状态,这就会引发问题 ,因而确保ReplicaSet 标签选择器的唯一性这一点很重要。


本期临时探讨上述 5 点,下期实现上面 4 点

考点之标签 Pod 和可辨认标签正本集 ReplicaSet 先后创立程序不同,会造成什么影响?
考点之生产环境想要对某个 Pod 排错、数据恢复、故障复盘有什么方法?
考点之缩放 RepliaSet 有哪些算法策略?
考点之如何去影响淘汰策略,设置独自偏好?


举荐浏览:【探针配置失误,线上容器利用异样死锁后,kubernetes 集群未及时响应自愈重启容器?】

举荐休闲浏览:【囧么肥事】

正文完
 0