精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Pulsar升級自動化:一鍵搞定集群升級與測試

運維
安裝命令非常類似于 Helm,也是直接使用 helm 的 value.yaml 進行安裝;只是在安裝成功后(等待所有的 Pod 都處于 Running 狀態)會再觸發 test-case 測試,也就是請求一個 endpoint。

背景

由于我在公司內部負責維護 Pulsar,需要時不時的升級 Pulsar 版本從而和社區保持一致。

而每次升級過程都需要做相同的步驟:

  • 安裝一個新版本的集群
  • 觸發功能性測試
  • 觸發性能測試
  • 查看監控是否正常
  • 應用有無異常日志
  • 流量是否正常
  • 各個組件的內存占用是否正常
  • 寫入延遲是否正常

命令行工具

以上的流程步驟最好是全部一鍵完成,我們只需要人工檢測下監控是否正常即可。

于是我便寫了一個命令行工具,執行流程如下:

pulsar-upgrade-cli -h                                                                                                  ok | at 10:33:18 
A cli app for upgrading Pulsar

Usage:
  pulsar-upgrade-cli [command]

Available Commands:
  completion  Generate the autocompletion script for the specified shell
  help        Help about any command
  install     install a target version
  scale       scale statefulSet of the cluster

Flags:
      --burst-limit int                 client-side default throttling limit (default 100)
      --debug                           enable verbose output
  -h, --help                            help for pulsar-upgrade-cli
      --kube-apiserver string           the address and the port for the Kubernetes API server
      --kube-as-group stringArray       group to impersonate for the operation, this flag can be repeated to specify multiple groups.
      --kube-as-user string             username to impersonate for the operation

真實使用的 example 如下:

pulsar-upgrade-cli install \                                                   
        --values ./charts/pulsar/values.yaml \
        --set namespace=pulsar-test \
        --set initialize=true \
        --debug \
        --test-case-schema=http \
        --test-case-host=127.0.0.1 \
        --test-case-port=9999 \
    pulsar-test ./charts/pulsar -n pulsar-test

它的安裝命令非常類似于 helm,也是直接使用 helm 的 value.yaml 進行安裝;只是在安裝成功后(等待所有的 Pod 都處于 Running 狀態)會再觸發 test-case 測試,也就是請求一個 endpoint。

這個 endpoint 會在內部處理所有的功能測試和性能測試,具體細節就在后文分析。

同時還提供了一個 scale(擴、縮容) 命令,可以用修改集群規模:

# 縮容集群規模為0
./pulsar-upgrade-cli scale --replicase 0 -n pulsar-test
# 縮容為最小集群
./pulsar-upgrade-cli scale --replicase 1 -n pulsar-test
# 恢復為最滿集群
./pulsar-upgrade-cli scale --replicase 2 -n pulsar-test

這個需求是因為我們的 Pulsar 測試集群部署在了一個 servless 的 kubernetes 集群里,它是按照使用量收費的,所以在我不需要的使用的時候可以通過這個命令將所有的副本數量修改為 0,從而減少使用成本。

當只需要做簡單的功能測試時便回將集群修改為最小集群,將副本數修改為只可以提供服務即可。

而當需要做性能測試時就需要將集群修改為最高配置。

這樣可以避免每次都安裝新集群,同時也可以有效的減少測試成本。

實現原理

require (  
    github.com/spf13/cobra v1.6.1  
    github.com/spf13/pflag v1.0.5   
    helm.sh/helm/v3 v3.10.2
)

這個命令行工具本質上是參考了 helm 的命令行實現的,所有主要也是依賴了 helm 和 cobra。

下面以最主要的安裝命令為例,核心的是以下的步驟:

  • 執行 helm 安裝(這里是直接使用的 helm 的源碼邏輯進行安裝)
  • 等待所有的 Pod 成功運行
  • 觸發 test-case 執行
  • 等待測試用例執行完畢
  • 檢測是否需要卸載安裝的集群
