Kubernetes 集群最佳实践

Posted

技术标签:

【中文标题】Kubernetes 集群最佳实践【英文标题】:Kubernetes cluster best practice 【发布时间】:2016-09-08 22:17:35 【问题描述】:

我正在使用 Kubernetes 开发一个新项目,我需要三个环境:DEV、QA 和 PROD。

最推荐的是,创建多个集群或创建一个大集群,按命名空间分隔环境。

【问题讨论】:

【参考方案1】:

您是要拥有一个 prod 集群还是多个 prod 集群?需要考虑的一件事是更新集群管理软件(到新的 k8s 版本)可能会影响您的应用程序。如果您只计划拥有一个 prod 集群,我建议您分别运行 qa 和 dev 以便您可以先升级这些集群以解决任何问题。如果您将拥有多个 prod 集群,那么您可以一次升级它们以确保应用程序可用性并在环境之间共享集群更有意义。

【讨论】:

我想使用单pod集群,我会按照你的建议创建。谢谢。【参考方案2】:

命名空间不会给你带来孤立,目前它只是 dns 中的一个不同的子域。每个应用程序最好有命名空间。 我强烈建议您为 prod 设置两个集群(在更新 k8s 的情况下)和一个用于 dev/qa 的集群。

【讨论】:

为了进一步澄清,即使命名空间用于隔离应用程序,在某些边缘情况下,运行命名空间 A 的应用程序也可能通过资源消耗影响命名空间 B 中的应用程序。此外,应用程序可以跨命名空间进行通信,这可能不是您想要的。【参考方案3】:

看看这篇博文:Checklist: pros and cons of using multiple Kubernetes clusters, and how to distribute workloads between them。

我想强调一些优点/缺点:

拥有多个集群的原因

生产/开发/测试分离:尤其适用于测试新版本的 Kubernetes、服务网格、其他集群软件 合规性:根据某些规定,某些应用程序必须在单独的集群/单独的 *** 中运行 更好的安全隔离 云/本地:在本地服务之间分配负载

拥有单个集群的原因

减少设置、维护和管理开销 提高利用率 降低成本

考虑到一个不太昂贵的环境,平均维护,但仍确保生产应用程序的安全隔离,我建议:

1 个用于 DEV/QA 的集群(由命名空间分隔,甚至可能是隔离的,使用网络策略,如 Calico) 1 个用于 PROD 的集群

【讨论】:

【参考方案4】:

绝对同意您需要多个集群: 任何对 k8s 至关重要的东西,在升级过程中可能会失败,或者因为你在某个地方搞砸了,都会影响整个集群。

例如,我遇到了一个 DNS 问题,它在我的集群中造成了严重破坏;所有命名空间都受到影响。

升级通常没什么大不了的,但有一天你可能会遇到障碍;如果 kubelet 失败的时间过长,你的 pod 就会被杀死。

因此,最好先升级您的测试/开发环境,然后再升级到 prod。

【讨论】:

我一直在争论使用命名空间来定义我的环境的优点,我认为你们这里的 cmets 说服了我......

以上是关于Kubernetes 集群最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

kubeadm安装Kubernetes 1.14最佳实践

Kubernetes日志的6个最佳实践

验证Kubernetes YAML的最佳实践和策略

ACK One GitOps 最佳实践

统一观测丨使用 Prometheus 监控 Nginx Ingress 网关最佳实践

9项你不得不知道的Kubernetes安全最佳实践