应用程序文件夹应该如何在 kubernetes 中的 nginx 和 php-fpm 容器之间正确共享?

ava*_*sin 5 kubernetes kubernetes-helm

我有一个带有public文件夹的php 应用程序,其中包含index.php将 php 请求作为静态文件处理的文件。

我想直接通过nginx容器传递静态文件,并且只使用php-fpm来传递动态请求。

如何实现?据我了解,有两种方法:

  1. 使用相同的应用程序文件夹创建两个单独的容器:第一个将使用 nginx,它提供静态服务并将动态请求委托给第二个,php-fpm 将位于其中。
  2. 第二种解决方案是使用persistentVolumeClaim,但这也需要某种同步魔法 ( initContainers)。

最佳做法是什么?

Sur*_*noi 2

首先我们说有 2 个 pod,分别是 Nginx Pod 和 Php pod。现在有两件事需要与这些 pod 相关联。

  • 静态文件(公共文件夹)
  • 配置文件(nginx.conf)

我更愿意对静态文件使用持久卷声明,对配置文件使用 ConfigMap。

您的问题的解决方案。

Php pod 将具有以下 k8s 资源

  • 部署(容器)
  • 服务(将其暴露在内部)
  • PersistentVolumeClaim(适用于公用文件夹)
  • ConfigMap(环境变量,例如数据库信息)

Nginx pod 将具有以下 k8s 资源

  • 部署(容器)
  • 服务(将其暴露在内部或外部)
  • ConfigMap(自定义nginx.conf)

现在部署资源将与其他资源(例如持久卷声明和配置映射等)建立关系。

据我了解,InitContainer 可以帮助 Pod 拥有一致的网络命名空间并为主容器组织文件系统,它为主容器提供所有必要的资源,例如服务帐户、pvc、configmap。

例如,如果主容器重新启动,那么 init 容器请确保 IP 地址不会更改。但是,如果您再次创建 pod,则意味着您正在再次创建 initcontainer,那么 Pod 将具有新的 IP 地址。