文档中.spec.selector
说:
该
.spec.selector
字段定义 Deployment 如何找到要管理的 Pod。在本例中,您选择在 Pod 模板中定义的标签 (app: nginx
)。但是,只要 Pod 模板本身满足规则,就可以使用更复杂的选择规则。
但是,如果多个 Deployment 创建了共享相同标签的 Pod,会发生什么情况?也就是说,如果我有:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: app
name: app1
spec:
selector:
matchLabels:
app: app
template:
metadata:
labels:
app: app
...
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: app
name: app2
spec:
selector:
matchLabels:
app: app
template:
metadata:
labels:
app: app
...
这有什么实际影响?有了上述配置,一切似乎kubectl scale --replicas=<n> app1
都正常工作,因此不会混淆哪些 pod 由哪些部署管理。
我注意到的唯一实际影响是,尝试按部署名称(如kubectl logs deploy/app1
)定位 pod 将会根据上述配置选择错误的 pod。
这是唯一的问题吗?我之所以问这个问题,是因为我注意到我们有几个地方都遇到了这种情况,我想判断问题的严重性。
(我意识到,使用标签相同的豆荚可能会导致其他问题 — — 例如,Service
实际上可能会将流量引导到错误的 pod — — 但我感兴趣的是这会以何种方式导致问题,特别是部署及其对 pod 的管理。)