Kubernetes ReplicaSet失败,错误为:spec.template.metadata.labels
为了我的学习目的,我正在尝试对replicaSet做一些研究。我成功地用matchLabels创建了一个复制集。为了测试matchExpression选择器,我首先创建了一个pod,然后创建了一个新的副本集,以测试副本集是否能够检查正在运行的pod中的标签。但这失败了。以下是我到目前为止所做的Kubernetes ReplicaSet失败,错误为:spec.template.metadata.labels,kubernetes,Kubernetes,为了我的学习目的,我正在尝试对replicaSet做一些研究。我成功地用matchLabels创建了一个复制集。为了测试matchExpression选择器,我首先创建了一个pod,然后创建了一个新的副本集,以测试副本集是否能够检查正在运行的pod中的标签。但这失败了。以下是我到目前为止所做的 首先创建一个带有特定标签的吊舱。Pod运行成功 创建具有匹配表达式的复制集,该表达式的值与pod中指定的标签相匹配 在第二步之后,我得到了一个错误。下面是YAML文件和错误。 你能帮我理解这里的问题吗 这
apiVersion: v1
kind: Pod
metadata:
name: nginx-app
labels:
tier: frontend1
spec:
containers:
- name: nginx-c
image: nginx
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
这是replicset-definition.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-app
labels:
tier: frontend1
spec:
containers:
- name: nginx-c
image: nginx
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
apiVersion: v1
kind: Pod
metadata:
name: nginx-app
labels:
tier: frontend1
spec:
containers:
- name: nginx-c
image: nginx
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
ReplicaSet“ReplicaSet-2”无效:
spec.template.metadata.labels:无效值:
映射[字符串]字符串{“层”:“nginx”}:选择器
与模板不匹配
标签
您可以通过更改模板部分中的标签来尝试以下操作
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: replicaset-2
spec:
replicas: 2
selector:
matchExpressions:
- {key: tier, operator: In, values: [frontend1]}
template:
metadata:
labels:
tier: frontend1
spec:
containers:
- name: nginx
image: nginx
要使用
matchExpressions
使pod进入新创建的ReplicaSet的范围,您必须在RS中使用与已创建的pod中定义的标签相同的标签,或者必须在表达式中添加其他标签,使其如下所示:
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: replicaset-2
spec:
replicas: 2
selector:
matchExpressions:
- key: tier
operator: In
values:
- frontend1
- nginx
template:
metadata:
labels:
tier: nginx
spec:
containers:
- name: nginx
image: nginx
通过这种方式,RS将现有pod识别为自己的pod,并仅再创建一个pod,以满足
副本
字段中定义的要求 谢谢,迪内什。我只是编辑了我的问题,以便更清楚我的要求。我想检查replicaSet是否能够匹配template部分中未定义的正在运行的POD的表达式。在kubernetes文档中,明确提到replicaSet中,.spec.template.metadata.labels必须匹配spec.selector,否则它将被API拒绝。您可以将nginx
添加到值:
字段中,这样pod将落入RS控制。这就是您试图实现的目标吗?谢谢@KFC_uu,现在可以了,因此matchExpressions或matchLabels需要至少一个与模板下定义的标签匹配的条件才能创建复制集。我将matchExpressions
更改为{key:tier,operator:In,values:[frontend1,nginx]}