代码之家  ›  专栏  ›  技术社区  ›  seemcat

错误:选择器与模板标签不匹配

  •  1
  • seemcat  · 技术社区  · 6 年前

    我的任务是添加一个名为“app”的标签 deployments , daemonsets cronjobs 这样就更容易在我们的监控工具中跨堆栈查询我们的应用程序。这样,我们可以构建使用单个选择器(即app)的仪表板。

    为了避免停机,我决定通过以下步骤解决此问题:

    1. 向开发、测试和阶段环境添加标签。
    2. 向prod env添加标签。
    3. 部署(1)
    4. 部署(2)
    5. 删除旧标签并更新dev的服务以使用新标签。然后测试和部署。( 当前正在执行此步骤 )
    6. 重复(5)的步骤。
    7. 对产品重复(5)。

    使用时 $ kubectl apply 要更新我已将“app”标签添加到的资源/将“service”标签替换为“app”标签,我遇到以下错误:

    服务器错误(无效):应用修补程序时出错: { 长的补丁,但不包括缺点 }到:&{0xc421b02f00 0xC420803650默认设置 清单/prod/provisioning-deployment.yaml 0xc 42000c6f8 3942200 false}for:“manifests/prod/provisioning deployment.yaml”: deployment.apps“provisioning”无效:s pec.template.metadata.labels:无效值: 映射[字符串]字符串{“app”:“provisioning”,“component”:“marketplace”}: selector 与模板不匹配 labels

    我需要一些关于它为什么会抛出这个错误的见解。

    1 回复  |  直到 6 年前
        1
  •  4
  •   Emruz Hossain    6 年前

    你好像有麻烦了。检查此部分: Label selector updates

    注:在API版本中 apps/v1 ,部署标签选择器在创建后是不可变的。

    所以,这行说你不能更新 selector 创建部署后。不能为任何API版本更改选择器,除非 apps/v1beta1 extension/v1beta1 . 裁判: TestDeploymentSelectorImmutability .

    一种可能的解决方法是保留旧标签,并在旧标签的同时添加新标签。这样,你就不用更新了 选择器 . 部署将使用旧标签选择播客,但您的仪表板可以选择使用新标签。这可能不符合你的要求,但我看没有更好的办法。