2015-09-21 13 views
7

Ho un pod/servizio che esegue un'applicazione che utilizza etcd come sistema di sincronizzazione e archivio dati. Voglio eseguire etcd all'interno del pod, in modo tale che tutte le repliche formino un cluster coerente. In altre parole, l'applicazione in replica n. 1 può scrivere "pippo" su localhost:4001/v2/keys/my_key e quindi la replica n. 2 può quindi leggere localhost:4001/v2/keys/my_key e ottenere "pippo" come risultato.Come eseguire un cluster etcd tra le repliche dei pod?

Non è chiaro come questo può essere fatto, poiché le repliche di pod non sono individualmente indirizzabili. In teoria, potevo creare un servizio "etcd" che esponesse le porte del cluster, ma ogni richiesta avrebbe fatto il round-robin a tutte le repliche in modo che i singoli nodi etcd non fossero in grado di trovarsi l'un l'altro.

Mi sto avvicinando a questo problema nel modo corretto?

risposta

2

È possibile distribuire etcd su kubernetes utilizzando un operatore (da extensions/v1beta1) e l'immagine quay.io/coreos/etcd-operator.

Una distribuzione esempio con una dimensione dei cluster di 3 si presenta così:

apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: etcd-operator 
spec: 
    replicas: 1 
    template: 
    metadata: 
     name: etcd-operator 
     labels: 
     app: etcd 
     component: operator 
    spec: 
     containers: 
     - name: etcd-operator 
     image: quay.io/coreos/etcd-operator:v0.3.0 
     env: 
     - name: MY_POD_NAMESPACE 
      valueFrom: { fieldRef: { fieldPath: metadata.namespace } } 
     - name: MY_POD_NAME 
      valueFrom: { fieldRef: { fieldPath: metadata.name } } 

--- 

apiVersion: etcd.coreos.com/v1beta1 
kind: Cluster 
metadata: 
    name: etcd-cluster 
    labels: 
    app: etcd 
    component: cluster 
spec: 
    size: 3 
    version: "3.1.8" 

Si prega di essere a conoscenza dello stato di beta di questo progetto. Tuttavia, secondo i manutentori l'operatore è ora stabile. Ho implementato correttamente la configurazione di cui sopra, ma non ho eseguito nulla di questo in produzione.

Il codice operatore è disponibile on github. Puoi trovare ulteriore documentazione lì.

+1

Si sta utilizzando 'apiVersion: etcd.coreos.com/v1beta1' e' kind: Cluster', mentre l'esempio di eccd-operator usa 'apiVersion: etcd.database.coreos.com/v1beta2' e' kind: EtcdCluster'. Quali sono le differenze? https://github.com/coreos/etcd-operator/blob/master/example/example-etcd-cluster.yaml – akauppi

Problemi correlati