Как мы можем создать сервисные зависимости, используя kubernetes - PullRequest
0 голосов
/ 13 июня 2018

У меня есть 2 услуги.Один содержит 2 реплики pod для веб-приложения, которое зависит от другой бэкэнд-службы, имеющей pod (2 реплики) для контейнеров MySQL.

В веб-приложении используются переменные среды, заданные бэкэнд-службой DB.Все json находятся в одном каталоге.

Есть ли способ выразить зависимости, чтобы kubectl всегда создавал (и запускал) бэкенд-модули и службы перед тем, как запускать службу веб-приложений?Я использовал kubedeam для создания кластера.

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Я могу предложить два решения:

Во-первых, присоединить контейнер init к веб-серверам, которые ждут, пока MySQL будет запущен и работает.Развертывание будет выглядеть примерно так:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: web
  replicas: 2
  template:
    metadata:
      labels:
        app: web
    spec:
      initContainers:
      - name: init-wait
        image: alpine
        command: ["sh", "-c", "for i in $(seq 1 300); do nc -zvw1 mysql 3306 && exit 0 || sleep 3; done; exit 1"]
      containers:
      - name: web
        image: web-server
        ports:
        - containerPort: 80
          protocol: TCP

Он использует netcat, чтобы пытаться запускать TCP-соединение со службой mysql через порт 3306 каждые 3 секунды.Как только соединение будет установлено, init-контейнер завершится и веб-сервер запустится нормально.

Второй вариант - использовать Mirantis AppController .Это позволяет вам создавать объекты зависимости по мере необходимости между развертыванием сервера и базы данных.Проверьте их репо для полной документации.

0 голосов
/ 13 июня 2018

Используйте датчик готовности или контейнер инициализации, см. здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...