Kubernetes性能測試實踐

本文由  網易雲 發佈。

 

概述

隨着容器技術的發展,容器服務已經成爲行業主流,然而想要在生產環境中成功部署和操做容器,關鍵仍是容器編排技術。市場上有各類各樣的容器編排工具,如Docker原生的Swarm、Mesos、Kubernetes等,其中Google開發的Kubernetes由於業界各大巨頭的加入和開源社區的全力支撐,成爲了容器編排的首選。node

簡單來說,Kubernetes是容器集羣管理系統,爲容器化的應用提供資源調度、部署運行、滾動升級、擴容縮容等功能。容器集羣管理給業務帶來了便利,可是隨着業務的不斷增加,應用數量可能會發生爆發式的增加。那在這種狀況下,Kubernetes可否快速地完成擴容、擴容到大規模時Kubernetes管理能力是否穩定成了挑戰。api

所以,結合近期對社區Kubernetes性能測試的調研和咱們平時進行的kubernetes性能測試實踐,和你們探討下Kubernetes性能測試的一些要點,不足之處還望你們多多指正!緩存

測試目的

如上Kubernetes架構圖所示,不管外部客戶端,仍是Kubernetes集羣內部組件,其通訊都須要通過Kubernetes的apiserver,API的響應性決定着集羣性能的好壞。安全

其次,對於外部客戶而言,他只關注建立容器服務所用的時間,所以,pod的啓動時間也是影響集羣性能的另一個因素。服務器

目前,業內廣泛採用的性能標準是:網絡

  • API響應性:99%的API調用響應時間小於1s。
  • Pod啓動時間:99%的pods(已經拉取好鏡像)啓動時間在5s之內。

「pod啓動時間」包括了ReplicationController的建立,RC依次建立pod,調度器調度pod,Kubernetes爲pod設置網絡,啓動容器,等待容器成功響應健康檢查,並最終等待容器將其狀態上報回API服務器,最後API服務器將pod的狀態報告給正在監聽中的客戶端。架構

除此以外,網絡吞吐量、鏡像大小(須要拉取)都會影響Kubernetes的總體性能。併發

測試要點

1、社區測試Kubernetes性能的關鍵點異步

  1. 當集羣資源使用率是X%(50%、90% 、99%等不一樣規模下)的時候,建立新的pod所需的時間(這種場景須要提早鋪底,而後在鋪底基礎上用不一樣的併發梯度建立pod,測試pod建立耗時,評估集羣性能)。在測試kubernetes新版本時,通常是以老版本穩定水位(node、pod等)鋪底,而後梯度增長進行測試。
  2. 當集羣使用率高於90%時,容器啓動時延的增大(系統會經歷一個異常的減速)還有etcd測試的線性性質和「模型創建」的因素。調優方法是:調研etcd新版本是否有解決該問題。
  3. 測試的過程當中要找出集羣的一個最高點,低於和高於這個閾值點,集羣性能都不是最優的。
  4. 組件負載會消耗master節點的資源,資源消耗所產生的不穩定性和性能問題,會致使集羣不可用。因此,在測試過程當中要時刻關注資源狀況。
  5. 客戶端建立資源對象的格式 —— API服務對編碼和解碼JSON對象也須要花費大量的時間 —— 這也能夠做爲一個優化點。

2、網易雲容器服務Kubernetes集羣性能測試關鍵點總結工具

集羣總體

  1. 不一樣的集羣使用水位線(0%,50%, 90%)上,pod/deployment(rs 等資源)建立、擴縮容等核心操做的性能。能夠經過預先建立出一批dp(副本數默認設置爲3)來填充集羣,達到預期的水位,即鋪底。
  2. 不一樣水位對系統性能的影響——安全水位,極限水位
  3. 容器有無掛載數據盤對容器建立性能的影響。例如,掛載數據盤增長了kubelet掛載磁盤的耗時,會增長pod的啓動時長。

測試kubernetes集羣的性能時,重點關注在不一樣水位、不一樣併發數下,長時間執行壓力測試時,系統的穩定性,包括:

  • 系統性能表現,在較長時間範圍內的變化趨勢
  • 系統資源使用狀況,在較長時間範圍內的變化趨勢
  • 各個服務組件的TPS、響應時間、錯誤率
  • 內部模塊間訪問次數、耗時、錯誤率等內部性能數據
  • 各個模塊資源使用狀況
  • 各個服務端組件長時間運行時,是否出現進程意外退出、重啓等狀況
  • 服務端日誌是否有未知錯誤
  • 系統日誌是否報錯

apiserver

  1. 關注api的響應時間。數據寫到etcd便可,而後根據狀況關注異步操做是否真正執行完成。
  2. 關注apiserver緩存的存儲設備對性能的影響。例如,master端節點的磁盤io。
  3. 流控對系統、系統性能的影響。
  4. apiserver 日誌中的錯誤響應碼。
  5. apiserver 重啓恢復的時間。須要考慮該時間用戶是否可接受,重啓後請求或者資源使用是否有異常。
  6. 關注apiserver在壓力測試狀況下,響應時間和資源使用狀況。

scheduler

  1. 壓測scheduler處理能力
  • 併發建立大量pod,測試各個pod被調度器調度的耗時(從Pod建立到其被bind到host)
  • 不斷加大新建的pod數量來增長調度器的負載
  • 關注不一樣pod數量級下,調度器的平均耗時、最大時間、最大QPS(吞吐量)

    2. scheduler 重啓恢復的時間(從重啓開始到重啓後系統恢復穩定)。須要考慮該時間用戶是否可接受,重啓後請求或者資源使用是否有異常。

    3. 關注scheduler日誌中的錯誤信息。

controller

  1. 壓測 deployment controller處理能力
  • 併發建立大量rc(1.3 之後是deployment,單副本),測試各個deployment被空感知並建立對應rs的耗時
  • 觀察rs controller建立對應pod的耗時
  • 擴容、縮容(縮容到0副本)的耗時
  • 不斷加大新建deployment的數,測試在不一樣deployment數量級下,控制器處理deployment的平均耗時、最大時間、最大QPS(吞吐量)和控制器負載等狀況

   2. controller 重啓恢復的時間(從重啓開始到重啓後系統恢復穩定)。須要考慮該時間用戶是否可接受,重啓後請求或者資源使用是否有異常。

   3. 關注controller日誌中的錯誤信息。

kubelet

  1. node心跳對系統性能的影響。
  2. kubelet重啓恢復的時間(從重啓開始到重啓後系統恢復穩定)。須要考慮該時間用戶是否可接受,重啓後請求或者資源使用是否有異常。
  3. 關注kubelet日誌中的錯誤信息。

etcd

  1. 關注etcd 的寫入性能
  • 寫最大併發數
  • 寫入性能瓶頸,這個主要是按期持久化snapshot操做的性能

   2. etcd 的存儲設備對性能的影響。例如,寫etcd的io。

   3. watcher hub 數對kubernetes系統性能的影響。

 

做者:張文娟,網易測試工程師

 

瞭解 網易雲 :
網易雲官網:https://www.163yun.com/
新用戶大禮包:https://www.163yun.com/gift
網易雲社區:https://sq.163yun.com/

相關文章
相關標籤/搜索