Поле выбора определяет, как развертывание находит, какими модулями нужно управлять.
Но при создании развертывания я уже указываю шаблон модуля как часть развертывания. Итак, зачем мне еще нужны селекторы?
Предполагается, что он будет использоваться как службы, где модули уже запускаются отдельно, но позже объединены под эгидой Deployment для совместного управления?
Ответ на этот вопрос мы найдем в разделе Развертывания из 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 для совместного управления?
Проще говоря, Нет
Примечание. Не следует создавать другие модули, метки которых соответствуют этому селектору, напрямую, путем создания другого модуля.
Deployment
, или создав другой контроллер, напримерReplicaSet
илиReplicationController
. Если вы это сделаете, первоеDeployment
думает, что создал эти другие стручки.Kubernetes
не мешает вам это делать. Если у вас есть несколько контроллеров, у которых есть перекрывающиеся селекторы, контроллеры будут бороться друг с другом и не будут вести себя правильно.