セレクターフィールドは、デプロイが管理するPodを見つける方法を定義します。
ただし、展開を作成するとき、展開の一部としてポッドテンプレートを既に指定しています。では、なぜセレクターも必要なのでしょうか?
それは、ポッドがすでに個別に開始されているサービスのように使用されることになっていますが、後で一緒に管理される展開の傘下に置かれますか?
セレクターフィールドは、デプロイが管理するPodを見つける方法を定義します。
ただし、展開を作成するとき、展開の一部としてポッドテンプレートを既に指定しています。では、なぜセレクターも必要なのでしょうか?
それは、ポッドがすでに個別に開始されているサービスのように使用されることになっていますが、後で一緒に管理される展開の傘下に置かれますか?
回答:
セクション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
あなたがこれをするのを止めません。セレクターが重複する複数のコントローラーがある場合、コントローラーは互いに競合し、正しく動作しません。
.spec.template.metadata.labels
ですか?spec
以下で定義されているDeployment
ように、そのポイントは何ですか?したがって、展開のためにどのポッドが開始されているかが明確です。