K8S ReplicaSet 原理 & 示例 & HPA扩容

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
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值