运行 Kubernetes 上的多个应用程序。如何创建结构?
Running multiple applications on Kubernetes. How to create the structure?
这更像是一个理论问题。你们如何创建 运行 多个应用程序的 Kubernetes deployments/services/pods 结构?
假设我想在我的服务器上 运行 3 个 Wordpress 网站。为此,我需要:Nginx、MySQL、PHP-FPM 和 Wordpress 代码库。
是否更好地为 Nginx 分拆单独的 pods/services,MySQL,PHP-FPM 将为所有 3 个 Wordpress 网站提供服务并创建 3 个 Wordpress pods/services 3 个网站?
或者为每个网站创建一个单独的 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 有多个容器。在我的例子中,我使用安全作为这样的动机。
这更像是一个理论问题。你们如何创建 运行 多个应用程序的 Kubernetes deployments/services/pods 结构?
假设我想在我的服务器上 运行 3 个 Wordpress 网站。为此,我需要:Nginx、MySQL、PHP-FPM 和 Wordpress 代码库。
是否更好地为 Nginx 分拆单独的 pods/services,MySQL,PHP-FPM 将为所有 3 个 Wordpress 网站提供服务并创建 3 个 Wordpress pods/services 3 个网站?
或者为每个网站创建一个单独的 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.
综上所述,在微服务架构中,您希望您的流程尽可能解耦,以便它们可以单独管理和部署。因此,每个容器每个 Pod 一个进程是有吸引力的。但是,有些情况需要您 运行 每个 Pod 有多个容器。在我的例子中,我使用安全作为这样的动机。