K8S環(huán)境下如何驗(yàn)證RocketMQ擴(kuò)縮容
背景
想驗(yàn)證一些K8S環(huán)境下RocketMQ擴(kuò)縮容時(shí)的表現(xiàn)和特性,比如序號(hào)是否改變?命名規(guī)則是怎樣的?刪除和新增節(jié)點(diǎn)后序號(hào)怎么變化?
Broker
修改yaml中replicas擴(kuò)容
delete刪除節(jié)點(diǎn),觀察能否縮容,以及序號(hào)的變化
其中,節(jié)點(diǎn)被重建,且序號(hào)保持原序號(hào)。
kubectl scale指令擴(kuò)縮容
kubectl scale 命令,它是 kubectl set 命令的一個(gè)特例,專門用于修改資源的副本數(shù)量。
kubectl scale statefulsets rocketmq-broker-master --replicas=1 -n rocketmq
- 從2個(gè)master節(jié)點(diǎn)縮容為1個(gè):
- 從2個(gè)master節(jié)點(diǎn)擴(kuò)容為5個(gè):
其中,可以看到擴(kuò)容的過程是依次擴(kuò)容,而非同時(shí)擴(kuò)。
運(yùn)行delete yaml指令后,所有broker節(jié)點(diǎn)均被刪除
POD name序號(hào)變化和重啟保持不變的原理
StatefulSet控制器創(chuàng)建的Pod副本會(huì)自動(dòng)加上序號(hào)后綴。Pod的序號(hào)是按照它們被創(chuàng)建的順序分配的,從0開始遞增。StatefulSet特性摘抄:
- 順序性:Pod的序號(hào)是按照它們被創(chuàng)建的順序分配的,從0開始遞增。 唯一性:每個(gè)Pod的名稱在其整個(gè)生命周期中都是唯一的。
- 穩(wěn)定性:StatefulSet確保Pod的序號(hào)在Pod重新調(diào)度或重建后保持不變,這是通過StatefulSet的Pod管理策略(OrderedReady或Parallel)來實(shí)現(xiàn)的。
一旦apply StatefulSet.yaml后,手動(dòng)delete掉POD,POD會(huì)被重建。想徹底刪除節(jié)點(diǎn)只能通過delete yaml的方式。
brokerName通過configmap從POD name中取序號(hào)后拼接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的-尾部序號(hào)作為broker_name_seq,與broker-g拼接作為brokerName。
(去除了yaml中共享存儲(chǔ)的pvc掛載,由于測試需要手動(dòng)構(gòu)造本地相同目錄的PVC,無法使用SC動(dòng)態(tài)創(chuàng)建,會(huì)影響自動(dòng)擴(kuò)縮容。)
Proxy
proxy節(jié)點(diǎn)從2到4擴(kuò)容
proxy由Deployment控制器創(chuàng)建,是無狀態(tài)的。其創(chuàng)建的pod名稱是沒有序號(hào)連續(xù)的。
通過delete刪除后也會(huì)重建新的pod name
proxy節(jié)點(diǎn)縮容,從4到2,發(fā)現(xiàn)雖然POD名稱是隨機(jī)的,但縮容也會(huì)按照新創(chuàng)建先縮容:
Deployment Pod name命名規(guī)則原理:
- 隨機(jī)名稱:每個(gè)Pod的名稱是由Kubernetes隨機(jī)生成的,通常是一個(gè)五字符的隨機(jī)字符串,這些字符可能是字母和數(shù)字的組合。
- 名稱唯一性:盡管名稱是隨機(jī)生成的,但Kubernetes確保在同一個(gè)命名空間內(nèi)每個(gè)Pod的名稱是唯一的。
- 標(biāo)簽一致性:盡管Pod名稱是隨機(jī)的,但Pod的標(biāo)簽(labels)是一致的,并且與Deployment的標(biāo)簽選擇器(selector)相匹配。這意味著你可以通過Deployment的標(biāo)簽選擇器來管理和引用相關(guān)的Pod。
- 重啟和重建:如果Pod由于任何原因(例如,縮放、更新、節(jié)點(diǎn)故障等)被重啟或重建,新創(chuàng)建的Pod將獲得一個(gè)新的隨機(jī)名稱。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于Spring實(shí)現(xiàn)零重啟自由編排任務(wù)的定時(shí)管理器
我們發(fā)現(xiàn),我們使用Spring自帶的定時(shí)任務(wù)如果要有修改,那么就要修改代碼,然后重啟項(xiàng)目,所以本文就帶大家實(shí)現(xiàn)一個(gè)零重啟自由編排任務(wù)的定時(shí)管理器吧2023-07-07java中給實(shí)體對(duì)象屬性的空值賦默認(rèn)值
這篇文章主要介紹了java中給實(shí)體對(duì)象屬性的空值賦默認(rèn)值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03Java開發(fā)之普通web項(xiàng)目轉(zhuǎn)為Maven項(xiàng)目的方法
這篇文章主要給大家介紹了關(guān)于Java開發(fā)之普通web項(xiàng)目轉(zhuǎn)為Maven項(xiàng)目的相關(guān)資料,文中通過圖文將轉(zhuǎn)換的方法步驟介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12Java使用OCR技術(shù)識(shí)別驗(yàn)證碼實(shí)現(xiàn)自動(dòng)化登陸方法
在本篇文章里小編給大家分享的是關(guān)于Java 如何使用 OCR 技術(shù)識(shí)別驗(yàn)證碼實(shí)現(xiàn)自動(dòng)化登陸的相關(guān)知識(shí)點(diǎn)內(nèi)容,需要的朋友們學(xué)習(xí)下。2019-08-08在Java中動(dòng)態(tài)執(zhí)行字符串代碼的方法小結(jié)
在Java編程中,靜態(tài)編譯的特性通常不允許我們直接執(zhí)行運(yùn)行時(shí)生成的代碼,然而,有時(shí)我們需要?jiǎng)討B(tài)地生成并執(zhí)行代碼片段,本文將詳細(xì)介紹如何在Java中運(yùn)行一段字符串代碼,并提供詳細(xì)的代碼案例和運(yùn)行結(jié)果,需要的朋友可以參考下2024-08-08MyBatis中如何接收String類型的參數(shù)實(shí)現(xiàn)
這篇文章主要介紹了MyBatis中如何接收String類型的參數(shù)實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02java ConcurrentHashMap分段加鎖提高并發(fā)效率
這篇文章主要為大家介紹了java ConcurrentHashMap分段加鎖提高并發(fā)效率,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12SpringBoot統(tǒng)計(jì)接口請求耗時(shí)的方法詳解
接口請求時(shí)間的快慢就代表著獲取到對(duì)應(yīng)的數(shù)據(jù)的快慢,也代表著用戶請求頁面數(shù)據(jù)的快慢,常??梢越柚涌谡埱罂炻M(jìn)行相應(yīng)的優(yōu)化,本文給大家介紹了SpringBoot統(tǒng)計(jì)接口請求耗時(shí)的方法,需要的朋友可以參考下2024-12-12