一、复制集选择器
复制集选择器的核心功能是通过匹配表达式筛选目标副本。匹配标签(match labels)是基础筛选方式,需在配置文件中明确指定键值对。

1. 匹配表达式

匹配表达式(match expressions)需定义三个参数:

  • 键(key):标识目标属性的变量名
  • 运算符(operator):逻辑判断条件(如包含、排除等)
  • 值(values):可接受的一个或多个匹配值

1) 键

键的本质是变量标识符,与编程语言中的变量概念类似。其作用是为目标属性命名,例如 apprelease 等字段名。

2) 运算符

运算符类型及功能:

运算符 逻辑含义 值要求
In 匹配任意一个指定值 单值或多值
NotIn 排除所有指定值 单值或多值
Exists 仅验证键是否存在 无需指定值
DoesNotExist 验证键必须不存在 无需指定值

3) 值

值的匹配规则说明:

  • In 运算符:目标标签值只需满足任意一个指定值即视为匹配,实现“或逻辑”
  • NotIn 运算符:目标标签值不得包含任何指定值,实现“非逻辑”
  • Exists / DoesNotExist:仅检查键名是否存在,与具体值无关

2. 应用案例

复制集选择器使用及验证流程:

  • 基础匹配验证:当模板标签值(如 v-1)不符合 NotIn 条件(如 v-0 / v-1)时,ReplicaSet 创建会被 schema 校验拒绝

  • 复合条件验证:同时使用 matchLabelsmatchExpressions 时,需同时满足两类条件(逻辑与关系)才能匹配

  • 键存在性验证

    • Exists:仅需模板标签包含指定键名(如 type),无论其值如何
    • DoesNotExist:模板标签不得包含指定键名

补充说明(来自官方文档与权威资料)

  • Kubernetes 中的 matchExpressionsKubernetes 中更灵活的标签选择器形式,支持集合式筛选,并可与 matchLabels 同时使用,而两者组合需同时满足以匹配对象

  • matchLabels 属于等值匹配;matchExpressions 提供更多筛选灵活性,包括 InNotInExistsDoesNotExist 四种类型

  • 在 Kubernetes API 中,matchLabels 中的每一个 {key: value} 绑定都等同于一个 matchExpressions 条目,其运算符为 In,值数组中只包含该 value。若同时存在 matchLabelsmatchExpressions,则所有条件都必须为真才能匹配 Pod

  • 所有支持 matchExpressions 的资源类型,如 ReplicaSet,都会将该表达式作为严格筛选逻辑使用。在 ReplicaSet 的选择器中,若配置了 matchExpressions,它会与 matchLabels 一同构成复合筛选条件,全部通过才能将 Pod 纳入管理范围


总结概览

功能 / 项目 说明
matchLabels 等值筛选,简单易用
matchExpressions 更灵活的集合式筛选,支持 In / NotIn / Exists / DoesNotExist
两者共存 必须同时满足所有条件才能匹配 Pod
示例验证问题 标签值不满足筛选策略会被拒部署或不被管理