提问者:小点点

部署匹配标签和模板标签以及DRY原则


在部署中,在什么情况下选择器中的匹配标签不能精确匹配模板元数据标签?如果它们不匹配,那么创建的任何pod都不会与选择器匹配,我可以想象K8s会继续创建新的pod,直到每个节点都已满。如果那是真的,为什么K8s要我们两次指定相同的标签?要么我漏掉了什么,要么这违反了干燥原则。

我唯一能想到的就是创建一个带有 matchLabels “key: A” 的部署

K8s文档给出了以下例子:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

共2个答案

匿名用户

<代码>。。。在部署中,在什么情况下选择器中的matchLabels与模板元数据标签不精确匹配

进行金丝雀部署时的示例。

<代码>。。。如果它们不匹配,那么创建的任何pod都不会与选择器匹配,我想K8会继续创建新的pod,直到每个节点都满为止

您的部署将无法继续,它将失败,并出现错误消息"selector"与模板"标签"不匹配。不会创建pod。

<代码>...感觉模板元数据中的任何标签都应该自动出现在选择器匹配标签中。

模板.元数据下的标签用于多种目的,不仅用于部署,CNI添加的示例标签与动态IP有关。用于选择器的标签应该是最少且特定的。

匿名用户

...在部署中,在什么情况下选择器中的 matchLabel 与模板元数据标签不完全匹配?

规范选择器.matchLabels下的标签应与标准模板.metadata.Labels规则选择器.matchLabel下面有不存在的标签。