簡體   English   中英

Kubernetes 上的 PHP-FPM + Nginx

[英]PHP-FPM + Nginx on Kubernetes

我們已經在 Kubernetes 集群上托管了許多不同的應用程序——主要是基於 Java 的。

對於 PHP-FPM + Nginx,我們目前的方法是構建一個容器,其中包括 PHP-FPM、Nginx 和 PHP 應用程序源代碼。 但這實際上違反了每個容器一個進程的 docker 規則,因此我們正在考慮如何改進它。 我們嘗試通過使用具有多個容器的 pod 來替換它 - 一個 nginx 和一個 PHP 容器。

現在最大的問題是將源代碼放在哪里。 我最初的想法是使用僅數據容器,我們將其掛載到 nginx 和 PHP-FPM 容器。 問題是,有似乎沒有辦法做到這一點在Kubernetes

我看到的唯一方法是創建一個 sidecar 容器,其中包含源代碼並將其復制到一個 emptyDir 卷,該卷在 pod 中的容器之間共享。

我的問題:PHP-FPM + Nginx 和 Kubernetes 上的數據容器有沒有好的方法,或者在 Kubernetes 上托管 PHP 的最佳實踐是什么(可能仍然使用一個容器來處理所有事情)?

這是一個很好的問題,因為在容器架構的大多數報道中忽略了一個重要的區別——多線程或事件驅動的服務應用程序和多進程服務應用程序之間的區別。

多線程和事件驅動的服務應用程序能夠通過單個進程並發處理多個服務請求。

多進程服務應用程序不是。

Kubernetes 工作負載管理機制與給定服務面臨的實際請求並發級別完全無關——因為不同的並發率本身對自動調整工作負載大小或擴展沒有任何影響。

然而,基本假設是給定的部署單元——一個 pod——能夠同時處理多個請求。

PHP 在幾乎所有部署模型中都是多進程的。 它需要多個進程才能在單個部署單元中處理並發請求。 這些流程是由 FPM 還是由其他一些機制協調是一個實施細節。

所以 - 可以在單個容器中運行 nginx + FPM + PHP,即使它不是單個進程。 進程的數量本身並不重要 - 實際上 Docker 中沒有關於這一點的規則。 支持並發的能力確實很重要。 人們希望在容器/pod 中部署支持並發請求的最小系統,而在 PHP 的情況下,通常將其全部放在單個容器中是最簡單的。

微服務架構的概念是將每個服務單獨運行在不同的集群中,即一個 nginx 集群和一個 php-fpm 集群。 (集群 > Pod > 容器)

現在這些集群應該與其他集群通信,以便 nginx 和 php-fpm 可以正常工作。

至於主要部分,我的代碼放在哪里。 為此,您可以使用許多基於 api 的插件,即 digitalocean、s3 等。如果您想將它們安裝在您的驅動器上,那么在 kubernetes 中可以使用 mountpoints 參數。

暫無
暫無

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

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