我的任务是向all deployments
,添加一个名为“ app”的标签daemonsets
,cronjobs
以便在监视工具中更轻松地查询整个堆栈中的应用。这样,我们可以构建使用单个选择器(即应用程序)的仪表板。
为了避免停机,我决定通过以下步骤解决此问题:
在$ kubectl apply
用于更新资源时,我已将“ app”标签添加到“ app”标签/将“ service”标签替换为“ app”标签,但遇到以下错误:
来自服务器的错误(无效):将补丁程序{{ longAssPatchWhichIWon'tIncludeButYaGetThePoint } 应用于以下错误:&{0xc421b02f00 0xc420803650默认设置清单/prod/provisioning-deployment.yaml 0xc 42000c6f8 3942200 false} for:“清单/要求。 yaml”:Deployment.apps“配置”无效:s pec.template.metadata.labels:无效值:map [string] string {“ app”:“配置”,“ component”:“ marketplace”}:
selector
不匹配模板labels
我需要一些为什么会引发此错误的见解。
小智 16
这个错误很难读懂,但这意味着你的部署定义的 spec.template.metadata.labels 中指定的标签与同一定义中的 spec.selector.matchLabels 的标签不匹配。如果您需要进一步的帮助,请上传您的 YAML。最好的事物!
Emr*_*ain 10
看来您有麻烦了。检查此部分:标签选择器更新
注意:在API版本中
apps/v1
,部署的标签选择器在创建后是不可变的。
因此,此行表示selector
一旦创建部署,便无法更新。除apps/v1beta1
和以外的任何API版本都无法更改选择器extension/v1beta1
。参考:TestDeploymentSelectorImmutability。
一种可能的解决方法是保留旧标签,并与旧标签一起添加新标签。这样,您不必更新selector
。部署将使用旧标签选择容器,但是您的仪表板可以使用新标签选择。这可能无法满足您的要求,但我看不出更好的方法。
据我所知,有几种方法可以解决这个问题。一种方法是删除部署并使用适用于您的部署的键/值重新应用部署:
spec:
selector:
matchLabels:
app: app_name
template:
metadata:
labels:
app: app_name
-- whatever else --
Run Code Online (Sandbox Code Playgroud)
这显然会导致停机,但应该是永久性的。您的另一个选择是编辑部署选择器:
kubectl -n namespace edit deployment app-deployment
Run Code Online (Sandbox Code Playgroud)
然后再次运行您的应用命令。这可能是永久性的,也可能不是永久性的,因为我不知道是什么改变了选择器。
如果您的 pod 还不存在,无法进行修改,则此错误可能是合法的。您可能在同一命名空间中有一个同名的 Pod。
归档时间: |
|
查看次数: |
6494 次 |
最近记录: |