展開の作成時に使用されるspec-selector-matchLabelsとは何ですか?


18

Kubernetesドキュメントから:

セレクターフィールドは、デプロイが管理するPodを見つける方法を定義します。

ただし、展開を作成するとき、展開の一部としてポッドテンプレートを既に指定しています。では、なぜセレクターも必要なのでしょうか?

それは、ポッドがすでに個別に開始されているサービスのように使用されることになっていますが、後で一緒に管理される展開の傘下に置かれますか?

回答:


8

セクションkubernetes.ioからの展開で見つけることができるこの質問に対する回答

では、なぜセレクターも必要なのでしょうか?

k8s v 1.14のドキュメントからの引用

.spec.selectorは、この展開の対象となるポッドのラベルセレクターを指定する必須フィールドです。

.spec.selector一致する必要があり.spec.template.metadata.labelsます。一致しない場合、APIによって拒否されます。

APIバージョンapps / v1では、.spec.selectorおよび.metadata.labelsは、設定されていない場合、デフォルトで.spec.template.metadata.labelsになりません。したがって、それらは明示的に設定する必要があります。また、apps / v1でDeploymentを作成した後、.spec.selectorは不変であることに注意してください。

テンプレートが.spec.templateと異なる場合、またはそのようなPodの総数が.spec.replicasを超える場合、Deploymentは、ラベルがセレクタに一致するPodを終了する場合があります。Podの数が目的の数より少ない場合、.spec.templateで新しいPodが表示されます。

ポッドは既に個別に開始されていますが、後で展開の傘下にまとめて管理されますか?

簡単に言えば、いいえ

注:直接、別のDeploymentを作成するReplicaSetか、a やa などの別のコントローラーを作成して、このセレクターにラベルが一致する他のポッドを作成しないでくださいReplicationController。そうすると、最初の人Deploymentはこれらの他のポッドを作成したと考えます。Kubernetesあなたがこれをするのを止めません。セレクターが重複する複数のコントローラーがある場合、コントローラーは互いに競合し、正しく動作しません。


5
それは何のために使われているのですか?セレクタを常に仕様のラベルと一致させる必要があるように思われます…そうしないことが便利な場合はありますか?
ビクターノエル

4
なぜ質問に答えていないのですか?-なぜmatchLabelsが存在し、一致する必要があるの.spec.template.metadata.labelsですか?spec以下で定義されているDeploymentように、そのポイントは何ですか?したがって、展開のためにどのポッドが開始されているかが明確です。
イヴァン

2
この議論にぶつかった人は誰でも最新のドキュメントを確認する必要があります。たとえば、現在、.spec.selectorはオプションのフィールドではありません。これは必須フィールドです。kubernetes.io/docs/concepts/workloads/controllers/deployment
SoftwareTheory

コメントありがとうございます。古いドキュメントでは、このフィールドは、オプションとしてではなく、このフィールドを明示的に設定する必要があること:)だから、効果的にこの分野にも必要とされた追加の次の行の著者に言われたので、新しいドキュメントの作成者に、必要にオプションで修正されていることを私だと思う
alexander.polomodov

@SoftwareTheoryはい、しかし、ポッド仕様テンプレートはとにかく以下で定義されているので、それがなぜ必要なのかはまだ説明されていません。
user168317
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.