Зачем мне указывать службу перед развертыванием в одном файле конфигурации Kubernetes? - PullRequest
0 голосов
/ 18 мая 2018

Я пытаюсь понять, почему kubernetes docs рекомендует указать службу перед развертыванием в одном файле конфигурации:

Ресурсы будут созданы в порядке их появления вфайл.Поэтому лучше сначала указать службу, так как это обеспечит, что планировщик может распространять модули, связанные с службой, по мере того, как они создаются контроллером (ами), например, Развертывание.

Делает ли этосреднее распространение модулей между узлами кластера kubernetes?

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

apiVersion: apps/v1
kind: Deployment
metadata:
  name: incorrect-order
  namespace: test
spec:
  selector:
    matchLabels:
      app: incorrect-order
  replicas: 2
  template:
    metadata:
      labels:
        app: incorrect-order
    spec:
      containers:
      - name: incorrect-order
        image: nginx
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: incorrect-order
  namespace: test
  labels:
    app: incorrect-order
spec:
  type: NodePort
  ports:
  - port: 80
  selector:
    app: incorrect-order

Другое объяснение 1015 * заключается в том, что в этом случае некоторые переменные среды с URL-адресом службы не будут установлены для модулей.Однако это также работает нормально, если конфигурация находится внутри одного файла, как в примере выше.

Не могли бы вы объяснить, почему лучше указать службу перед развертыванием в случае одного файла конфигурации?Или, может быть, это какая-то устаревшая рекомендация.

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Вы правы в том, что это влияет на разброс между рабочими узлами.

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

При развертывании, в котором также есть служба, планировщик пытается распределить модули между узлами, независимо от загрузки процессора / памяти (в определенных пределах), чтобы помочь Службе выжить лучше.

Меня удивляет, что само по себе развертывание не приводит к оптимальному распространению, но это не так, по крайней мере пока.

0 голосов
/ 25 мая 2018

Если вы используете DNS в качестве обнаружения службы, порядок создания не имеет значения.

В случае Environment Vars (второй способ K8S предлагает обнаружение службы), порядок имеет значение, потому что как только этопеременные передаются в начальный модуль , их нельзя изменить позже, если изменится определение службы.

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

Если вы создаете ресурс Pod / Deployment с метками, этот ресурс будет открыт через службу после того, как этот последний будет создан (с соответствующим селектором, чтобы указать, какой ресурс выставить).

...