我正在尝试在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创建多个复制控制器?
答案 0 :(得分:0)
您是对的,一个EBS卷只能在给定时间安装在单个EC2上。要解决您的问题,请选择以下选项: