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

时间:2017-12-05 19:11:06

标签: kubernetes kubernetes-helm

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

我想直接通过nginx容器提供静态文件,并仅使用php-fpm来提供动态请求。

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

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

1 个答案:

答案 0 :(得分:2)

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

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

我更喜欢对静态文件使用Persistent Volume声明,对配置文件使用ConfigMap。

解决您的问题。

Php pod将拥有以下k8s资源

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

Nginx pod将拥有以下k8s资源

  • 部署(容器)
  • 服务(内部或外部公开)
  • ConfigMap(自定义nginx.conf)

现在,Deployment Resouces将与其他资源建立关系,例如Persistent volume claim和configmap等。

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

例如,如果主容器重新启动,则初始容器确保IP地址不会更改。但是,如果再次创建pod,则意味着您将再次创建initcontainer,然后Pod将具有新的IP地址。