J'essaie de créer un cluster Cassandra dans Kubernetes. Je veux utiliser awsElasticBlockStore
pour rendre les données persistantes. En conséquence, j'ai écrit un fichier YAML comme suit pour le contrôleur de réplication correspondant:Kubernetes: Comment définir le nombre de réplicas supérieur à 1 en utilisant awsElasticBlockStore?
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
Cependant, un seul pod peut être correctement lancé avec cette configuration.
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
cassandra-rc-xxxxx 0/1 ContainerCreating 0 5m
cassandra-rc-yyyyy 1/1 Running 0 5m
Quand je lance $ kubectl describe pod cassandra-rc-xxxxx
, je vois une erreur comme suit:
erreur pod synchronisation, sauter: impossible d'attacher EBS disque « aws: // ap-nord-1c/vol-xxxxxxxx « : erreur de fixation volume EBS: VolumeInUse: vol-xxxxxxxx est déjà associé à une instance
Il est compréhensible en raison d'un volume ELB peut être monté d'un seul noeud. Ainsi, un seul pod peut monter le volume et le démarrage avec succès, tandis que d'autres échouent tout simplement.
Y at-il une bonne solution pour cela? Ai-je besoin de créer plusieurs contrôleurs de réplication pour chaque pod?
Merci! J'ai effectivement créé plusieurs contrôleurs de réplication pour cette restriction et ils fonctionnent bien jusqu'à présent. – aeas44