K8s之ReplicaSet学习笔记

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: K8s之ReplicaSet学习笔记

replicaset

1.Replicaset概念

Kubernetes中的ReplicaSet主要的作用是维持一组Pod副本的运行,它的主要作用就是保证一定数量的 Pod 能够在集群中正常运行,它会持续监听这些 Pod 的运行状态,在 Pod 发生故障时重启pod,pod数量减少时重新运行新的 Pod 副本,因此,它通常被用来保证特定数量相同的Pods的可用性。

2.replicaset怎么工作

ReplicaSet由字段定义,包括一个选择器,该选择器指定如何找到它所管理的Pod、维护多少个pod,以及pod的模板。ReplicaSet通过创建和删除Pod来满足期望的pod数量。当ReplicaSet需要创建新的Pod时,它将使用其Pod模板。ReplicaSet通过Pods的metadata.ownerReferences字段链接到其Pod,该字段指定当前对象所拥有的资源。由ReplicaSet获取的所有Pod在其ownerReferences字段中都有其自己的ReplicaSet的标识信息。通过此链接,ReplicaSet可以知道它正在维护的Pod的状态,并据此计划。

ReplicaSet通过使用其选择器标识要获取的新Pod。如果存在没有OwnerReference的Pod或OwnerReference不是控制器,并且它与ReplicaSet的选择器匹配,它将由所述的ReplicaSet立即获取

3.什么时候使用replicaset

replicaSet确保在任何给定时间都运行指定数量的Pod副本。但是,Deployment是一个高级概念,用于管理副本集,并提供对Pod的声明性更新以及许多其他有用的功能。因此,除非你需要自定义更新编排或根本不需要更新,否则我们使用Deployment而不是直接使用replicaset。这实际上意味着你可能永远不需要操纵ReplicaSet对象:改用Deployment,然后在spec部分中定义你的应用程序。

例子:

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: frontend
  labels:
    app: guestbook
    tire: frontend
spec:
  replicas: 3
  selector:
    matchLabels:
      app: guestbook
      tire: frontend
  template:
    metadata:
      labels:
         app: guestbook
         tire: frontend
    spec:
      containers:
      - name: php-redis
        image: yecc/gcr.io-google_samples-gb-frontend:v3

编写replicaset资源清单文件

与所有其他 Kubernetes API对象一样,ReplicaSet需要apiVersion、kind、和metadata,ReplicaSet 也需要.spec部分。对于replicaset副本集来说,kind只能是replicaset,在kubernetes1.9+之后,apiversion默认的版本是apps/v1,apps/v1beta2已经被废弃了。

Pod template

.spec.template是一个Pod模板,还需要在其上放置标签。在我们的replicaset.yaml示例中,我们有一个标签:tier: frontend。注意不要与其他控制器的选择器重叠。对于 重启策略,.spec.template.spec.restartPolicy 唯一允许的取值是 Always,这也是默认值.

pod selector

.spec.selector字段是标签选择器。可以选择它所匹配的拥有相同标签的pod。在我们的 replicaset.yaml示例中,选择器为:

matchLabels:

tier: frontend

在ReplicaSet中,.spec.template.metadata.labels必须匹配spec.selector,否则将被API拒绝。

注意:对于指定相同.spec.selector但不同的.spec.template.metadata.labels和.spec.template.spec字段的2个replicaset,每个replicaset都会忽略另一个replicaset创建的Pod。

Replicas

通过设置 .spec.replicas 您可以指定要同时运行多少个 Pod。 在任何时间运行的 Pod 数量可能高于或低于 .spec.replicas 指定的数量,例如在副本刚刚被增加或减少后、或者 Pod 正在被优雅地关闭、以及替换提前开始。

如果您没有指定 .spec.replicas, 那么默认值为 1

删除

如果我们在 Kubernetes 集群中删除一个 ReplicaSet 持有的 Pod,那么控制器会重新同步 ReplicaSet 的状态并启动一个新的 Pod,但是如果删除集群中的 ReplicaSet 所有相关的 Pod 也都会被删除:

kubectl delete rs example

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
4月前
|
Kubernetes Docker 容器
Kubernetes学习笔记-Part.06 Docker安装
Part.01 Kubernets与docker Part.02 Docker版本 Part.03 Kubernetes原理 Part.04 资源规划 Part.05 基础环境准备 Part.06 Docker安装 Part.07 Harbor搭建 Part.08 K8s环境安装 Part.09 K8s集群构建 Part.10 容器回退
56 1
|
21天前
|
Prometheus Kubernetes 网络协议
k8s学习笔记之CoreDNS
k8s学习笔记之CoreDNS
|
22天前
|
存储 Kubernetes 数据安全/隐私保护
k8s学习笔记之ConfigMap和Secret
k8s学习笔记之ConfigMap和Secret
|
21天前
|
Kubernetes jenkins 持续交付
jenkins学习笔记之二十一:k8s部署jenkins及动态slave
jenkins学习笔记之二十一:k8s部署jenkins及动态slave
|
22天前
|
存储 运维 Kubernetes
k8s学习笔记之StorageClass+NFS
k8s学习笔记之StorageClass+NFS
|
27天前
|
Kubernetes Perl 容器
在K8S中,replicaset 和deploy有何区别?
在K8S中,replicaset 和deploy有何区别?
|
1月前
|
运维 Kubernetes 容器
在K8S中,replicaset和deploy的区别?
在K8S中,replicaset和deploy的区别?
|
4月前
|
运维 Kubernetes Linux
Kubernetes详解(二十一)——ReplicaSet控制器实战应用
Kubernetes详解(二十一)——ReplicaSet控制器实战应用
103 2
|
4月前
|
弹性计算 运维 Kubernetes
Kubernetes详解(二十)——ReplicaSet控制器
Kubernetes详解(二十)——ReplicaSet控制器
51 1
|
4月前
|
Kubernetes 调度 Docker
Ubantu docker学习笔记(十一)k8s基本操作
Ubantu docker学习笔记(十一)k8s基本操作