出于我的学习目的,我正在尝试对plicateSet进行一些研究。我能够使用matchLabels成功创建一个copysetSet。为了测试matchExpression选择器,我首先创建了一个Pod,然后创建了一个新的副本集,以测试该副本集是否能够检查正在运行的Pod中的标签。但这失败并显示错误。这是我到目前为止所做的。
第二步之后,我得到了错误。以下是YAML文件和错误。 您能帮我理解这里的问题吗?
这是pod-definition.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-app
labels:
tier: frontend1
spec:
containers:
- name: nginx-c
image: nginx
这是副本集-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
答案 0 :(得分:1)
是否可以通过更改模板部分中的标签来尝试以下操作?
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
答案 1 :(得分:0)
要使用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来满足replicas
字段中定义的要求。