运行 Kubernetes 上的多个应用程序。如何创建结构?

Running multiple applications on Kubernetes. How to create the structure?

这更像是一个理论问题。你们如何创建 运行 多个应用程序的 Kubernetes deployments/services/pods 结构?

假设我想在我的服务器上 运行 3 个 Wordpress 网站。为此,我需要:Nginx、MySQL、PHP-FPM 和 Wordpress 代码库。

  1. 是否更好地为 Nginx 分拆单独的 pods/services,MySQL,PHP-FPM 将为所有 3 个 Wordpress 网站提供服务并创建 3 个 Wordpress pods/services 3 个网站?

  2. 或者为每个网站创建一个单独的 pods/service 更好,因此分组将是:

    • Pod1:Nginx,MySQL,PHP-FPM,Wordpress
    • Pod2:Nginx,MySQL,PHP-FPM,Wordpress
    • Pod3:Nginx,MySQL,PHP-FPM,Wordpress

对于选项 2,我需要以某种方式将特定网站流量路由到特定 service/pod

Kubernetes 非常灵活,正如您所发现的那样,它允许您以多种方式构建您的应用程序。作为一般经验法则,每个 pod 每个容器只有 运行 个进程。但是,运行在一个 pod 中安装多个容器绝对是有效的用例。我认为对于您的用例,您可以使用这两种方法。

让我尝试分解您的每个组件:

MySQL
我肯定会 运行 这在它自己的吊舱中。我会把它包装在一个 StatefulSet 中,并在它前面加上它自己的 Service

Nginx + Wordpress
在我看来,你是否 运行 在一个或两个 pod 中使用这两个进程取决于你如何使用 tls,如果有的话。众所周知,Wordpress 非常容易受到攻击。因此,也许你的 Nginx 配置中有规则来限制对某些路径、方法等的访问。如果你 运行 Nginx 和 Wordpress 在同一个 pod 中,那么你可以只公开 Nginx 端口,这是流量的唯一方式如果它通过 Nginx 到达 Wordpress 容器。如果您 运行 这些容器是分开的 pods,那么从安全的角度来看,您将需要一些其他方法来确保到您的 Wordpress pod 的入站流量仅来自您的 Nginx pod。您可以使用 NetworkPolicy 资源完成此操作,或者您可以在这两个 pods.

之间使用相互 TLS

综上所述,在微服务架构中,您希望您的流程尽可能解耦,以便它们可以单独管理和部署。因此,每个容器每个 Pod 一个进程是有吸引力的。但是,有些情况需要您 运行 每个 Pod 有多个容器。在我的例子中,我使用安全作为这样的动机。