Ответ на этот вопрос мы можем найти в разделе Развертывания от 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
не мешает вам делать это. Если у вас есть несколько контроллеров, которые имеют перекрывающиеся селекторы, контроллеры будут сражаться друг с другом и не будут вести себя правильно.
.spec.template.metadata.labels
? Какой смысл в этом, какspec
в любом случае определено ниже,Deployment
поэтому ясно, какие модули запускаются для развертывания.