有狀態軟體如何在 k8s 上快速擴容甚至自動擴容

2022-12-07 12:03:34

概述

在傳統的虛機/物理機環境裡, 如果我們想要對一個有狀態應用擴容, 我們需要做哪些步驟?

  1. 申請虛機/物理機
  2. 安裝依賴
  3. 下載安裝包
  4. 按規範設定主機名, hosts
  5. 設定網路: 包括域名, DNS, 虛 ip, 防火牆...
  6. 設定監控

今天虛機環境上出現了問題, 是因為 RabbitMQ 資源不足. 手動擴容的過程中花費了較長的時間.

但是在 K8S 上, 有狀態應用的擴容就很簡單, YAML 裡改一下replicas副本數, 等不到 1min 就擴容完畢.

當然, 最基本的: 下映象, 啟動 pod(相當於上邊的前 3 步), 就不必多提. 那麼, 還有哪些因素, 讓有狀態應用可以在 k8s 上快速擴容甚至自動擴容呢?

原因就是這兩點:

  1. peer discovery +peer discovery 的 相關實現(通過 hostname, dns, k8s api 或其他)
  2. 可觀察性 + 自動伸縮

我們今天選擇幾個典型的有狀態應用, 一一梳理下:

  1. Eureka
  2. Nacos
  3. Redis
  4. RabbitMQ
  5. Kafka
  6. TiDB

K8S 上有狀態應用擴容

在 Kubernetes 上, 有狀態應用快速擴容甚至自動擴容很容易. 這得益於 Kubernetes 優秀的設計以及良好的生態. Kubernetes 就像是一個雲原生時代的作業系統. 它自身就具有:

  1. 自動化工具;
  2. 內部服務發現 + 負載均衡
  3. 內部 DNS
  4. 和 Prometheus 整合
  5. 統一的宣告式 API
  6. 標準, 開源的生態環境.

所以, 需要擴容, 一個 yaml 搞定全部. 包括上邊提到的: 下載, 安裝, 儲存設定, 節點發現, 加入叢集, 監控設定...

Eureka 擴容