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


18

З документації Kubernetes :

Поле селектора визначає, як Розгортання знаходить, якими Pods управляти.

Але, створюючи розгортання, я вже вказую шаблон шаблону як частину розгортання. Отже, навіщо мені також будуть потрібні селектори?

Чи слід його використовувати як сервіси, де стручки вже запускаються окремо, але пізніше підводяться під егіду розгортання для управління разом?

Відповіді:


8

Відповідь на це запитання ми можемо знайти у розділі Розгортання від kubernetes.io

Отже, навіщо мені також будуть потрібні селектори?

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

.spec.selector- це обов'язкове поле, яке вказує селектор міток для Pods, на які спрямовано це розгортання.

.spec.selectorмає відповідати .spec.template.metadata.labels, інакше API буде відхилено.

У версії API програми / v1, .spec.selector та .metadata.labels не встановлені за замовчуванням .spec.template.metadata.labels, якщо вони не встановлені. Тому вони повинні бути встановлені явно . Також зауважте, що .spec.selector незмінний після створення Розгортання в додатках / v1.

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

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

Простіше кажучи, ні

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


5
То для чого він використовується? Здається, ви завжди повинні змушувати селектор відповідати міткам специфікації ... Чи є випадок, коли корисно не робити цього?
Victor Noël

4
Насправді не відповідає на питання Чому? - Чому matchLabels існують і повинні відповідати .spec.template.metadata.labels? У чому сенс, як specце все одно визначено нижче, Deploymentтак що зрозуміло, які Pods запускаються для розгортання.
Іван

2
Кожен, хто натикається на цю дискусію, повинен перевірити останню документацію. Наприклад, наразі .spec.selector не є необов'язковим полем. Це обов'язкове поле. kubernetes.io/docs/concepts/workloads/controllers/deployment
SoftwareTheory

Дякую за ваш коментар. Я думаю , що в нових авторів документації скорегував необов'язковим потрібно, так як в старих Docs цього поле було сказано , як додаткові , але на наступних авторів лінії додала , що це поле має бути встановлено явно :) Так ефективно це поле також потрібно
alexander.polomodov

@SoftwareTheory Так, але це все ще не пояснює, чому це потрібно, оскільки шаблон специфікації Pod визначений нижче.
користувач168317
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.