Kubernetes:如何使用 awsElasticBlockStore 将副本数设置为大于 1?

Kubernetes: How can I set the number of replicas more than 1 using awsElasticBlockStore?

我正在尝试在 Kubernetes 中创建一个 Cassandra 集群。我想使用 awsElasticBlockStore 使数据持久化。因此,我为相应的复制控制器编写了如下所示的 YAML 文件:

apiVersion: v1
kind: ReplicationController
metadata:
  name: cassandra-rc
spec:
  # Question: How can I do this?
  replicas: 2
  selector:
    name: cassandra
  template:
    metadata:
      labels:
        name: cassandra
    spec:
      containers:
        - resources:
            limits :
              cpu: 1.0
          image: cassandra:2.2.6
          name: cassandra
          ports:
            - containerPort: 7000
              name: comm
            - containerPort: 9042
              name: cql
            - containerPort: 9160
              name: thrift
          volumeMounts:
            - name: cassandra-persistent-storage
              mountPath: /cassandra_data
      volumes:
        - name: cassandra-persistent-storage
          awsElasticBlockStore:
            volumeID: aws://ap-northeast-1c/vol-xxxxxxxx
            fsType: ext4

但是,使用此配置只能正确启动一个 pod。

$ kubectl get pods
NAME                 READY     STATUS              RESTARTS   AGE
cassandra-rc-xxxxx   0/1       ContainerCreating   0          5m
cassandra-rc-yyyyy   1/1       Running             0          5m

当我 运行 $ kubectl describe pod cassandra-rc-xxxxx 时,我看到如下错误:

Error syncing pod, skipping: Could not attach EBS Disk "aws://ap-northeast-1c/vol-xxxxxxxx": Error attaching EBS volume: VolumeInUse: vol-xxxxxxxx is already attached to an instance

可以理解,因为ELB Volume只能从一个节点挂载。所以只有一个 pod 可以成功挂载卷和启动,而其他的则失败。

有什么好的解决办法吗?我需要为每个 pod 创建多个 Replication Controller 吗?

你是对的,一个 EBS 卷在给定时间只能安装在一个 EC2 上。要解决您有以下选项: