如何跨多个可用区启用 AWS EBS Volume?

How to enable AWS EBS Volume across multiple availability zones?

如何从多个可用区访问 AWS EBS 卷?

我的案例详情:

我有一个跨多个可用区的 VPC:

data "aws_availability_zones" "available" {}

module "vpc" {
    source = "terraform-aws-modules/vpc/aws"
    version = "3.10.0"

    name = "${local.project_slug}-main-vpc"
    cidr = "10.0.0.0/16"
    azs = data.aws_availability_zones.available.name
...

在这个集群中,我有一个 max_capacity 为 n:

的托管节点组
module "eks" {
    source  = "terraform-aws-modules/eks/aws"
    version = "17.22.0"

    cluster_name = "${local.project_slug}-main-eks"
    cluster_version = "1.19" # K8s version

    vpc_id = module.vpc.vpc_id
    subnets = module.vpc.public_subnets

    # managed nodes
    node_groups = {
      grey = {
        desired_capacity = 1
        min_capacity     = 1
        max_capacity     = 10
        instance_types = ["t3.medium"]
      }
    }
...

但我只能将 AWS EBY 卷分配给单个可用区:

 resource "aws_ebs_volume" "api" {
     availability_zone = "eu-central-1b"
     size = 5 #GiBs
 }

如果我的 EKS 托管节点组在另一个可用区中提供新节点,则无法安装该卷。

我该怎么做?这里有什么更好的做法?

How can I access a AWS EBS Volume from multiple availability zones?

简短的回答是你不能,EBS 卷绑定到一个可用区(想想一个 data-center 中的磁盘,该磁盘不能同时在多个 data-center 中)。

How would I do this? What's a better practice here?

这取决于“这个”是什么。如果要提供一些共享数据,那么您可以使用 EFS 或 S3 之类的东西。

如果它用于有状态集,您可以有多个节点组,每个节点组都限定在一个 AZ 范围内?