本文已收录在Github,关注我,紧跟本系列专栏文章,咱们下篇再续!
- 🚀 魔都架构师 | 全网30W技术追随者
- 🔧 大厂分布式系统/数据中台实战专家
- 🏆 主导交易系统百万级流量调优 & 车联网平台架构
- 🧠 AIGC应用开发先行者 | 区块链落地实践者
- 🌍 以技术驱动创新,我们的征途是改变世界!
- 👉 实战干货:编程严选网
0 前言
ReplicaSet目的:维护一组在任何时候都处运行态的 Pod 副本的稳定集。 因此,它通常用来保证给定数量的、完全相同的 Pod 的可用性。
1 ReplicaSet 的工作原理

RepicaSet,通过一组字段来定义,包括:
- 一个用来识别可获得的 Pod 的集合的选择算符
- 一个用来标明应该维护的副本个数的数值
- 一个用来指定应该创建新 Pod 以满足副本个数条件时要使用的 Pod 模板
- ...
每个 ReplicaSet 都通过根据需要创建和 删除 Pod 以使得副本个数达到期望值。当 ReplicaSet 需要创建新Pod时,会用所提供的 Pod 模板。
ReplicaSet 通过 Pod 的 metadata.ownerReferences 字段连接到附属 Pod,该字段给出当前对象的属主资源。 ReplicaSet 所获得的 Pod 都在其 ownerReferences 字段中包含了属主 ReplicaSet 的标识信息。正是通过这一连接,ReplicaSet 知道它所维护的 Pod 集合的状态, 并据此计划其操作行为。
ReplicaSet用其选择算符来辨识要获得的 Pod 集合。若某Pod没有 OwnerReference 或者其 OwnerReference 不是一个 控制器,且其匹配到 某 ReplicaSet 的选择算符,则该 Pod 立即被此 ReplicaSet 获得。
2 何时用ReplicaSet
ReplicaSet 确保任何时间都有指定数量的 Pod 副本在运行。 然而,Deployment 是一个更高级的概念,它管理 ReplicaSet,并向 Pod 提供声明式的更新以及许多其他有用的功能。 因此,我们建议使用 Deployment 而不是直接使用 ReplicaSet,除非 你需要自定义更新业务流程或根本不需要更新。
你可能永远无需操作 ReplicaSet 对象:而是用 Deployment,并在 spec 定义你的应用:
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx
labels:
tier: frontend
# see!!!
spec:
replicas: 3
selector:
matchLabels:
tier: frontend
template:
metadata:
name: nginx
labels:
tier: frontend
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80创建该 pod
kubectl create -f rs_nginx.ymlreplicas-set kubectl create -f rs_nginx.yml
replicaset.apps/nginx createdNAME READY STATUS RESTARTS AGE
nginx-5f8ng 1/1 Running 0 8m12s
nginx-7vmzf 1/1 Running 0 8m12s
nginx-vr2gb 1/1 Running 0 8m12s删除第一个 image 后,发现还是三个,说明他自己又补了一个。
$ replicas-set kubectl delete pods nginx-5f8ng
pod "nginx-5f8ng" deleted
$ replicas-set kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-7vmzf 1/1 Running 0 14m
nginx-vr2gb 1/1 Running 0 14m
nginx-wkr-fm 1/1 Running 0 12s所以推荐使用该种方式创建 pod,保证都会起来。
















