В чем необходимость определения .spec.селекторов в развертывании Kubernetes.файл yaml?

# #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