繁体   English   中英

Kubernetes - 从 Minikube 到生产

[英]Kubernetes - from Minikube to production

我创建了一个简单的 PHP api 应用程序,它与 mysql 数据库一起使用来存储数据。 我一直在通过 Minikube 在我的 Windows 10 机器上试验 Kubernetes。

我刚刚了解了所涉及的想法,但我不确定如何正确实施。 到目前为止,我已经使用 Kompose 从现有的 docker-compose 文件创建了一组 yaml 文件。 这已经成功了一半。

要将我的应用程序代码放入托管 PHP 的 pod 中,我一直在使用 hostPath 从我的本地计算机共享。 我安装到 minikube 机器并从那里共享。 我无法通过其他方式分享。 应用程序代码托管在 github 存储库中。

我的问题是:

  1. 将我的应用程序代码安装到 pod 中(假设这类似于 docker 中发生的情况)是正确的方法吗? 我不清楚从 docker 集线器检索到的图像上究竟保存了哪些信息。 尽管我已经阅读了将构建环境与您的机器隔离的容器。

  2. 这种方法如何转化为托管在云上的生产环境? 我看到有各种存储类型。 例如,我想尝试在 AWS 上进行部署,只是想看看这在实践中是如何工作的。

我真的在寻找 go 的指导,这些指导来自 web 在我的机器上工作的教程,以及可以为托管在云上的客户做的事情。 随着时间的推移,这可能会扩展到更微服务风格的架构。

您描述的方法主要用于开发设置,您希望将代码作为卷安装到容器中,这样您就不必在每次代码更改时重新构建。 通常使用 docker-compose 文件完成。

对于生产设置,您希望 docker 映像正常工作,并且只将卷安装到您想要持久的数据,通常数据库是核心示例。 为此,EKS 已深度集成到 AWS 基础设施中,并将按需创建 EBS 卷。 大多数情况下,您不需要配置任何卷,甚至不需要关心(除非您需要多个读写卷来进行扩展)。

对于 PHP 应用程序,您真的不应该在 pod 中保留任何数据,因为当您需要扩展应用程序时会产生其他问题。 此外,管理需要持久化的文件的一个好方法是 S3(AWS 简单存储服务)。

所以一般来说,您需要为每个应用程序部署一个服务来访问该应用程序上的每个 pod,然后使用入口 object 将流量从互联网路由到每个 pod。

您的应用程序 docker 图像确实是核心。 您只需在内部使用代码构建它。 确保使用environment变量或配置文件传递配置,以便您可以连接到数据库。

现在对于 kubernetes,对于每个组件(例如 PHP 应用程序,MySQL),您很可能会创建一个指向 docker 映像的deployment k8s 清单并添加一些配置环境变量。

对于生产,您将需要持久化volume aws上,您可以简单地使用EBS支持的volumes

要从 Internet 获取流量到您的 PHP 应用程序,您需要添加一个或多个 k8s 组件:

  1. K8s Service清单,在稳定地址上公开您的 PHP 部署/pod。 如果您只有 q 或很少的服务,您可以使用LoadBalancer ,它在 AWS 等云上创建一个 ALB/ELB(可能需要为您的服务添加注释)

  2. 一个ingress ,它只是一个反向代理(轮廓,nginx,traefik)。 在云环境中,它将 map 到 ALB/ELB。 这样做的好处是您可以为所有服务使用一个 ALB,即节省资金。 您还可以在一处配置路由路径或 TLS 终止。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM