web-dev-qa-db-ja.com

エラー:セレクターはテンプレートラベルと一致しません

私のタスクは、すべてのdeploymentsdaemonsets、およびcronjobsに「app」という名前のラベルを追加して、監視ツールでスタック全体のアプリをクエリしやすくすることです。このようにして、単一のセレクター、つまりアプリを使用するダッシュボードを構築できます。

ダウンタイムを避けるため、次の手順でこの問題を解決することにしました。

  1. 開発環境、テスト環境、ステージング環境にラベルを追加します。
  2. Prod envにラベルを追加します。
  3. デプロイ(1)
  4. デプロイ(2)
  5. 古いラベルを削除し、devのサービスを更新して新しいラベルを使用します。次に、テストとデプロイを行います。 (現在このステップで
  6. ステージで(5)を繰り返します。
  7. 製品について(5)を繰り返します。

$ kubectl applyを使用して、「アプリ」ラベルを追加した/「サービス」ラベルを「アプリ」ラベルに置き換えたリソースを更新すると、次のエラーが発生します。

サーバーからのエラー(無効):パッチを適用する際のエラー:{longAssPatchWhichIWon'tIncludeButYaGetThePoint} to:&{0xc421b02f00 0xc420803650 default provisioning manifests/prod/provisioning-deployment .yaml 0xc 42000c6f8 3942200 false} for: "manifests/prod/provisioning-deployment.yaml":Deployment.apps "provisioning"は無効です:s pec.template.metadata.labels:無効な値:map [string] string {"app ":" provisioning "、" component ":" marketplace "}:selectorはテンプレートlabelsと一致しません

このエラーが発生する理由についての洞察が必要です。

6
seemcat

困っているようです。このセクションを確認してください: ラベルセレクターの更新

注:APIバージョンapps/v1では、Deploymentのラベルセレクターは、作成後は不変です。

したがって、この行は、デプロイメントが作成されたらselectorを更新できないと言います。セレクタは、apps/v1beta1およびextension/v1beta1を除くすべてのAPIバージョンで変更できません。参照: TestDeploymentSelectorImmutability

1つの可能な回避策は、古いラベルを保持し、古いラベルとともに新しいラベルを追加することです。この方法では、selectorを更新する必要はありません。展開は古いラベルを使用してポッドを選択しますが、ダッシュボードは新しいラベルを使用して選択できます。これは要件を満たしていない可能性がありますが、これ以上良い方法はありません。

11
Emruz Hossain

このエラーは読みにくいですが、デプロイメント定義のspec.template.metadata.labelsで指定されたラベルが、同じ定義内のspec.selector.matchLabelsのラベルと一致しないことを意味します。さらにサポートが必要な場合は、YAMLをアップロードします。ベスト!