在 Kubernetes Deployment.yaml 文件中定义 .spec.selectors 需要什么?
What is the need of defining .spec.selectors in Kubernetes Deployment.yaml file?
.spec.selector 字段定义部署如何找到要管理的 Pods。但是我们还在模板中定义了标签,那么我们通过 .spec.selectors 字段获得的额外内容是什么,因为 Deployment 也可以找到要使用模板中定义的标签进行管理的 Pods ?
在下面的代码中,带有“label occloud.oracle.com/open-network-policy: allow”的 pod 如何由部署管理,因为它没有在 spec.selectors[=13= 中描述]
---
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
spec.seletor
字段被 Deployment/Replicaset 控制器使用。它必须是 podTemplate
中指定标签的 子集 。这就是为什么您的 pods 中可能有其他标签。但它们仍将由部署管理。
spec.selector
也用于检查是否有任何现有的 ReplicaSet
已经符合这些条件。如果 Deployment controller
发现一个孤儿 ReplicaSet
,部署将使用它而不是创建一个新的。
参见 https://github.com/kubernetes/kubernetes/blob/master/pkg/controller/deployment/deployment_controller.go#L222
.spec.selector 字段定义部署如何找到要管理的 Pods。但是我们还在模板中定义了标签,那么我们通过 .spec.selectors 字段获得的额外内容是什么,因为 Deployment 也可以找到要使用模板中定义的标签进行管理的 Pods ?
在下面的代码中,带有“label occloud.oracle.com/open-network-policy: allow”的 pod 如何由部署管理,因为它没有在 spec.selectors[=13= 中描述]
---
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
spec.seletor
字段被 Deployment/Replicaset 控制器使用。它必须是 podTemplate
中指定标签的 子集 。这就是为什么您的 pods 中可能有其他标签。但它们仍将由部署管理。
spec.selector
也用于检查是否有任何现有的 ReplicaSet
已经符合这些条件。如果 Deployment controller
发现一个孤儿 ReplicaSet
,部署将使用它而不是创建一个新的。
参见 https://github.com/kubernetes/kubernetes/blob/master/pkg/controller/deployment/deployment_controller.go#L222