Почему нужно определять метки развертывания несколько раз? Чтобы быстро объяснить свой вопрос, приведу пример.
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:
который соответствует существующий Модули - и в этом случае Развертывание возьмет на себя ответственность за эти модули, и пока они соответствуют описанным критериям, ничего в расписании модулей не изменится, но фактически они теперь принадлежат Развертыванию, и оно будет контролировать их.