func (e *installEvent) FinishInstall(cfg *action.Configuration, name string) error {  
    bar.Increment()  
    bar.Finish()  
  
    clientSet, err := cfg.KubernetesClientSet()  
    if err != nil {  
       return err  
    }  
    ctx := context.Background()  
    ip, err := GetServiceExternalIp(ctx, clientSet, settings.Namespace(), fmt.Sprintf("%s-proxy", name))  
    if err != nil {  
       return err  
    }  
  
    token, err := GetPulsarProxyToken(ctx, clientSet, settings.Namespace(), fmt.Sprintf("%s-token-proxy-admin", name))  
    if err != nil {  
       return err  
    }  
    // trigger testcase  
    err = e.client.Trigger(context.Background(), ip, token)  
    return err  
}

這里的 FinishInstall 需要獲取到新安裝的 Pulsar 集群的 proxy IP 地址和鑒權所使用的 token(GetServiceExternalIp()/GetPulsarProxyToken())。

將這兩個參數傳遞給 test-case 才可以構建出 pulsar-client.

這個命令的核心功能就是安裝集群和觸發測試,以及一些集群的基本運維能力。

測試框架

而關于這里的測試用例也有一些小伙伴咨詢過,如何對 Pulsar 進行功能測試。

其實 Pulsar 源碼中已經包含了幾乎所有我們會使用到的測試代碼,理論上只要新版本的官方鏡像已經推送了那就是跑了所有的單測,質量是可以保證的。

那為什么還需要做功能測試呢?

其實很很簡單,Pulsar 這類基礎組件官方都有提供基準測試,但我們想要用于生產環境依然需要自己做壓測得出一份屬于自己環境下的性能測試報告。

根本目的是要看在自己的業務場景下是否可以滿足(包括公司的軟硬件,不同的業務代碼)。

所以這里的功能測試代碼有一個很重要的前提就是:需要使用真實的業務代碼進行測試。

也就是業務在線上使用與 Pulsar 相關的代碼需要參考功能測試里的代碼實現,不然有些問題就無法在測試環節覆蓋到。

這里我就踩過坑,因為在功能測試里用的是官方的 example 代碼進行測試的,自然是沒有問題;但業務在實際使用時,使用到了一個 Schema 的場景,并沒有在功能測試里覆蓋到(官方的測試用例里也沒有??),就導致升級到某個版本后業務功能無法正常使用(雖然用法確實是有問題),但應該在我測試階段就暴露出來。

實現原理

以上是一個集群的功能測試報告,這里我只有 8 個測試場景(結合實際業務使用),考慮到未來可能會有新的測試用例,所以在設計這個測試框架時就得考慮到擴展性。

AbstractJobDefine job5 =  
        new FailoverConsumerTest(event, "故障轉移消費測試", pulsarClient, 20, admin);  
CompletableFuture<Void> c5 = CompletableFuture.runAsync(job5::start, EXECUTOR);  
AbstractJobDefine job6 = new SchemaTest(event,"schema測試",pulsarClient,20,prestoService);  
CompletableFuture<Void> c6 = CompletableFuture.runAsync(job6::start, EXECUTOR);  
AbstractJobDefine job7 = new VlogsTest(event,"vlogs test",pulsarClient,20, vlogsUrl);  
CompletableFuture<Void> c7 = CompletableFuture.runAsync(job7::start, EXECUTOR);  
  
CompletableFuture<Void> all = CompletableFuture.allOf(c1, c2, c3, c4, c5, c6, c7);  
all.whenComplete((___, __) -> {  
    event.finishAll();  
    pulsarClient.closeAsync();  
    admin.close();  
}).get();

對外提供的 trigger 接口就不貼代碼了,重點就是在這里構建測試任務,然后等待他們全部執行完畢。

@Data
public abstract class AbstractJobDefine {
    private Event event;
    private String jobName;
    private PulsarClient pulsarClient;

    private int timeout;

    private PulsarAdmin admin;

    public AbstractJobDefine(Event event, String jobName, PulsarClient pulsarClient, int timeout, PulsarAdmin admin) {
        this.event = event;
        this.jobName = jobName;
        this.pulsarClient = pulsarClient;
        this.timeout = timeout;
        this.admin = admin;
    }

    public void start() {
        event.addJob();
        try {
            CompletableFuture.runAsync(() -> {
                StopWatch watch = new StopWatch();
                try {
                    watch.start(jobName);
                    run(pulsarClient, admin);
                } catch (Exception e) {
                    event.oneException(this, e);
                } finally {
                    watch.stop();
                    event.finishOne(jobName, StrUtil.format("cost: {}s", watch.getTotalTimeSeconds()));
                }
            }, TestCase.EXECUTOR).get(timeout, TimeUnit.SECONDS);
        } catch (Exception e) {
            event.oneException(this, e);
        }
    }


    /** run busy code
     * @param pulsarClient pulsar client
     * @param admin pulsar admin client
     * @throws Exception e
     */
    public abstract void run(PulsarClient pulsarClient, PulsarAdmin admin) throws Exception;
}

核心代碼就是這個抽象的任務定義類,其中的 start 函數用于定義任務執行的模版:

  • 添加任務:具體實現是任務計數器+1
  • 開始計時
  • 執行抽血的 run 函數,具體實現交給子類
  • 異常時記錄事件
  • 正常執行完畢后也記錄事件

下面來看一個普通用例的實現情況:

就是重寫了 run() 函數,然后在其中實現具體的測試用例,斷言測試結果。

這樣當我們需要再添加用例的時候只需要再新增一個子類實現即可。

同時還需要定義一個事件接口,用于處理一些關鍵的節點:

public interface Event {  
  
    /**  
     * 新增一個任務  
     */  
    void addJob();  
  
    /** 獲取運行中的任務數量  
     * @return 獲取運行中的任務數量  
     */  
    TestCaseRuntimeResponse getRuntime();  
  
    /**  
     * 單個任務執行完畢  
     *  
     * @param jobName    任務名稱  
     * @param finishCost 任務完成耗時  
     */  
    void finishOne(String jobName, String finishCost);  
  
    /**單個任務執行異常  
     * @param jobDefine 任務  
     * @param e 異常  
     */  
    void oneException(AbstractJobDefine jobDefine, Exception e);  
  
    /**  
     * 所有任務執行完畢  
     */  
    void finishAll();  
}

其中 getRuntime 接口是用于在 cli 那邊查詢任務是否執行完畢的接口,只有任務執行完畢之后才能退出 cli。

監控指標

當這些任務運行完畢后我們需要重點查看應用客戶端和 Pulsar broker 端是否有異常日志。

同時還需要觀察一些關鍵的監控面板:

包含但不限于:

  • 消息吞吐量
  • broker 寫入延遲
  • Bookkeeper 的寫入、讀取成功率,以及延遲。

當然還有 zookeeper 的運行情況也需要監控,限于篇幅就不一一粘貼了。

以上就是測試整個 Pulsar 集群的流程,當然還有一些需要優化的地方。

比如使用命令行還是有些不便,后續可能會切換到網頁上就可以操作。

責任編輯:姜華 來源: crossoverJie
相關推薦

2024-01-19 16:56:04

軟件測試

2021-02-01 12:24:40

Python日志Expect

2014-07-26 15:11:20

WOT2014自動化運維

2021-07-15 16:58:45

數據庫RDS Postgre阿里云

2015-03-09 11:10:14

運維

2025-04-17 04:00:00

2024-10-15 11:09:43

2012-10-18 14:41:31

2017-12-24 21:00:10

自動化測試測試框架敏捷

2023-08-13 16:19:35

物聯網工業自動化

2022-02-15 08:07:17

測試軟件開發

2011-06-03 17:06:09

自動化測試

2010-05-25 11:25:19

數據中心IT管理Juniper

2024-07-19 09:01:07

2022-10-14 14:58:02

自動化架構

2017-02-14 12:46:05

數據網絡自動化

2022-02-17 10:37:16

自動化開發團隊預測

2021-09-03 09:56:18

鴻蒙HarmonyOS應用

2012-02-27 17:34:12

Facebook自動化

2013-05-16 10:58:44

Android開發自動化測試
點贊
收藏

51CTO技術棧公眾號

