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

时间:2016-05-11 08:34:06

标签: amazon-web-services kubernetes amazon-ebs

我正在尝试在Kubernetes中创建一个Cassandra集群。我想使用awsElasticBlockStore来使数据持久化。结果,我为相应的Replication Controller编写了一个类似于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时,我看到如下错误:

  

同步pod时出错,跳过:无法附加EBS磁盘“aws:// ap-northeast-1c / vol-xxxxxxxx”:附加EBS卷时出错:VolumeInUse:vol-xxxxxxxx已附加到实例

这是可以理解的,因为只能从一个节点安装ELB卷。因此,只有一个pod可以成功安装卷和启动,而其他一些pod则失败。

这有什么好的解决方案吗?我是否需要为每个pod创建多个复制控制器?

1 个答案:

答案 0 :(得分:0)

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

  • 将多个EBS卷与多个复制控制器一起使用
  • 使用分布式文件系统(例如Gluster)并避免EBS问题
  • 跟随PetSet(this blog post