在 Kubernetes 部署 yaml 中,为什么我们必须将模板标签与选择器中的部署标签相匹配?

Jun*_*245 5 kubernetes

我是 Kubernetes 新手,所以这可能是显而易见的,但在部署 yaml 中,为什么我们必须在部署元数据中定义标签,然后在模板元数据中定义相同的标签,但在选择器中单独匹配这些标签?

模板属于它所在的部署不是很明显吗?部署是否存在具有不匹配模板的用例?

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-backend
spec:
  replicas: 2
  selector:
    matchLabels:
      app: api-backend
  template:
    metadata:
      labels:
        app: api-backend
    spec:
      #...etc
Run Code Online (Sandbox Code Playgroud)

我可能缺少对 k8s 或 yaml 的一些关键理解。

拥有没有标签的模板,它似乎可以工作,但我不明白为什么。Kubernetes 可以神奇地自动插入标签。

Raf*_*zko 2

从技术上讲,该参数matchLabels决定哪些 Pod 属于给定的 Deployment(以及底层的 ReplicaSet)。在实践中,我从未见过与 不同的labelsDeployment matchLabels。因此,原因可能是其他 Kubernetes 资源之间的一致性(例如更有matchLabels意义的服务)。

我建议您阅读博文,为初学者详细解释了 matchLabels、标签和选择器