【问题标题】:How to ensure the node and volume availability zones (AZs) within an AWS EKS Cluster remain consistent during node group rolling upgrades?如何确保 AWS EKS 集群中的节点和卷可用区 (AZ) 在节点组滚动升级期间保持一致?
【发布时间】:2022-06-19 02:22:36
【问题描述】:

在 AWS EKS 节点组滚动升级后,我无法确保我的 pod 重新连接到它们的 PV。问题是节点本身从 AZ us-west-2b 移动到 us-west-2c,但 PV 仍保留在 us-west-2b

节点上的标签是topology.kubernetes.io/zone=us-west-2c,而PV上的标签仍然是topology.kubernetes.io/zone=us-west-2b,因此升级完成后,旋转的pod上会显示卷关联性检查警告:

0/1 nodes are available: 1 node(s) had volume node affinity conflict.

Per the AWS upgrade docs:

升级受管节点组中的节点时,升级后的节点 在与正在启动的相同可用区中启动 升级了。

但情况似乎并非如此。有没有办法始终强制将节点创建到升级前它们所在的同一可用区?

注意:这是一个单节点 AWS EKS 集群(最大值设置为 3),但我认为这无关紧要。

【问题讨论】:

  • 通常每个 AZ 应该有一个节点组,而不是一组有多个 AZ 来处理 PV。我相信 cluster-autoscaler 文档状态类似,但这里是 EKS 最佳实践指南的相关部分:aws.github.io/aws-eks-best-practices/cluster-autoscaling/…
  • 要点是这是 AWS 自动缩放组的限制。如果您有一个多 AZ 组,则不能请求特定 AZ 中的实例(您需要卷附件)
  • 啊哈,谢谢@jordanm - 所以在 EKS 节点组创建期间,将节点组限制在单个 AZ 是确保后续升级永远不会在单个 AZ(以及 PV 和节点)之外创建节点的解决方案然后留在同一个AZ)?
  • 是的,这应该可以解决它尝试用错误 AZ 的实例替换的问题,但是如果您还使用集群自动缩放器,请注意 balance-similar-node-groups=true 配置设置也是必需的按预期工作。

标签: amazon-web-services amazon-eks


【解决方案1】:

是的,这是可能的,您需要在创建节点组时为其强制执行 AZ。使用 kubectl 时,您可以使用 cli:

eksctl create cluster --name=cluster --zones=eu-central-2a,eu-central-2b --node-zones=eu-central-2a

使用 terraform 时:

  module "eks" {
  source          = "terraform-aws-modules/eks/aws"
  version         = "= 14.0.0"
  cluster_version = "1.17"
  cluster_name    = "cluster-in-one-az"
  subnets         = ["subnet-a", "subnet-b", "subnet-c"]

  worker_groups = [
    {
      instance_type = "m5.xlarge"
      asg_max_size  = 5
      subnets  = ["subnet-a"]
    }
  ]

subnet-a 属于创建 PV 的所需可用区。

【讨论】:

    猜你喜欢
    • 2022-07-28
    • 1970-01-01
    • 2020-08-25
    • 2020-04-16
    • 2019-10-22
    • 2021-11-02
    • 2020-08-18
    • 2021-09-08
    • 2022-11-01
    相关资源
    最近更新 更多