私のタスクは、すべてのdeployments
、daemonsets
、およびcronjobs
に「app」という名前のラベルを追加して、監視ツールでスタック全体のアプリをクエリしやすくすることです。このようにして、単一のセレクター、つまりアプリを使用するダッシュボードを構築できます。
ダウンタイムを避けるため、次の手順でこの問題を解決することにしました。
$ 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
と一致しません
このエラーが発生する理由についての洞察が必要です。
困っているようです。このセクションを確認してください: ラベルセレクターの更新
注:APIバージョン
apps/v1
では、Deploymentのラベルセレクターは、作成後は不変です。
したがって、この行は、デプロイメントが作成されたらselector
を更新できないと言います。セレクタは、apps/v1beta1
およびextension/v1beta1
を除くすべてのAPIバージョンで変更できません。参照: TestDeploymentSelectorImmutability 。
1つの可能な回避策は、古いラベルを保持し、古いラベルとともに新しいラベルを追加することです。この方法では、selector
を更新する必要はありません。展開は古いラベルを使用してポッドを選択しますが、ダッシュボードは新しいラベルを使用して選択できます。これは要件を満たしていない可能性がありますが、これ以上良い方法はありません。
このエラーは読みにくいですが、デプロイメント定義のspec.template.metadata.labelsで指定されたラベルが、同じ定義内のspec.selector.matchLabelsのラベルと一致しないことを意味します。さらにサポートが必要な場合は、YAMLをアップロードします。ベスト!