本文已收录在Github,关注我,紧跟本系列专栏文章,咱们下篇再续!
ReplicaSet目的:维护一组在任何时候都处运行态的 Pod 副本的稳定集。 因此,它通常用来保证给定数量的、完全相同的 Pod 的可用性。
RepicaSet,通过一组字段来定义,包括:
每个 ReplicaSet 都通过根据需要创建和 删除 Pod 以使得副本个数达到期望值。当 ReplicaSet 需要创建新Pod时,会用所提供的 Pod 模板。
ReplicaSet 通过 Pod 的 metadata.ownerReferences 字段连接到附属 Pod,该字段给出当前对象的属主资源。 ReplicaSet 所获得的 Pod 都在其 ownerReferences 字段中包含了属主 ReplicaSet 的标识信息。正是通过这一连接,ReplicaSet 知道它所维护的 Pod 集合的状态, 并据此计划其操作行为。
ReplicaSet用其选择算符来辨识要获得的 Pod 集合。若某Pod没有 OwnerReference 或者其 OwnerReference 不是一个 控制器,且其匹配到 某 ReplicaSet 的选择算符,则该 Pod 立即被此 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.yml
replicas-set kubectl create -f rs_nginx.yml
replicaset.apps/nginx created
NAME 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,保证都会起来。