Для чего используется spec - selector - matchLabels при создании развертывания?

18

Из Kubernetes документации :

Поле селектора определяет, как Deployment находит, какими модулями управлять.

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

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

Пэдди
источник

Ответы:

8

Ответ на этот вопрос мы можем найти в разделе Развертывания от kubernetes.io

Итак, зачем мне селекторы?

Цитаты ниже из документации для k8s v 1.14

.spec.selectorявляется обязательным полем, в котором указывается селектор меток для модулей, предназначенных для данного развертывания.

.spec.selectorдолжен совпадать .spec.template.metadata.labels, иначе он будет отклонен API.

В версии API apps / v1 .spec.selector и .metadata.labels не устанавливаются по умолчанию в .spec.template.metadata.labels, если они не установлены. Поэтому они должны быть установлены явно . Также обратите внимание, что .spec.selector является неизменным после создания Развертывания в apps / v1.

Развертывание может прервать блоки, чьи метки соответствуют селектору, если их шаблон отличается от .spec.template или если общее количество таких блоков превышает .spec.replicas. Он вызывает новые модули с .spec.template, если количество модулей меньше желаемого.

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

Проще говоря, нет

Примечание. Не следует создавать другие модули, метки которых соответствуют этому селектору, либо напрямую, либо путем создания другого Deployment, либо путем создания другого контроллера, такого как a ReplicaSetили a ReplicationController. Если вы это сделаете, первый Deploymentдумает, что он создал эти другие модули. Kubernetesне мешает вам делать это. Если у вас есть несколько контроллеров, которые имеют перекрывающиеся селекторы, контроллеры будут сражаться друг с другом и не будут вести себя правильно.

alexander.polomodov
источник
5
Так для чего он используется? Кажется, что вы всегда должны делать так, чтобы селектор совпадал с метками спецификации ... Есть ли случай, когда полезно этого не делать?
Виктор Ноэль
4
Действительно не отвечает на вопрос Почему? - Почему matchLabels существуют и должны совпадать .spec.template.metadata.labels? Какой смысл в этом, как specв любом случае определено ниже, Deploymentпоэтому ясно, какие модули запускаются для развертывания.
Иван
2
Любой, кто сталкивается с этим обсуждением, должен проверить последнюю документацию. Например, в настоящее время .spec.selector не является необязательным полем. Это обязательное поле. kubernetes.io/docs/concepts/workloads/controllers/deployment
SoftwareTheory
Большое спасибо за ваш комментарий. Я думаю, что в новой документации авторы исправили необязательное для обязательного, потому что в старых документах это поле было указано как необязательное, но в следующей строке авторы добавили, что это поле должно быть задано явно :) Так что эффективно это поле также было обязательным
alexander.polomodov
@SoftwareTheory Да, но это все еще не объясняет, почему это требуется, так как шаблон спецификации Pod определен ниже в любом случае.
user168317