OpenShift — как модули могут разрешать имена друг друга

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

Вручную я изменил /etc/hosts в менеджере и добавил всех агентов, а в агентах я добавил менеджера и всех остальных агентов.

Теперь я хотел автоматизировать это, предположим, я добавляю новый агент, я хочу, чтобы он разрешал менеджер и хост (я могу сделать часть этого, передав имя менеджера как переменную env и с помощью сценария оболочки добавить его в /etc/hosts, не идеальный способ, но все же решение). Но вторая часть будет более сложной, заставить менеджера разрешать каждого нового агента, а также разрешать всех остальных агентов в той же службе.

Мне было интересно, есть ли способ, чтобы каждый модуль в кластере мог разрешать имена других?

У меня есть служба cloudera-manager с одним модулем и другая служба cloudera-agent с, скажем, 3 агентами.

у тебя есть идеи ?

благодарю вас.


person Mohammed Elmehdi EZ-GHARI    schedule 28.06.2017    source источник


Ответы (2)


Не уверен, но похоже, что вы могли бы извлечь выгоду из StatefulSets.

Существуют и другие способы получить IP-адреса других модулей (например, использование безголового сервиса или прямой запрос к serverAPI), но StatefulSets обеспечивают:

  • Стабильные, уникальные сетевые идентификаторы

  • Стабильное, постоянное хранилище.

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

person rrh    schedule 28.06.2017
comment
Спасибо @lhuser123 за ответ. У вас есть примеры таких приложений? Я хочу увидеть их конфигурацию развертывания, чтобы лучше понять. Я могу разрешать модули, используя их IP-адреса, я хочу получить разрешение имен. благодарю вас - person Mohammed Elmehdi EZ-GHARI; 29.06.2017
comment
Взгляните на этот пример. Прочтите описание второго созданного сервиса. Это безголовый сервис, похожий на тот, который объяснил @jbndlr. Это должно позволить вам получить разрешение имени для каждого модуля. Имя будет примерно таким: podName.service.namespace.svc... .В statefulSet каждый модуль будет иметь стабильное имя, которое не изменится, даже если он будет перенесен на другой узел. - person rrh; 29.06.2017

Если вы хотите, чтобы все модули работали в рамках определенной службы, обязательно используйте безголовую службу (например, установите clusterIP: None). Затем вы можете запросить службу на своем локальном DNS-сервере и получить A-записи для всех назначенных ему подов:

---
apiVersion: v1
kind: Service
metadata:
  name: my-sv
  namespace: my-ns
  labels:
    app: my-app
spec:
  clusterIP: None
  selector:
    app: my-app

Затем запустите свои поды (не забудьте указать app: меток для назначения) и запросите свой DNS-сервер с любого из них:

kubectl exec -ti my-pod --namespace=my-ns -- /bin/bash
$ nslookup my-sv.my-ns.svc.cluster.local
Server:     10.255.3.10
Address:    10.255.3.10#53

Name:   my-sv.my-ns.svc.cluster.local
Address: 10.254.24.11
Name:   my-sv.my-ns.svc.cluster.local
Address: 10.254.5.73
Name:   my-sv.my-ns.svc.cluster.local
Address: 10.254.87.6
person jbndlr    schedule 29.06.2017
comment
спасибо @jbndlr за ваш ответ, на самом деле я думаю, что в моем случае может быть полезно хранить модули в разных службах. Я могу разрешить любые другие модули в проекте, используя IP-адреса, но мне нужно разрешение через имя хоста. - person Mohammed Elmehdi EZ-GHARI; 29.06.2017