ReplicaSet
一、概述
Kubernetes最核心的功能是编排,编排操作都是依靠控制器对象来完成,高级控制器控制着基础的控制器,基础控制器再去控制Pod,Pod里面再包容器。K8S项目里API对象层级大概就是这样。
而ReplicaSet这个控制器是用来控制副本数量的,每个副本就是Pod。ReplicaSet它用来确保外面有指定数量的Pod副本正在运行。
但是K8S建议使用**Deployment
**控制器,而不是直接使用ReplicaSet,Deployment是一个管理ReplicaSet并提供Pod声明式更新、应用的版本管理以及许多其他功能的控制器。所以Deployment
不是直接管理Pod对象,而是由Deployment
管理ReplicaSet,再由ReplicaSet管理Pod对象
二、工作原理
ReplicaSet是通过标签选择器 (Label-Selector)管理所有与选择器匹配的标签的容器。创建Pod时,它会认为所有Pod是一样的,无状态的,所以在创建顺序上不会有先后之分。如果使用相同的标签选择器创建另一个ReplicaSet
,则之前的ReplicaSet
会认为是它创建了这些Pod
,会触发控制循环里的逻辑删掉多余的Pod
,新的ReplicSet
又会再次创建Pod
。双方的当前状态始终不等于期望状态,这就会引发问题,因此确保ReplicaSet
标签选择器的唯一性这一点很重要。
三、示例
yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: RS-name
labels:
app: RS-App
name: RS-Tier
spec:
replicas: 3 # 告诉k8s需要多少副本
Selector: # 用于匹配Pod的标签选择器
matchLabels:
name: pod-name
template:
metadata:
labels:
name: pod-name
spec: # 与Pod对象的spec定义类似
Containers: