Docker

將裸機服務移植到 Kubernetes

  • February 19, 2018

我是 docker/contaners 等的新手。我有一個節點伺服器在埠 8080 上的金屬機器上執行。我讓 NginX 作為它的反向代理執行。

該應用程序為每個連接的客戶端建立一個 Web 套接字,以促進實時聊天。目前,websocket 映射在程序中,這意味著我無法擴展到多個程序(是的,我知道,la腳);但是,我需要更新架構,以便允許使用者與其他使用者進行通信,即使他們連接到不同程序上的 websockets。

數據庫是Mongo。

問題是:如果我將它移植到 Kubernetes 會是什麼樣子?它將取代什麼,如何取代?我還會使用 NginX 嗎?或者 Kubernetes 會提供一種充當反向代理的方法嗎?如果我這樣做了,那是否意味著我可以在任何地方部署我的應用程序,並且只看到它工作?應用程序容器是否會包含整個 CentOs/Node/等?堆?

Kubernetes 會讓你擁有一組金屬機器,它會將它們視為一個集群。在集群中的機器之上,它將使用稱為 Pods 和 ReplicaSets 的 kubernetes 對象來處理自動擴展數量的無狀態節點 websocket 伺服器的調度。

有一個名為 Ingress 的 kubernetes 對象,在大多數情況下,它是底層的 nginx,可以替換您現有的 nginx。

你也可以在 kubernetes 中執行 mongo。Mongo 想要將數據儲存在本地磁碟上。在 kubernetes 中這樣做更複雜,但有可能。

要處理 websocket 狀態映射,您可以在 kubernetes 中執行 redis,儘管 kubernetes 再次希望它執行的應用程序是無狀態的,並且可以移動到集群中的任何節點。或者,它希望應用程序有自己的集群模型,具有領導者選舉和持久數據同步。

如果您完成了所有架構工作並準備了所有 Kubernetes 配置,那麼您可以在任何人的 Kubernetes 集群上部署整個應用程序系統。

一個名為 Helm https://helm.sh/的工具用於將 kubernetes 對象配置收集到包中,從而實現這種便利。

在每個應用程序容器中通常包含一個作業系統、特定於執行時的庫,然後是應用程序本身。許多人使用具有最少作業系統的容器血統,而不是完整的發行版,例如使用大量使用者級命令行工具,因為通常不使用 ssh 或 shell 進入容器。

引用自:https://serverfault.com/questions/890234