我们可以使用kops ( EC2 )在多节点AWS EC2 K8s集群上运行一个应用程序到本地Kubernetes集群(使用kubeadm进行安装)吗?
我的想法是,如果应用程序运行在基于AWS EC2实例的k8s集群中,那么它也应该在本地k8s集群中运行。我在本地试用是为了测试目的。
这是我到目前为止尝试过的东西,但不起作用。
不幸的是,虽然大多数应用程序荚都是创建的,并且处于运行状态,但其他一些应用程序荚无法创建,因此,我无法在本地集群上运行整个应用程序。
谢谢你的帮助。
发布于 2021-07-18 06:35:20
这是码头和库伯奈特的美丽。它有助于保持您的开发环境与生产相匹配。对于没有自定义资源的简单应用程序,可以将相同的工作负载部署到运行在任何云提供商上的任何集群中。
但是,将相同的工作负载部署到不同的集群的能力取决于一些因素,例如,
我进行了谷歌搜索,并查看了kOps的文档。我找不到任何关于如何部署到本地的信息,而且它只支持公共云提供商。
IMO,您需要找到一种方法来设置本地EKS集群,如果有云本机技术的任何使用,您需要想出一种在本地使用相同方法的替代方法。
发布于 2021-07-18 10:02:18
正如Rajan Panneer Selvam在他的答复中所说的那样,真正的答案是它取决于它,但我想对他的回答做一些扩展,因为您的应用程序应该运行在任何K8S集群上,因为它提供了应用程序所消耗的服务。您正在做的是确保您的应用程序是可移植的良好实践,在一些重要的应用程序中,简单地升级下游服务可以被认为是需要可移植性(平台无关)的环境/平台的变化。
为了帮助你做到这一点,你应该开发一个12因子应用程序(12-FA)或者它的一个最新的衍生产品(12-FA现在有点过时了,很多变化已经被提出了,但大部分都是好的)。
例如,如果您的应用程序使用数据库,那么它应该使用独立于DB的SQL或no-sql,以便您可以将其切换出去。在生产中,您可以在Oracle上运行,但是在您的本地环境中您可以使用MySQL:您的应用程序应该不在乎。凭据和连接字符串应该通过常用的机密和配置映射的K8S技术传递给应用程序,以帮助您实现这一点。所有日志都应该发送到stdout (和stderr),这样您就可以使用日志传送代理将日志发送到比本地文件系统更有用的地方。
如果你在本地运行你的应用程序,那么你必须为生产中提供的每一个“平台”服务提供一个代理,这可能意味着淘汰你认为是你的应用程序的主要组件,但这是正常的,这是注定要发生的。您提供了一个为您的应用层提供服务的平台。从EC2切换到本地可能意味着重新配置入口控制器,使其在不使用ELB的情况下工作,也可能意味着将kubernetes的秘密配置为用于开发磁盘的本地存储,而不是AWS KMS。这可能意味着重新配置持久卷类以使用本地存储而不是EBS。所有这些都是意料之中的,也是正确的。
您不需要做的就是开始编辑微服务,以便在新的环境中工作。如果您发现自己在这样做,那么应用程序就产生了保理和分层错误。平台服务应该提供给使用这些服务的一组微服务,微服务不应该知道这些服务的实现细节。
当然,您的系统中可能有一些不可移植的代码,例如,您可能正在使用某些无法在其他地方运行的特定于Oracle的PL/SQL。应该将此代码提取到为您希望运行的每个数据库提供的配置文件和等效文件中。这并不总是可能的,在这种情况下,您应该尽可能地抽象成孤立的服务,并且您只能在每个新的平台上重新实现这些服务,这可能仍然很费时,但对于大多数非琐碎的系统来说,最终还是值得的。
https://stackoverflow.com/questions/68426431
复制相似问题