精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲无码精品在线播放| www.久久com| 粉嫩一区二区三区国产精品| 欧美bbbbb| 久久这里只有精品视频首页| 在线免费看黄色片| 久久久一本精品| 亚洲欧美激情视频在线观看一区二区三区| 国产超碰91| 国产美女www| 欧美午夜一区| 一个色综合导航| 亚洲国产精品电影在线观看| 亚洲一区精品电影| 免费在线观看黄网站| 色综合咪咪久久网| 亚洲国产成人精品久久久国产成人一区| 成人免费无码av| 免费电影网站在线视频观看福利| 国产欧美日韩精品在线| 成人av资源网| 国产乱淫a∨片免费视频| 99riav1国产精品视频| 日日噜噜噜夜夜爽亚洲精品| 三级男人添奶爽爽爽视频| 日韩黄色碟片| 色综合天天天天做夜夜夜夜做| 国产91av视频在线观看| 欧美成人免费| 成人av在线一区二区| 国产免费久久av| 香蕉影院在线观看| 欧美视频亚洲视频| 久久综合久久美利坚合众国| 99精品欧美一区二区| 麻豆一区一区三区四区| 日韩三级av在线播放| 中文字幕在线综合| 欧美日韩五码| 欧美性感美女h网站在线观看免费| 男女啪啪免费观看| 四虎久久免费| 中文字幕av一区二区三区高| 日本精品一区二区三区不卡无字幕| 粉嫩av一区二区夜夜嗨| 国产成人亚洲精品青草天美| 91美女福利视频高清| 亚洲天堂国产精品| 捆绑紧缚一区二区三区视频 | 91免费看蜜桃| 这里只有精品9| 一级特黄aa大片| 婷婷精品在线| 亚洲精品福利在线| 男男一级淫片免费播放| 超碰地址久久| 日韩美女视频在线| 亚洲综合中文网| 日韩欧美中文在线观看| 欧美一级夜夜爽| 波多野结衣中文字幕在线播放| 欧美成人家庭影院| 欧美日韩一区在线观看| 五月婷婷丁香综合网| aaaa欧美| 色综合天天综合网天天看片| 日韩免费高清在线| 99只有精品| 在线成人av网站| 伊人免费视频二| www.国产精品一区| 日韩久久免费电影| 日韩av片在线| 99久久99热这里只有精品| 日韩在线免费视频| 免费在线观看一级片| 黄色精品一区| 欧美一区在线直播| 丰满人妻中伦妇伦精品app| 鲁丝一区二区三区| 精品久久综合| 美女少妇精品视频| 91av在线免费视频| 日本免费在线视频不卡一不卡二| 国产日韩欧美另类| www香蕉视频| 91在线你懂得| 亚洲精品国产精品久久| 日本高清成人vr专区| 精品日韩中文字幕| 手机看片一级片| 亚洲五码在线| 亚洲欧美日韩天堂一区二区| 国产18无套直看片| 一区二区中文字| 欧美一区二区三区免费观看| 中文字幕欧美色图| 国产成人福利片| 欧美人与物videos另类| 国产视频在线播放| 精品人伦一区二区三区蜜桃网站 | 亚州国产精品视频| 奇米影视在线99精品| av资源站久久亚洲| 成人精品一区二区| 亚洲图片欧美视频| www.se五月| 网友自拍一区| 欧美裸体xxxx极品少妇| www.国产毛片| 成人午夜碰碰视频| 偷拍盗摄高潮叫床对白清晰| 桃色av一区二区| 日韩欧美专区在线| 免费观看a级片| 一本久久知道综合久久| 91在线视频一区| 日韩电影在线观看完整版| 亚洲三级在线免费| 熟女少妇精品一区二区| 一区二区三区亚洲变态调教大结局| 亚洲欧美中文另类| 亚洲综合一二三| 国产乱码字幕精品高清av| 日本一区高清不卡| 成人教育av| 日韩电影中文字幕一区| 久久国产在线观看| 国产精品资源网| 亚洲一区美女| 国模一区二区| 国产视频在线观看一区二区| 国产在线视频卡一卡二| 国产精品99久| 欧美少妇在线观看| 天堂久久一区| 亚洲欧美日韩直播| 中文字幕视频网| 99精品在线观看视频| 日韩精品综合在线| 亚洲精品一区在线| 欧美激情一区二区久久久| 国产乱码精品一区二区| 中文字幕亚洲电影| 国产美女视频免费看| 日韩激情一区| 国产精品直播网红| 日本免费在线视频| 欧美日本韩国一区二区三区视频| 日本精品久久久久中文| 秋霞成人午夜伦在线观看| 日韩电影在线播放| 99精品国自产在线| www.xxxx欧美| 99视频国产精品免费观看a | 五月天婷婷综合网| 99re在线视频这里只有精品| 欧美一级视频免费看| 国产精品对白| 26uuu日韩精品一区二区| 手机在线精品视频| 色综合久久精品| 国产视频三区四区| 国产麻豆91精品| 精品国产av无码一区二区三区| 国产毛片久久久| 欧美又大又粗又长| 在线观看免费黄色| 欧美一级片在线| 日本一区二区免费在线观看| 91看片淫黄大片一级在线观看| 国产精品亚洲αv天堂无码| 欧美精品尤物在线观看| 国产精品一区av| 欧美精品videossex少妇| 亚洲精品国精品久久99热| 伊人中文字幕在线观看| 国产精品女主播av| 国产性猛交96| 久久婷婷丁香| 一本—道久久a久久精品蜜桃| 欧美二区观看| 欧美在线观看网站| 欧美日韩在线资源| 亚洲第一区中文字幕| 日韩精选在线观看| 亚洲美女偷拍久久| 国产艳俗歌舞表演hd| 免费精品99久久国产综合精品| 玖玖精品在线视频| 亚洲第一福利社区| 成人字幕网zmw| 欧美在线极品| 久久亚洲精品一区| 日韩欧美在线观看一区二区| 欧美日韩日日骚| 福利一区二区三区四区| 国产精品国产三级国产普通话蜜臀| 先锋资源在线视频| 久久一区二区三区四区五区| 300部国产真实乱| 亚洲第一福利专区| http;//www.99re视频| 日韩制服诱惑| 97久久超碰福利国产精品…| 欧美人xxx| 亚洲电影免费观看高清完整版在线| 国产精品sm调教免费专区| 亚洲午夜在线视频| 无码人中文字幕| 91亚洲精品久久久蜜桃网站| a级大片免费看| 日本aⅴ精品一区二区三区 | 日韩国产高清污视频在线观看 | 亚洲精品在线免费观看视频| 一区二区不卡视频在线观看| 日韩欧美aaa| 精品少妇一二三区| 亚洲欧洲中文日韩久久av乱码| 亚洲精品色午夜无码专区日韩| 国产成人精品亚洲777人妖| 免费涩涩18网站入口| 国产日韩精品视频一区二区三区 | 日韩久久免费av| 国产精品欧美综合亚洲| 在线视频综合导航| 欧美一级片免费在线观看| 亚洲午夜精品网| 综合五月激情网| 中文字幕亚洲一区二区av在线 | 亚洲av电影一区| 亚洲成**性毛茸茸| 亚洲不卡免费视频| 欧美一级理论性理论a| 一区二区三区免费观看视频| 在线免费观看日韩欧美| 中文字幕精品视频在线观看| 欧美日韩一二三四五区| 亚洲国产精品成人无久久精品| 一区二区三区高清不卡| 亚洲天堂黄色片| 日韩毛片视频在线看| 亚洲欧美另类日本| 国产精品乱码久久久久久| 人与嘼交av免费| 亚洲国产精品传媒在线观看| 成人激情五月天| 国产精品亲子乱子伦xxxx裸| 蜜桃av免费在线观看| 国产精品麻豆视频| 黄色裸体一级片| 最新日韩av在线| 国产老头老太做爰视频| 综合在线观看色| 黄色一级免费视频| 亚洲妇女屁股眼交7| 日韩成人免费观看| 91官网在线免费观看| 青娱乐在线免费视频| 欧美日韩一区二区在线观看| 一区二区三区免费在线视频| 日韩一区二区三免费高清| 亚洲国产精品suv| 精品国产三级a在线观看| 手机av免费在线观看| 亚洲人成网站色ww在线| 在线观看黄色av| 久久成人一区二区| 国产嫩草在线视频| 奇米成人av国产一区二区三区| 成人va天堂| 成人网在线免费看| 99亚洲乱人伦aⅴ精品| 久久精品美女| 色综合五月天| 日韩精品一区二区三区四| 日韩视频中文| 日韩一区二区三区不卡视频| 国产精品一区二区黑丝| 中文字幕无码人妻少妇免费| 国产午夜精品久久久久久免费视| 91制片厂在线| 亚洲电影中文字幕在线观看| 免费黄色网址在线| 6080yy午夜一二三区久久| 亚洲精品久久久狠狠狠爱| 亚洲午夜久久久影院| а√资源新版在线天堂| 日本精品久久中文字幕佐佐木| 欧美综合社区国产| 精品久久一区二区三区蜜桃| 欧美综合在线视频观看| www.夜夜爱| 美女视频黄频大全不卡视频在线播放| 日韩精品xxx| 国产欧美精品在线观看| 精品少妇爆乳无码av无码专区| 欧美亚洲自拍偷拍| 欧美一级视频免费| 视频直播国产精品| 天堂av中文在线观看| 国产自产女人91一区在线观看| 欧美调教视频| 国产美女视频免费| 日韩国产在线观看一区| 真实乱偷全部视频| 国产精品―色哟哟| 人妻 日韩精品 中文字幕| 日韩一级黄色片| 永久免费av在线| 奇米影视亚洲狠狠色| 一本一道久久a久久| 伊人久久大香线蕉成人综合网| 久久国产精品亚洲77777| 一级全黄裸体片| 亚洲天天做日日做天天谢日日欢| 亚洲欧美偷拍一区| 亚洲激情自拍图| 天堂va在线| 91在线观看免费高清| 日韩在线不卡| 精品少妇无遮挡毛片| 91在线丨porny丨国产| 久久久全国免费视频| 欧美一区二区三区在线看| 调教视频免费在线观看| 国产福利视频一区二区| 亚洲aaa级| 激情六月丁香婷婷| 99综合电影在线视频| 久久精品国产亚洲AV无码男同| 欧美一区二区三区色| 日本成a人片在线观看| 国产精品无码专区在线观看| 国产剧情在线观看一区| 成人黄色片视频| 久久婷婷成人综合色| 亚洲另类欧美日韩| 日韩精品欧美国产精品忘忧草 | 91黄色在线观看| 蜜芽tv福利在线视频| 日韩美女视频免费在线观看| 亚洲影院天堂中文av色| 欧美韩国日本在线| 91在线视频官网| 精品人妻一区二区三区潮喷在线| 亚洲欧美另类在线观看| 波多野结衣亚洲| 日韩高清三级| 免费观看在线综合| 国产小视频你懂的| 欧美一二区视频| 韩国日本一区| 久久综合婷婷综合| 日韩精品91亚洲二区在线观看 | 青青草观看免费视频在线| 欧美在线一区二区视频| 九色精品国产蝌蚪| 激情 小说 亚洲 图片: 伦| 综合网在线视频| 国产91麻豆视频| 69国产精品成人在线播放| 欧美女王vk| 超碰人人草人人| 一区二区三区丝袜| 香港三日本三级少妇66| 国产成人在线亚洲欧美| 日韩专区精品| 影音先锋资源av| 色老头久久综合| 嫩草在线视频| 国产精品jizz视频| 可以免费看不卡的av网站| 91香蕉视频网| 精品成人一区二区| 日韩一级二级| 欧美另类videos| 久久久一区二区| 91片黄在线观看喷潮| 久久久人成影片一区二区三区观看 | 在线一区二区视频| 最爽无遮挡行房视频在线| 精品视频一区二区| 久久精品国产秦先生| 国产极品在线播放| 色黄久久久久久| 老司机成人在线| 91看片破解版| 欧美视频专区一二在线观看| 欧美三级电影一区二区三区| 国产区一区二区| 久草精品在线观看| 欧美不卡视频在线观看| 最近2019中文字幕在线高清| 国产成人夜色高潮福利影视| 日本激情综合网| 黄色成人在线播放| 在线视频中文字幕第一页| 免费久久99精品国产自| 国产精品1区二区.|