Как запустить кластер etcd среди реплик подов?

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

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

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


person bk0    schedule 21.09.2015    source источник


Ответы (3)


Вы можете развернуть 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"

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

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

person Friedrich Große    schedule 08.06.2017
comment
Вы используете apiVersion: etcd.coreos.com/v1beta1 и kind: Cluster, тогда как в примере с etcd-operator используются apiVersion: etcd.database.coreos.com/v1beta2 и kind: EtcdCluster. Какие отличия? github.com/coreos/etcd-operator/ blob / master / example / - person akauppi; 03.11.2017

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

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

person JKnight    schedule 18.02.2016
comment
ВНИМАНИЕ: Этот прием совершенно непригоден для производства, так как вы НЕ МОЖЕТЕ удалить узел / реплику, а затем добавить ее снова. В этой настройке нет обнаружения службы! - person peedee; 08.07.2019

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

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

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

person DavidO    schedule 04.10.2015