我想知道构建Kubernetes集群的最佳实践。对于一个环境(例如生产),我的集群中应该有什么组织?
示例:每个技术栈1个集群,每个暴露区域1个集群(internet, private…),1个集群包含所有…
?谢谢你的帮助
我不是Kubernetes专家,所以我会给你一些通用的指导,直到有更了解的人参与进来。
- 按技术堆栈-编号。我想不出有什么价值。
- 通过"暴露"-是的。如果一个集群被破坏,损害将仅限于该集群。
- 按解决方案-是
解决方案vs技术堆栈
"Solution"在这里,您有许多系统来解决特定的业务问题或领域。这可以是功能性的,例如财务vs CRM vs HR。
字面意义上的技术栈不太可能是相关的。的确,不同的解决方案并不罕见& &;系统应该由不同的技术组成(你是这个意思吗?)——但这通常是副产品,而不是主要驱动因素。
假设你有两个主要的解决方案(例如财务和CRM)。你可能会遇到影响其中一个而不影响另一个的情况。
-
计划的功能变更:例如推出一个主要版本。多年来,面向对象的程序员和架构师通过设计内聚但松散耦合的系统(参见:内聚和耦合的区别)以及稳定依赖原则等东西,已经确定了这一点。两个解决方案依赖于同一个集群使得它们在这方面是耦合的,这。
-
计划的基础设施变更:如补丁、维护、资源重新分配等
-
计划外变更:如计划外中断、安全漏洞。
结论
查看将在集群上运行的是什么,以及它们是哪些解决方案的一部分,并考虑按照这些线进行分离。
最终的答案可能是两者的结合,在安全关注和解决方案(即更改)边界之间的某种平衡。
最好的方法是使用1个kubernetes集群并将工作节点置于私有子网中。您可以选择将控制平面置于受限访问的公共子网中,如VPN cidr等。
如果您有多个团队或应用程序堆栈,我建议为每个堆栈使用不同的命名空间,因为这会创建资源的逻辑分离。
同时,检查可以在kubernetes上应用的资源限制和配额,以防止过度消耗资源。
并且,正如您提到的多个应用程序堆栈,我假设您将为每个应用程序或类似的东西公开多个服务。我强烈建议使用入口控制器(nginx或任何东西)作为每个应用程序的单点入口。您可以让多个应用程序监听一个负载均衡器。
另外,使用prometheus或ELK监视,因为它们非常适合监视k8s组件和指标。
并且,我强烈建议使用kubecost和kubebench工具来增强您的k8s集群。
Kubecost用于k8s组件的成本分析和报告,kubebench将根据CIS标准审核您的集群,并向您报告需要哪些改进以及在何处进行改进。
请注意,上述建议是基于最佳实践和成本效率。