K8S ReplicaSet 原理 & 示例 & HPA扩容

K8SReplicaSet用于保持一组Pod副本的稳定运行,确保可用性。它与ReplicationController类似但支持更灵活的标签选择器。通常通过Deployments管理,而非直接使用。ReplicaSet通过创建或删除Pod维持指定副本数量,并可配合HorizontalPodAutoscaler实现自动扩容,基于资源利用率动态调整Pod数量。
摘要由CSDN通过智能技术生成

K8S ReplicaSet 基本使用

K8S ReplicaSet 对象的作用是在任意时间点保持一组稳定的副本Pod运行,因此,它通常用于保证指定数量的相同Pod的可用性。乍一看, ReplicaSet 对象的定义跟 Replication Controller 并没有什么区别,都是维护Pod运行的副本数量。但是 ReplicaSet 和 Replication Controller唯一的区别是:RS支持标签选择器(后续参数配置中有提到).

工作原理

K8S ReplicaSe使用配置文件进行对象定义,包括一个选择器,以及关联pod的副本数量,指示它应该维护多少pod副本。指定一个pod模板,根据Pod模板创建的新pod的对象,以满足副本数量标准。然后,ReplicaSet通过根据需要创建和删除Pod来实现其目的,以达到所需的数量。当ReplicaSet需要创建新的Pod时,它使用其Pod模板。

应用场景

应用场景

ReplicaSet确保在任何给定时间运行指定数量的pod副本。然而Deployments是一个更高级的概念,它管理复制集,并为Pods提供声明性更新以及许多其他有用的功能。因此,我们建议使用Deployments而不是直接使用ReplicaSet,除非您需要自定义更新编排或根本不需要更新。这实际上意味着您可能永远不需要操作ReplicaSet对象:请改用Deployments对象.

演示环境

  • OS 信息

    在这里插入图片描述

  • minikube 版本信息

    在这里插入图片描述

  • Kubectl 版本

    在这里插入图片描述

  • Dokcer 版本

    在这里插入图片描述

  • 启动minikube

    minikube start --driver=docker
    

演示示例

  • 创建配置文件

    # 创建 frontend.yaml 文件,内容如下
    apiVersion: apps/v1
    kind: ReplicaSet
    metadata:
      name: frontend
      labels:
        app: guestbook
        tier: frontend
    spec:
      # modify replicas according to your case
      replicas: 3
      selector:
        matchLabels:
          tier: frontend
      template:
        metadata:
          labels:
            tier: frontend
        spec:
          containers:
          - name: php-redis
            image: gcr.io/google_samples/gb-frontend:v3
    
  • 创建集群

    kubectl apply -f frontend.yaml
    

    在这里插入图片描述

  • 查看集群状态

    kubectl get rs
    

    在这里插入图片描述

  • 查看集群详细状态

    kubectl describe rs/frontend
    

    在这里插入图片描述

  • 检查Pod示例信息

    kubectl get pods | grep frontend
    

    在这里插入图片描述

  • 验证Pod所属RS信息 - 开发者还可以使用以上Pod实例验证引用的ReplicaSet信息

    # 注意 frontend-pts5p 实例名称 需要跟上面三个Pod节点名称一致
    kubectl get pods frontend-pts5p -o yaml
    

    在这里插入图片描述

配置参数

  • 跟其它K8S 对象配置一样,创建ReplicaSet对象时,配置文件必须配置apiVersion、kind和 metadata 字段。对于ReplicaSetd对象,kind配置值必须为 ReplicaSet。

    当K8S为ReplicaSet创建新的Pod时,Pod实例的命名是以ReplicaSet对象定义中.metadata.name的值为基础,后面跟上随机字符串。

  • Pod Template

    .spec.template 部分定义了 Pod模板信息,该部分需要定义labels标签信息。在frontend.yaml示例中,定义了 label: tier 标签的值为:frontend。对于Pod 模板中重启策略字段 .spec.template.spec.restartPolicy,唯一允许的值为Always,如果不写,则默认为Always。

  • Pod Selector

    配置文件中的 .spec.selector 为标签选择器,该选择器用于选择匹配潜在的Pod,在frontend.yaml示例中,选择器是:

    matchLabels:
      tier: frontend
    

    在 ReplicaSet 对象定义中,.spec.template.metadata.labels 必须跟 spec.selector匹配,否则将拒绝创建对象

  • RC 副本

    用户可以通过设置.spec.replicas参数,来控制pod的运行数量。可以简单理解为该参数控制pod运行实例的节点数,该参数非常重要,如果未指定.spec.creplica,则默认值为1。

RS扩容

ReplicaSet 可以很轻松的实现HA自动扩容伸缩,动态调整RS中的Pod副本的运行数量。K8S支持两种扩容方式

配置扩容

  • 创建配置文件

    # vi ha.yaml
    apiVersion: autoscaling/v1
    kind: HorizontalPodAutoscaler
    metadata:
      name: frontend-scaler
    spec:
      scaleTargetRef:
        kind: ReplicaSet
        name: frontend
      minReplicas: 3
      maxReplicas: 10
      targetCPUUtilizationPercentage: 50
    

    表示当检测到cpu资源利用率超过50%的时候,动态的添加Pod,以满足突发的业务,最大增加到10个Pod实例

  • 创建HPA扩容对象

    kubectl apply -f ha.yaml
    

    在这里插入图片描述

  • 查看HPA对象

    kubectl get hpa
    

    在这里插入图片描述

脚本扩容

此外kubectl命令行工具还提供相关脚本进行扩容,命令如下

kubectl autoscale rs frontend --max=10 --min=3 --cpu-percent=50
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值