web-dev-qa-db-ja.com

デプロイの作成中に使用されるspec-selector-matchLabelsとは何ですか?

Kubernetesのドキュメント から:

セレクターフィールドは、Deploymentが管理するポッドを見つける方法を定義します。

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

ポッドはすでに個別に開始されているが、後でデプロイメントの傘下にまとめて管理されるサービスのように使用することを想定していますか?

22
Paddy

この質問への回答は、kubernetes.ioのセクション Deployments で確認できます。

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

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

.spec.selectorrequiredフィールドであり、このデプロイメントのターゲットとなるポッドのラベルセレクターを指定します。

.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と異なる場合、またはそのようなポッドの総数が.spec.replicasを超える場合、Deploymentはラベルがセレクタと一致するポッドを終了する場合があります。ポッドの数が必要な数より少ない場合は、.spec.templateで新しいポッドが表示されます。

ポッドは既に個別に開始されていますが、後でデプロイメントの傘下にまとめて管理しますか?

簡単に言えば、いいえ

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

10