簡體   English   中英

手動生成有狀態的 pod 實例

[英]Manually spawn stateful pod instances

我正在做一個項目,我需要為每個用戶(客戶)生成 1 個實例。

我認為創建某種管理器來處理它並將其托管在某個地方是有意義的。 Kube.netes 似乎是一個不錯的選擇,因為它幾乎可以托管在任何地方,並且可以自動執行很多事情(例如,確保實例在出現故障時繼續運行)。

所有實體都在Python,對應的有Flask API。

                         InstanceManager         Instance (user1)
                          .-----------.            .--------.
POST /instances/user3 --> |           | ---------- |        |---vol1
                          |           |            '--------'
                          |           | -----.     
                          '...........'       \   Instance (user2)
                                               \   .--------.
                                                '- |        |---vol2
                                                   '--------'

現在我似乎無法弄清楚如何將其翻譯成 Kube.netes

我的想法:

  • Instance 是一個StatefulSet ,因為我希望通過重啟來維護數據。
  • InstanceManager 是一個附加數據庫的Service ,用於跟蹤用戶到實例 IP(用於健康檢查等)。

我對如何讓InstanceManager在傳入的 POST 請求上生成一個新實例感到很困惑。 我做了很多挖掘(運算符、命名空間等),但似乎沒有什么是直截了當的。 也就是說,我似乎甚至無法通過kubectl做到這一點。 我對 Kube.netes 的工作方式的看法完全錯誤嗎?

我取得了一些進展並想分享。

本質上,您需要直接與 Kube.netes REST API 進行交互,而不是應用 static yaml 或使用kubectl ,最好是與眾多客戶端之一進行交互。

在我們的例子中有兩個選擇:

  1. 為每個用戶創建一個命名空間,然后在該命名空間中創建一個服務
  2. 為每個用戶創建服務

第一種方法似乎更明智,因為使用命名空間有很多其他好處(網絡控制、資源分配等)。

根據情況,服務本身可以指向一個statefulset或一個pod

還有另一個陷阱(可能更多)。 命名空間、pod 名稱等,它們都需要符合 RFC 1123。因此對於命名空間,你不能簡單地使用 email 地址甚至 base64。你需要使用類似user-100的東西,並有一個到 map 的映射表回到實際用戶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM