K8S环境下如何验证RocketMQ扩缩容

 更新时间:2025年01月02日 09:05:50   作者:莱特昂  
文章主要内容验证了K8S环境下RocketMQ的扩缩容特性,包括序号变化、命名规则以及节点重建后序号保持不变,StatefulSet确保Pod序号在重建后保持稳定,而Deployment创建的Pod名称是随机的

背景

想验证一些K8S环境下RocketMQ扩缩容时的表现和特性,比如序号是否改变?命名规则是怎样的?删除和新增节点后序号怎么变化?

Broker

修改yaml中replicas扩容

delete删除节点,观察能否缩容,以及序号的变化

其中,节点被重建,且序号保持原序号。

kubectl scale指令扩缩容

kubectl scale 命令,它是 kubectl set 命令的一个特例,专门用于修改资源的副本数量。

kubectl scale statefulsets rocketmq-broker-master --replicas=1 -n rocketmq
  • 从2个master节点缩容为1个:

  • 从2个master节点扩容为5个:

其中,可以看到扩容的过程是依次扩容,而非同时扩。

运行delete yaml指令后,所有broker节点均被删除

POD name序号变化和重启保持不变的原理

StatefulSet控制器创建的Pod副本会自动加上序号后缀。Pod的序号是按照它们被创建的顺序分配的,从0开始递增。StatefulSet特性摘抄:

  • 顺序性:Pod的序号是按照它们被创建的顺序分配的,从0开始递增。 唯一性:每个Pod的名称在其整个生命周期中都是唯一的。
  • 稳定性:StatefulSet确保Pod的序号在Pod重新调度或重建后保持不变,这是通过StatefulSet的Pod管理策略(OrderedReady或Parallel)来实现的。

一旦apply StatefulSet.yaml后,手动delete掉POD,POD会被重建。想彻底删除节点只能通过delete yaml的方式。

brokerName通过configmap从POD name中取序号后拼接broker-g。

configmap中这部分代码:

  broker_name_seq=${HOSTNAME##*-}
  if [ -n "$MY_POD_NAME" ]; then
    broker_name_seq=${MY_POD_NAME##*-}
  fi
  update_broker_conf "brokerName" "broker-g${broker_name_seq}"

其中,取POD的-尾部序号作为broker_name_seq,与broker-g拼接作为brokerName。

(去除了yaml中共享存储的pvc挂载,由于测试需要手动构造本地相同目录的PVC,无法使用SC动态创建,会影响自动扩缩容。)

Proxy

proxy节点从2到4扩容

proxy由Deployment控制器创建,是无状态的。其创建的pod名称是没有序号连续的。

通过delete删除后也会重建新的pod name

proxy节点缩容,从4到2,发现虽然POD名称是随机的,但缩容也会按照新创建先缩容:

Deployment Pod name命名规则原理:

  • 随机名称:每个Pod的名称是由Kubernetes随机生成的,通常是一个五字符的随机字符串,这些字符可能是字母和数字的组合。
  • 名称唯一性:尽管名称是随机生成的,但Kubernetes确保在同一个命名空间内每个Pod的名称是唯一的。
  • 标签一致性:尽管Pod名称是随机的,但Pod的标签(labels)是一致的,并且与Deployment的标签选择器(selector)相匹配。这意味着你可以通过Deployment的标签选择器来管理和引用相关的Pod。
  • 重启和重建:如果Pod由于任何原因(例如,缩放、更新、节点故障等)被重启或重建,新创建的Pod将获得一个新的随机名称。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 基于Spring实现零重启自由编排任务的定时管理器

    基于Spring实现零重启自由编排任务的定时管理器

    我们发现,我们使用Spring自带的定时任务如果要有修改,那么就要修改代码,然后重启项目,所以本文就带大家实现一个零重启自由编排任务的定时管理器吧
    2023-07-07
  • java中给实体对象属性的空值赋默认值

    java中给实体对象属性的空值赋默认值

    这篇文章主要介绍了java中给实体对象属性的空值赋默认值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java开发之普通web项目转为Maven项目的方法

    Java开发之普通web项目转为Maven项目的方法

    这篇文章主要给大家介绍了关于Java开发之普通web项目转为Maven项目的相关资料,文中通过图文将转换的方法步骤介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-12-12
  • Java使用OCR技术识别验证码实现自动化登陆方法

    Java使用OCR技术识别验证码实现自动化登陆方法

    在本篇文章里小编给大家分享的是关于Java 如何使用 OCR 技术识别验证码实现自动化登陆的相关知识点内容,需要的朋友们学习下。
    2019-08-08
  • Spring通过配置文件管理Bean对象的方法

    Spring通过配置文件管理Bean对象的方法

    这篇文章主要介绍了Spring通过配置文件管理Bean对象的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • Java 并发编程的可见性、有序性和原子性

    Java 并发编程的可见性、有序性和原子性

    这篇文章主要介绍了Java 并发编程的可见性、有序性和原子性的相关资料,帮助大家更好的理解和学习Java并发编程,感兴趣的朋友可以了解下。
    2020-11-11
  • 在Java中动态执行字符串代码的方法小结

    在Java中动态执行字符串代码的方法小结

    在Java编程中,静态编译的特性通常不允许我们直接执行运行时生成的代码,然而,有时我们需要动态地生成并执行代码片段,本文将详细介绍如何在Java中运行一段字符串代码,并提供详细的代码案例和运行结果,需要的朋友可以参考下
    2024-08-08
  • MyBatis中如何接收String类型的参数实现

    MyBatis中如何接收String类型的参数实现

    这篇文章主要介绍了MyBatis中如何接收String类型的参数实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • java ConcurrentHashMap分段加锁提高并发效率

    java ConcurrentHashMap分段加锁提高并发效率

    这篇文章主要为大家介绍了java ConcurrentHashMap分段加锁提高并发效率,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • SpringBoot统计接口请求耗时的方法详解

    SpringBoot统计接口请求耗时的方法详解

    接口请求时间的快慢就代表着获取到对应的数据的快慢,也代表着用户请求页面数据的快慢,常常可以借助接口请求快慢进行相应的优化,本文给大家介绍了SpringBoot统计接口请求耗时的方法,需要的朋友可以参考下
    2024-12-12

最新评论