【发布时间】:2020-05-27 18:46:40
【问题描述】:
出于学习目的,我正在尝试对副本集进行一些研究。我能够使用 matchLabels 成功创建一个副本集。为了测试 matchExpression 选择器,我首先创建了一个 pod,然后创建了一个新的副本集来测试副本集是否能够检查正在运行的 pod 中的标签。但这因错误而失败。这是我到目前为止所做的。
- 首先创建了一个带有特定标签的 pod。 Pod 运行成功。
- 创建一个具有 matchExpressions 的副本集,该值与 pod 中指定的标签匹配。
在第二步之后我得到了错误。以下是 YAML 文件和错误。 你能帮我理解这里的问题吗?
这里是 pod-definition.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-app
labels:
tier: frontend1
spec:
containers:
- name: nginx-c
image: nginx
这里是replicaset-definition.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: replicaset-2
spec:
replicas: 2
selector:
matchExpressions:
- {key: tier, operator: In, values: [frontend1]}
template:
metadata:
labels:
tier: nginx
spec:
containers:
- name: nginx
image: nginx
创建副本集时出错:
master $ kubectl create -f /root/replicaset-definition.yaml
ReplicaSet“replicaset-2”无效: spec.template.metadata.labels:无效值: map[string]string{"tier":"nginx"}:
selector不匹配模板labels
【问题讨论】:
-
您可以将
nginx添加到您的values:字段中,这样吊舱将落入RS 控制。这是你试图达到的目标吗? -
感谢@KFC_ 现在可以使用,因此 matchExpressions 或 matchLabels 需要至少一个与模板下定义的标签匹配的条件才能创建副本集。我将
matchExpressions更改为{key: tier, operator: In, values: [frontend1, nginx]}
标签: kubernetes