K8S环境下验证RocketMQ扩缩容

背景

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

Broker

修改yaml中replicas扩容

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

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

kubectl scale指令扩缩容

c 复制代码
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中这部分代码:

c 复制代码
  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将获得一个新的随机名称。

相关推荐
云道轩7 小时前
llm-d:面向Kubernetes的高性能分布式LLM推理框架
分布式·容器·kubernetes
shepherd11110 小时前
一文带你从入门到实战全面掌握RocketMQ核心概念、架构部署、实践应用和高级特性
架构·消息队列·rocketmq
徐传良10 小时前
03.搭建K8S集群
云原生·容器·kubernetes
Ares-Wang11 小时前
kubernetes》》k8s》》kubectl proxy 命令后面加一个&
云原生·容器·kubernetes
藥瓿亭14 小时前
2024 CKA模拟系统制作 | Step-By-Step | 16、题目搭建-sidecar 代理容器日志
linux·运维·docker·云原生·容器·kubernetes·cka
探索云原生17 小时前
开源 vGPU 方案:HAMi,实现细粒度 GPU 切分
ai·云原生·kubernetes·gpu
斯普信云原生组18 小时前
K8S主机漏洞扫描时检测到kube-服务目标SSL证书已过期漏洞的一种永久性修复方法
https·kubernetes·ssl
异常君2 天前
RocketMQ 延时消息实现原理与源码分析
java·rocketmq
❀͜͡傀儡师2 天前
完成一个可交互的k8s管理平台的页面开发
容器·kubernetes·交互
not coder2 天前
验证负载均衡与弹性伸缩
运维·jmeter·kubernetes·负载均衡