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 上。要解决您有以下选项:
- 使用具有多个复制控制器的多个 EBS 卷
- 使用分布式文件系统(例如 Gluster)并避免 EBS 问题
- 跟随 PetSet (https://github.com/kubernetes/kubernetes/issues/260)
我正在尝试在 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 上。要解决您有以下选项:
- 使用具有多个复制控制器的多个 EBS 卷
- 使用分布式文件系统(例如 Gluster)并避免 EBS 问题
- 跟随 PetSet (https://github.com/kubernetes/kubernetes/issues/260)