# #kubernetes #yaml #google-kubernetes-engine #kubernetes-pod #kubernetes-deployment
Вопрос:
Поле .spec.selector определяет, как Развертывание определяет, какими блоками управлять. Но мы также определяем метки внутри шаблона, тогда какие дополнительные функции мы получаем с полем .spec.селекторы, потому что развертывание может найти модули, которыми нужно управлять с помощью метки, определенной в шаблоне ?
В приведенном ниже коде, как может модуль с «меткой occloud.oracle.com/open-network-policy: разрешить» управляется развертыванием, поскольку оно не описано в спецификации.селекторы
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: cheeseshop
spec:
replicas: 1
progressDeadlineSeconds: 180
selector:
matchLabels:
app.kubernetes.io/name: tutorial
app.kubernetes.io/component: cheeseshop
template:
metadata:
labels:
app.kubernetes.io/name: tutorial
app.kubernetes.io/component: cheeseshop
occloud.oracle.com/open-network-policy: allow
name: cheeseshop
Ответ №1:
spec.seletor
поле используется контроллерами развертывания/набора реплик. Это должно быть подмножество меток, указанных в podTemplate
. Вот почему у вас могут быть дополнительные метки в ваших капсулах. Но они все равно будут управляться развертыванием.
spec.selector
также используется для проверки ReplicaSet
того, соответствует ли уже существующее этим условиям. Если Deployment controller
обнаружен сиротский ReplicaSet
объект , он будет использоваться развертыванием вместо создания нового. Видишь https://github.com/kubernetes/kubernetes/blob/master/pkg/controller/deployment/deployment_controller.go#L222