Для чего используется spec - selector - matchLabels при создании развертывания?
Из кубернетской документации
Поле селектора определяет, как Deployment находит, какими модулями управлять.
Но при создании развертывания я уже определяю шаблон pod как часть развертывания. Итак, зачем мне селекторы?
Предполагается ли это использовать как сервисы, где модули уже запускаются отдельно, а затем попадают под эгиду развертывания, чтобы управлять им вместе?
1 ответ
Ответ на этот вопрос мы можем найти в разделе Развертывания от kubernetes.io
Итак, зачем мне селекторы?
.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
или путем создания другого контроллера, такого какReplicaSet
илиReplicationController
, Если вы сделаете это, первыйDeployment
думает, что он создал эти другие стручки.Kubernetes
не мешает вам делать это. Если у вас есть несколько контроллеров, которые имеют перекрывающиеся селекторы, контроллеры будут сражаться друг с другом и не будут вести себя правильно.
В то время как spec.template.metadata.labels может иметь дополнительные метки, с помощью которых вы можете аннотировать модуль, секция селектора должна закрепить несколько из них, чтобы он знал, какие модули находятся под его управлением