簡體   English   中英

Kubernetes 有狀態應用程序的工作負載,但不需要永久磁盤

[英]Kubernetes workload for stateful application but no need of persistent disk

我有一個有狀態的應用程序——我將數據保存在用戶的會話中(基本上是HttpSession對象中的數據)——但我不需要將任何內容寫入永久磁盤。

從我目前所讀到的 - StatefulSet 工作負載適用於有狀態的應用程序,但到目前為止我的理解是,即使我的應用程序是有狀態的應用程序,但部署工作負載也可以滿足我的要求,因為我不想向永久磁盤寫入任何內容.

但是,我不確定的一點是,假設我使用部署工作負載並且我的HttpSession object 中存在大量用戶數據,現在由於某種原因 Kubernetes 重新啟動了我的 Pod,那么當然所有用戶 Z21D6F40CFB5119A92E742 數據都會丟失。 所以,我的問題如下:

  • StatefulSet 是否比部署工作負載更好地處理這種情況?
  • 因此,部署工作負載和 StatefulSet 工作負載之間的唯一區別在於是否存在永久性磁盤,或者在 StatefulSet 的情況下與應用程序 session 管理有關嗎?

StatefulSet 是否比部署工作負載更好地處理這種情況?

不會DeploymentStatefulSet都不會保留 memory 內容。 要保留 session 信息,您需要將其存儲在某處。 一種常見的方法是使用Redis

因此,部署工作負載和 StatefulSet 工作負載之間的唯一區別在於是否存在永久性磁盤,或者在 StatefulSet 的情況下與應用程序 session 管理有關嗎?

不,還有其他區別:

  • StatefulSets 創建(並重新創建)確定性、一致的 pod 名稱(標識符)。
  • StatefulSets 以確定的、一致的順序一一部署、擴展和更新。 只有在前一個 Pod 到達Running state 之后,才會創建下一個 Pod。

此外,值得一提的是,永久性磁盤可以附加到不屬於StatefulSet的 pod。 只是將磁盤始終連接到具有一致 id 的 pod 很方便。 例如,如果您有運行復制數據庫的 pod,則可以使用 StatefulSets 來確保主副本的磁盤始終連接到 pod #1。

編輯:

鏈接到有關 StatefulSets 的官方文檔

從文檔中:

與 Deployment 類似,StatefulSet 管理基於相同容器規范的 Pod。 與 Deployment 不同,StatefulSet 為其每個 Pod 維護一個粘性標識。 這些 pod 是根據相同的規范創建的,但不可互換:每個 pod 都有一個持久標識符,它在任何重新調度時都會維護該標識符。

...

StatefulSets 對於需要以下一項或多項的應用程序很有價值。

  • 穩定、唯一的網絡標識符。
  • 穩定、持久的存儲。
  • 有序、優雅的部署和擴展。
  • 有序的自動滾動更新。

在上面,穩定是 Pod(重新)調度中持久性的同義詞。 如果應用程序不需要任何穩定標識符或有序部署、刪除或擴展,則應使用提供一組無狀態副本的工作負載 object 部署應用程序。 Deployment 或 ReplicaSet 可能更適合您的無狀態需求。

暫無
暫無

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

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