Назад | Перейти на главную страницу

Почему мне нужно явно определять ярлыки несколько раз?

Почему нужно определять метки развертывания несколько раз? Чтобы быстро объяснить свой вопрос, приведу пример.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: app
# 1st Time
  labels:
    app: app
    tier: backend
spec:
  selector:
# 2nd Time
    matchLabels:
      app: app
      tier: backend
  template:
    metadata:
# 3rd time
      labels:
        app: app
        tier: backend

Моя первая проблема заключается в том, что я действительно не мог найти веской причины для spec.selector.matchlabels существовать вообще. spec.selector.matchlabels должен соответствовать spec.template.metadata.labels право?

ОПИСАНИЕ:

Селектор этикеток для капсул. Существующие ReplicaSet, чьи поды выбраны, будут затронуты этим развертыванием. Он должен совпадать с метками шаблона пакета.

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


Моя вторая проблема, на которую может быть более разумный ответ: почему вам нужно явно определять метки развертывания и метки шаблонов? Разве они не должны соответствовать друг другу или есть случаи, когда они могут не соответствовать друг другу? Я просто неправильно их использую? Нет четкой документации по их использованию против ярлыков шаблона. : /

Если я делаю или понимаю что-то не так, пожалуйста, укажите! : D

Почему нужно определять метки развертывания несколько раз?

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

Я перейду к tl; dr, прежде чем ответить на остальные ваши вопросы: если ваши развертывания используйте одинаковые значения для всех трех меток, тогда вы можете использовать якоря yaml чтобы остановить копипаст:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels: &labels
    app: app
    tier: backend
spec:
  selector:
    matchLabels: *labels
  template:
    metadata:
      labels: *labels

Моя первая проблема заключается в том, что я действительно не мог найти никаких веских причин для существования spec.selector.matchlabels. spec.selector.matchlabels должны соответствовать spec.template.metadata.labels, верно?

В selector:matchLabels: должен быть подмножество ярлыков, примененных к модулю, но они не должны совпадать именно, иначе это ограничило бы метки, которые мог быть применены к поду, так как дополнительные сделают недействительным matchLabels: и модуль больше не будет управляться с помощью развертывания.

Моя вторая проблема, на которую может быть более разумный ответ: почему вам нужно явно определять метки развертывания и метки шаблонов? Разве они не должны соответствовать друг другу или есть случаи, когда они могут не соответствовать друг другу? Я просто неправильно их использую? Нет четкой документации по их использованию против ярлыков шаблона. : /

В Развертывание метки - это метаданные для вашего собственного использования - планировщик Kubernetes ни в малейшей степени не сверяется с ними, насколько мне известно. Стручокs - единица планирования: все остальное просто учитывает кубернеты controller-manager следить за желаемым состоянием мира. Если вы хотите иметь возможность быстро идентифицировать все развертывания, созданные командой "secops", вы могли бы сказать kubectl get deploy -l team=secops и он с радостью вернет вам список. Или release=alpha, или deployed-by=gitlab или что угодно. Это просто метаданные.

В шаблон метаданные - это то, как вы определяете метки, которые будет применяется к объектам, которые еще не существуют - Deployment по определению описывает будущее состояние мира, и поэтому вам нужно описать, как вы хотите, чтобы вещи были помечены при их создании. Затем вы должны быть в состоянии описать набор всех модулей, которые считаются «членами» Deployment. Это возможно, и я даже использовал его несколько раз, чтобы создать новый Deployment с selector: который соответствует существующий Модули - и в этом случае Развертывание возьмет на себя ответственность за эти модули, и пока они соответствуют описанным критериям, ничего в расписании модулей не изменится, но фактически они теперь принадлежат Развертыванию, и оно будет контролировать их.