在大规模环境中安全部署隔离的Kubernetes组件

81次阅读
没有评论

问题描述

在设计大规模基础设施应用程序的部署时,如何安全地部署隔离的Kubernetes组件是一个重要问题。用户提出了一些假设,并针对这些假设提出了一些问题:
1. 在网络上将Kubernetes组件相互隔离是一个好的做法,因为网络提供了一层安全控制。
2. 在大型K8S部署环境中,可能会有多个Kubernetes部署实例。每个Kubernetes部署包含诸如etcd、kube API服务器、调度器、控制器管理器等组件。

基于上述假设,以下是问题:

Q1a) 如何扩展Kubernetes的管理/控制平面?例如,如何从1个etcd服务器扩展到10个etcd服务器?

Q1b) 在一个拥有不同业务单位的大型组织中,是为每个业务单位部署一个K8S实例(主/备)呢,还是部署多个为整个组织提供服务的K8S实例?

Q2) 针对部分(1b)描述的每种部署方法,如何协调多个Kubernetes实例以获取主视图,以便监视在Kubernetes上运行的所有容器实例?

用户还在评论中提到了一些相关信息,我们将在解决方案中进行引用。

解决方案

请注意以下操作可能涉及版本差异和组织需求的差异,进行操作前务必做好备份。

Q1a) 扩展Kubernetes的管理/控制平面

要扩展Kubernetes的管理/控制平面,特别是etcd服务器,通常会采取高可用性的方法。这意味着你不会将etcd数量从1个扩展到10个,而是将etcd集群中的成员数增加到3个,以确保稳定性和性能。同时,Kubernetes的其他组件如kube API服务器、控制器管理器和调度器也需要按比例扩展。

以下是一些步骤,适用于使用工具如kubeadm的高可用部署:
1. 参考Kubernetes官方文档中的高可用性部署指南,根据文档中的步骤设置etcd集群和其他控制平面组件的高可用性。
2. 使用kubeadm或其他适当的工具,在集群中添加更多的etcd成员以实现高可用性。通常情况下,三个etcd成员是理想的配置。

Q1b) 部署K8S实例:一个实例还是多个实例?

在大型组织中,针对不同的业务单位,部署多个Kubernetes实例是一个常见的做法。这种方法可以避免将所有资源都集中在一个实例中,降低风险。根据组织的需要,可以选择以下策略:

  • 为每个业务单位部署独立实例: 这种方法允许不同业务单位之间的隔离,每个实例可以针对特定的需求进行配置。这种方式适用于业务之间有较强的隔离要求的情况。

  • 部署多个实例服务整个组织: 如果业务单位之间的隔离要求较低,可以考虑部署几个实例来服务整个组织。这可能会在资源利用和管理方面更加高效,但也需要仔细规划以确保资源分配均衡。

无论选择哪种方法,自动化在管理多个实例时非常关键。使用工具如Ansible、Terraform、Tekton或ArgoCD,可以帮助简化配置和管理多个Kubernetes实例。

Q2) 监视多个Kubernetes实例

随着集群的增长,集中式监视所有Kubernetes实例的方式可能变得复杂且不太可行。相反,建议采用分布式监控方法,其中每个集群都有自己的监控解决方案。

以下是一种可能的监控方法:

  1. 每个集群内部监控: 在每个Kubernetes集群内部部署Prometheus(或类似工具),监控该集群的运行状况。你可以使用自监控来检测集群内部的问题,并设置警报。
  2. 跨集群监控: 选择两到三个“ops”集群,在这些集群内部署另一个Prometheus,以确保其他集群的Prometheus正常工作。这些“ops”集群可以用于中央化的告警聚合。

使用Alertmanager将警报配置到一个集中的位置(如Rocket.Chat、Slack频道、Opsgenie等)。对于更高级的需求,还可以考虑使用Thanos等解决方案,以汇总来自多个Prometheus的指标数据。

请注意,随着集群规模的增长,你可能需要处理更多的监控数据,因此需要合理规划资源。

结论

在大规模环境中部署隔离的Kubernetes组件涉及到多个方面,包括高可用性、部署策略和监控方法。根据组织的需求和业务特点,选择适当的方法来确

正文完