99久久久久国产精品| 午夜影院在线观看国产主播| 精彩视频一区二区| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产91在线免费观看| 欧美v亚洲v| 久久久久久久久久看片| 国产伊人精品在线| 国产大片中文字幕| 成人激情电影在线| 欧美成人猛片aaaaaaa| 欧美亚洲国产成人| 欧洲不卡视频| 91亚洲精品久久久蜜桃网站| 国产欧亚日韩视频| 日本少妇久久久| 日韩免费视频| 日韩成人av网址| 第一区免费在线观看| 密臀av在线播放| 中文字幕一区二区不卡| 国产欧美综合精品一区二区| 亚洲特级黄色片| 亚洲精品人人| 俺去亚洲欧洲欧美日韩| 亚洲熟妇无码av| 亚洲不卡在线| 欧美视频一区在线| 男人日女人逼逼| fc2ppv国产精品久久| 久久精品亚洲精品国产欧美kt∨| a级国产乱理论片在线观看99| 无码人妻一区二区三区免费| 亚洲无毛电影| 久久影院免费观看| 永久免费毛片在线观看| 久久黄色影视| 欧美一级欧美三级| 日韩欧美国产片| 欧美www.| 精品露脸国产偷人在视频| 色一情一乱一乱一区91| 91精品国产综合久久久久久豆腐| 91在线视频观看| 99久久无色码| 99精品免费观看| 久久99久久精品欧美| 国产精品99久久99久久久二8| 日韩欧美三级在线观看| 欧美午夜久久| 欧美成人精品激情在线观看| 很污很黄的网站| 成人一级毛片| 中文字幕国内精品| 欧美激情 一区| 国产在视频线精品视频www666| 亚洲精品97久久| 亚洲色图欧美日韩| 国产精品17p| 精品国产凹凸成av人网站| 性色av浪潮av| 日韩精品视频在线看| 欧美一区二区三区在线观看视频| 超碰人人草人人| 中文成人在线| 日韩一区二区免费高清| 免费欧美一级片| 日本一区二区三区播放| 日韩视频在线你懂得| 九色91porny| 99ri日韩精品视频| 精品乱码亚洲一区二区不卡| 蜜臀视频在线观看| 色爱综合av| 亚洲视频在线看| 69精品无码成人久久久久久| 久久视频精品| 色综合久久中文字幕综合网小说| 青娱乐国产在线视频| 亚洲黄色三级| 日韩av电影院| 亚洲视频中文字幕在线观看| 国产精品原创巨作av| 91青青草免费在线看| 日批视频免费播放| 国产午夜精品福利| 黄色一级片网址| 538视频在线| 色狠狠一区二区| 污视频网址在线观看| 亚洲不卡在线| 亚洲欧洲xxxx| 欧美人禽zoz0强交| 中文亚洲字幕| 国产精品羞羞答答| 狠狠综合久久av一区二区| 91香蕉国产在线观看软件| 日韩国产伦理| 日本孕妇大胆孕交无码| 日韩欧美在线视频观看| 不卡中文字幕在线观看| 国产精品22p| 在线国产精品视频| 国产在线视频在线观看| 天堂久久一区二区三区| 亚洲一区二区三区毛片| 你懂的在线观看| 亚洲欧美福利一区二区| 久章草在线视频| 国产区一区二| 亚洲午夜av久久乱码| 麻豆视频在线观看| 日韩精品一二三区| 国产一区二区高清不卡| av国产在线观看| 天天影视涩香欲综合网| 亚洲精品免费一区亚洲精品免费精品一区| 盗摄系列偷拍视频精品tp| 日韩在线精品一区| 国产91精品一区| 国产精品一区二区三区乱码| 日产精品久久久一区二区| 韩国日本一区| 欧美日韩国产高清一区二区三区| 91精品国产自产| 欧美va天堂在线| 国产日本欧美一区二区三区| 亚洲欧洲视频在线观看| 亚洲综合免费观看高清完整版| 日本中文字幕高清| 亚洲精品进入| 久久频这里精品99香蕉| 国产精品久久久久久69| 欧美韩日一区二区三区四区| 男人添女人下面高潮视频| 日韩视频在线直播| 最新亚洲国产精品| 日韩乱码一区二区三区| 91麻豆精东视频| 草b视频在线观看| japanese色系久久精品| 精品国内自产拍在线观看| 奴色虐av一区二区三区| 久久伊人蜜桃av一区二区| 大陆极品少妇内射aaaaa| av综合网页| 久久久久久久一区二区三区| www.激情五月| 一区二区三区美女| 99国产精品免费视频| 中文字幕亚洲综合久久五月天色无吗'' | 黄色美女一级片| 亚洲精品久久久蜜桃| 国产xxxxhd| 亚洲午夜精品一区二区国产| 91在线观看免费高清| 欧美69xxxx| 91麻豆精品国产无毒不卡在线观看| 美国精品一区二区| 免费看欧美美女黄的网站| 日韩三级电影| 激情欧美一区二区三区黑长吊| 色yeye香蕉凹凸一区二区av| 亚洲天堂自拍偷拍| 亚洲欧美在线高清| 特种兵之深入敌后| 99精品国产在热久久| 精品久久久久久乱码天堂| 日韩激情电影| 亚洲无av在线中文字幕| 国产一区二区视频免费观看| 亚洲男人天堂av网| 国产香蕉精品视频| av成人天堂| 日本婷婷久久久久久久久一区二区| 日韩欧美另类一区二区| 色噜噜狠狠狠综合曰曰曰88av| 国产精品视频在线观看免费| 一区二区三区蜜桃| 法国伦理少妇愉情| 美腿丝袜亚洲三区| 日韩人妻一区二区三区蜜桃视频| 北条麻妃在线一区二区免费播放| 45www国产精品网站| yjizz视频网站在线播放| 欧美丰满高潮xxxx喷水动漫| 欧美人与禽zozzo禽性配| gogogo免费视频观看亚洲一| 色一情一乱一伦一区二区三区日本 | 欧美一区二区三区在线| 久久精品性爱视频| 久久久精品国产99久久精品芒果| 五月天中文字幕在线| 亚洲网站在线| 亚洲图色在线| 精品综合久久88少妇激情| 国产精品h在线观看| 黄色动漫在线| 亚洲美女喷白浆| 国产精品一区二区人人爽| 午夜免费久久看| 国产精品18在线| 99久久免费国产| 天堂中文av在线| 在线亚洲观看| 日韩精品一区二区三区电影| 亚洲免费福利一区| 96国产粉嫩美女| 澳门av一区二区三区| 欧美国产日韩在线| 99re热久久这里只有精品34| 精品99999| 亚洲一卡二卡在线| 欧美日韩免费在线观看| 中文字幕另类日韩欧美亚洲嫩草| 91麻豆福利精品推荐| 黄色片子免费看| 久久资源在线| 97视频久久久| 亚洲色图插插| 亚洲精品日韩在线观看| 久9re热视频这里只有精品| 国产在线高清精品| 日韩新的三级电影| 4438全国成人免费| a级片在线免费| 久久成人在线视频| bbbbbbbbbbb在线视频| 日韩av在线免费观看| 国产白浆在线观看| 欧美日韩国产综合一区二区三区| 五月婷婷亚洲综合| 亚洲成人免费在线| 久久久久久久久久久97| 综合色天天鬼久久鬼色| 日本美女xxx| 久久久www免费人成精品| 国产一级二级在线观看| 成人精品电影在线观看| 国产成人精品一区二区三区在线观看 | 超薄丝袜一区二区| 在线观看美女网站大全免费| 亚洲色无码播放| 青青色在线视频| 亚洲精品美女网站| 视频污在线观看| 日韩av一区二区在线观看| 蜜臀av免费在线观看| 欧美va天堂va视频va在线| 国产喷水福利在线视频| 欧美高清www午色夜在线视频| 伊人精品一区二区三区| 欧美性受极品xxxx喷水| 欧美特级黄色片| 91国产免费看| 成人一二三四区| 欧美日韩中文一区| 91在线公开视频| 在线综合+亚洲+欧美中文字幕| 91成人在线免费| 欧美一区二区国产| 亚洲成人77777| 亚洲国产福利在线| 日韩欧美在线番号| 亚洲欧洲xxxx| 日本中文字幕在线2020| 久久视频在线观看免费| 欧美videosex性极品hd| 午夜免费日韩视频| 老司机成人影院| 国产精品成人一区| 亚洲午夜剧场| av成人在线电影| 美女精品一区最新中文字幕一区二区三区 | www.国产com| 欧洲亚洲精品在线| 亚洲最大成人在线视频| 日韩视频国产视频| 色噜噜在线播放| 伊人伊人伊人久久| 国产原创精品视频| 97久久精品视频| 91在线亚洲| 97se在线视频| 美女久久久久| 日本久久高清视频| 99香蕉国产精品偷在线观看| 日本888xxxx| 国产成a人无v码亚洲福利| 少妇大叫太粗太大爽一区二区| 中文字幕 久热精品 视频在线 | 污视频网址在线观看| 国产不卡视频一区二区三区| 蜜桃精品一区二区| 亚洲色图欧美偷拍| 五月婷婷视频在线| 欧美丰满少妇xxxxx高潮对白| 十八禁一区二区三区| www.日韩欧美| 亚洲v.com| 亚洲在线观看视频| 国产欧美日韩免费观看| 天堂а√在线中文在线 | 911福利视频| 波波电影院一区二区三区| 国产18无套直看片| 天天射综合影视| 国产精品视频一区二区三区,| 精品亚洲国产视频| 呦呦在线视频| 国产情人节一区| 久久最新网址| 国产爆乳无码一区二区麻豆| 男女性色大片免费观看一区二区| 野战少妇38p| 亚洲男人天堂av| 中文字幕理论片| 亚洲精品美女在线| 久草在线资源站资源站| 成人h猎奇视频网站| 国产免费久久| 久久久久久免费看| 国产一区不卡视频| 手机看片国产日韩| 色婷婷综合视频在线观看| 亚洲精品免费在线观看视频| 久久韩国免费视频| 精品福利在线| 日本成人黄色免费看| 国产精品久久久久毛片大屁完整版| 老女人性生活视频| 亚洲三级在线免费| 中文字幕第99页| 最新91在线视频| 欧洲av不卡| 欧洲精品亚洲精品| 99精品欧美| 星空大象在线观看免费播放| 亚洲综合丁香婷婷六月香| 99久久国产热无码精品免费| www国产亚洲精品久久网站| 日韩不卡在线| 日韩在线电影一区| 日本亚洲三级在线| 国产高清一区二区三区四区| 欧美日韩一区二区三区在线免费观看| 日日躁夜夜躁白天躁晚上躁91| 欧美激情亚洲激情| 国产劲爆久久| 精品久久一二三| 99精品欧美一区二区三区综合在线| 久久久久成人精品无码| 欧美va亚洲va| 女人黄色一级片| 久久婷婷一区二区三区| 国产午夜小视频| 亚洲精品一区在线观看| 爱看av在线| 精品国产免费一区二区三区| 亚洲黄色免费| 97超碰在线资源| 欧洲亚洲精品在线| 秋霞影院午夜丰满少妇在线视频| 国产精品在线看| 五月天综合网站| avtt中文字幕| 亚洲成a人片综合在线| 性xxxxbbbb| 国产精品777| 仙踪林久久久久久久999| 91视频福利网| 午夜精品久久久久久久蜜桃app| 午夜视频在线免费播放| 日本亚洲欧洲色| 成人精品亚洲| 野花视频免费在线观看| 亚洲成人高清在线| 你懂的免费在线观看视频网站| 国产精品入口日韩视频大尺度| 99久久婷婷这里只有精品 | 欧美性视频在线播放| 国产激情偷乱视频一区二区三区| 成人免费看片98| 亚洲天堂男人天堂| 国产日韩在线观看视频| 免费超爽大片黄| 亚洲国产岛国毛片在线| 亚洲精品一区二区三区四区| 日本不卡免费高清视频| 国产高清久久| 六十路息与子猛烈交尾| 欧美天堂一区二区三区| 激情在线视频播放| 欧美污视频久久久| 国产精品亚洲а∨天堂免在线| 黄色在线免费观看| 欧美成人在线免费视频| 国产精品欧美三级在线观看| 4438x全国最大成人| 在线免费观看一区|