Ich versuche, einen Kassandra-Cluster in Kubernetes zu erstellen. Ich möchte awsElasticBlockStore
verwenden, um die Daten persistent zu machen. Als Ergebnis habe ich wie folgt für die entsprechenden Replication-Controller eine YAML-Datei geschrieben:Kubernetes: Wie kann ich die Anzahl der Replikate mit awsElasticBlockStore auf mehr als 1 setzen?
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
jedoch nur eine Hülse mit dieser Konfiguration ordnungsgemäß gestartet werden kann.
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
cassandra-rc-xxxxx 0/1 ContainerCreating 0 5m
cassandra-rc-yyyyy 1/1 Running 0 5m
Wenn ich $ kubectl describe pod cassandra-rc-xxxxx
laufen, sehe ich einen Fehler wie den folgenden:
Fehler pod synchronisiert werden, das Überspringen: Konnte nicht EBS Disk „aws anhängen: // ap-Nordost-1c/vol-xxxxxxxx „: Fehler Anbringen EBS Volumen: VolumeInUse: vol-xxxxxxxx ist bereits auf eine Instanz befestigt
Es ist verständlich, weil ein ELB Volumen von nur einem Knoten befestigt werden kann. Daher kann nur ein Pod den Datenträger erfolgreich mounten und booten, während andere einfach fehlschlagen.
Gibt es dafür eine gute Lösung? Muss ich mehrere Replikations-Controller für jeden Pod erstellen?
Danke! Ich habe tatsächlich mehrere Replikations-Controller für diese Einschränkung erstellt und sie funktionieren bisher gut. – aeas44