在 Kubernetes Deployment.yaml 文件中定义 .spec.selectors 有何必要?

Pul*_*rma 9 yaml kubernetes google-kubernetes-engine kubernetes-deployment kubernetes-pod

.spec.selector 字段定义 Deployment 如何查找要管理的 Pod。但是我们还在模板内定义了标签,那么我们通过 .spec.selectors 字段得到的额外东西是什么,因为 Deployment 也可以找到要使用模板中定义的标签进行管理的 Pod?

在下面的代码中,带有“label occloud.oracle.com/open-network-policy:allow”的 pod 如何通过部署进行管理,因为在 spec.selectors 中没有描述它

---
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
   
Run Code Online (Sandbox Code Playgroud)

Arn*_*lay 9

spec.seletor该字段由部署/复制集控制器使用。它必须是中指定的标签的子集podTemplate。这就是为什么您的 Pod 中可能有其他标签。但它们仍将由部署管理。

spec.selector还用于检查是否有任何现有的ReplicaSet已匹配这些条件。如果Deployment controller发现一个孤立的ReplicaSet,部署将使用它而不是创建一个新的。请参阅https://github.com/kubernetes/kubernetes/blob/master/pkg/controller/deployment/deployment_controller.go#L222