为 GKE kubernetes 集群选择节点大小

Posted

技术标签:

【中文标题】为 GKE kubernetes 集群选择节点大小【英文标题】:Selecting a node size for a GKE kubernetes cluster 【发布时间】:2017-04-16 22:17:41 【问题描述】:

我们正在讨论生产 GKE 集群的最佳节点大小。

一般来说,小节点多还是大节点少?

例如我们在以下两个选项之间进行选择

    3 x n1-standard-2 (7.5GB 2vCPU) 2 x n1-standard-4 (15GB 4vCPU)

我们在这些节点上运行:

弹性搜索集群 Redis 集群 php API 微服务 节点 API 微服务 3 个单独的 Node / React 网站

【问题讨论】:

为什么不比较 4 x n1-standard-2 和 2 x n1-standard-4,这在价格和 CPU/mem 上是相等的?这将再次与 8 x n1-standard-1 相同。我个人会选择最后一个选项,因为它允许最大粒度,并且可能启用自动缩放(min = 6,max = 8)。这样,您的集群大小可以响应更高的需求,但可以缩小规模。也许将其与某些服务的 Horizo​​ntal Pod Autoscaling 结合起来? @RobertLacok 如果节点上的资源限制不足,节点会在部署期间自动扩展吗? 问题不在于您计划使用什么类型的服务器,而在于哪个服务将使用什么(反应应用程序的资源限制非常小,而您倾向于为 db 或弹性搜索)。为每个部署/rc 设置默认限制很重要,我发现将部署分配给特定类型的机器(节点关联kubernetes.io/docs/user-guide/node-selection)更安全。不考虑部署中的资源配置是不安全的,如果没有严格的资源管理(个人观点),自动缩放是无法理解的 【参考方案1】:

我认为有两点需要考虑:

复制

只有当有足够多的 Pod 运行服务时,Elasticsearch 或 Redis 集群 / sentinel 等服务才能提供可靠的冗余:如果您有 2 个节点、5 个 elasticsearch Pod,则很可能 3 个 Pod 在一个节点上,2 个在另一个:您的最大复制数将是 2。如果您碰巧在同一节点上有 2 个副本 Pod 并且它发生故障,您将丢失整个索引。

[编辑]:如果您使用持久性块存储(这最适合持久性,但设置起来很复杂,因为每个节点都需要自己的块,这使得缩放变得棘手),您不会“丢失整个索引”,但这是真的如果您依赖本地存储。

因此,节点越多越好。

性能

显然,您需要足够的资源。较小的节点资源较少,因此如果 Pod 开始获得大量流量,它将更容易达到其限制并且 Pod 将被弹出。

Elasticsearch 非常消耗内存。您必须弄清楚运行所有这些 Pod 是否需要更大的节点。

最后,随着您的需求增长,您可能希望混合使用不同容量的节点,这些节点在 GKE 中将具有容量标签,可用于设置资源配额以及内存和 CPU 的限制。您还可以添加自己的标签,以确保某些 Pod 最终位于某些类型的节点上。

【讨论】:

you maximum replication will be 2,这是为什么呢? 复制旨在帮助您在硬件或节点故障的情况下。如果您只有 2 个节点,那么您将只有一个副本(复制因子 2)。如果您在同一个节点上有 3 个 ES 实例,并且该节点死亡,则 3 个实例一起死亡。使用 ES,您可能有很多索引,并且它们随机分布在节点上。因此,不建议每个节点拥有超过 1 个实例,因为单个索引和副本有可能最终位于同一节点上。

以上是关于为 GKE kubernetes 集群选择节点大小的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes没有在可用节点上传播pod

GKE 不会将节点缩减为零

GKE 自动缩放无法缩放

在具有私有 GKE 集群的 Terraform 上使用 Kubernetes 提供程序

带有 modprobe 的 GKE 节点

使用工作负载身份为 GKE 节点池绑定 GCP IAM