2015-09-21 3 views
7

У меня есть приложение/приложение, которое использует приложение etcd как систему синхронизации и хранилище данных. Я хочу запустить etcd внутри pod, так что все реплики образуют согласованный кластер. Другими словами, поэтому приложение в реплике # 1 может записать «foo» в localhost:4001/v2/keys/my_key, а затем реплика №2 может затем прочитать localhost:4001/v2/keys/my_key и получить «foo» в результате.Как запустить кластер etcd среди pod replicas?

Непонятно, как это можно сделать, поскольку копия pod не является индивидуально адресуемой. Я мог бы теоретически создать сервис «etcd», отображающий порты кластера, но любые запросы будут циклически распределены по всем репликам, поэтому отдельные узлы etcd не смогут найти друг друга.

Я подхожу к этой проблеме правильно?

ответ

0

Я добавил свой вопрос kubernetes/kubernetes#5017

Если кто-то знает ответ, они, надеюсь опубликовать его там.

Я думаю, для этого может потребоваться функция «номинальных услуг» (kubernetes/kubernetes#260), которая еще не реализована, но я не уверен.

1

Там очень хороший пример три узла etcd кластера здесь: https://github.com/coreos/etcd/tree/master/hack/kubernetes-deploy

Они используют отдельные РЦ и услуги для каждой реплики в качестве временного решения, пока не будут добавлены номинальные услуги.

2

Вы можете развернуть etcd на кубернетах с помощью оператора (от extensions/v1beta1) и изображения quay.io/coreos/etcd-operator.

Пример развертывание с размером кластера 3 выглядит следующим образом:

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" 

Обратите внимание на статусе беты этого проект. Однако, по словам сопровождающих, оператор теперь стабилен. Я успешно установил конфигурацию выше, но я не работал ни в одном из них.

Код оператора доступен on github. Там вы можете найти дополнительную документацию.

+1

Вы используете 'apiVersion: etcd.coreos.com/v1beta1' и' kind: Cluster', тогда как пример etcd-operator использует 'apiVersion: etcd.database.coreos.com/v1beta2' и' kind: EtcdCluster'. Каковы различия? https://github.com/coreos/etcd-operator/blob/master/example/example-etcd-cluster.yaml – akauppi