本文已收录在Github关注我,紧跟本系列专栏文章,咱们下篇再续!

  • 🚀 魔都架构师 | 全网30W技术追随者
  • 🔧 大厂分布式系统/数据中台实战专家
  • 🏆 主导交易系统百万级流量调优 & 车联网平台架构
  • 🧠 AIGC应用开发先行者 | 区块链落地实践者
  • 🌍 以技术驱动创新,我们的征途是改变世界!
  • 👉 实战干货:编程严选网

0 前言

ReplicaSet目的:维护一组在任何时候都处运行态的 Pod 副本的稳定集。 因此,它通常用来保证给定数量的、完全相同的 Pod 的可用性。

1 ReplicaSet 的工作原理

云原生容器实战(三)-Kubernetes工作负载资源PodReplicaSet_自定义

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.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,保证都会起来。