Controller Overview
Auto Healing
Nodeの上にPodがあり、Podが突然ダウンしたり、PodがスケジューリングされているNodeがダウンした場合はPodで動いていたサービスに障害が発生する。
Controllerはこのような状況を検出し、Podを他のNodeに新たに作ってくれる。
Auto Scaling
Podのリソースが限界状態になった時、Controllerはこの状態を把握してPodをもう1つ作ってくれて、負荷を分散させてPodがダウンしないようにしてサービスの性能に障害なく、安定したサービスを運用できるようにしてくれる。
Software Update
複数のPodのバージョンアップするとき、Controllerを介して一度に簡単にできる。
アップグレードするときに問題が発生した場合、ロールバックをすることができる機能も提供する。
Job
一時的な作業をする場合はControllerが必要な時間のみPodを作って、そのタスクを実行して、タスク終了後は削除をする。
必要な時間だけリソースが使用されて、作業が終わった後はリソースが返されるため、効率的なリソース活用が可能となる。
KubernetesのControllerはサービスを管理し、効率よく運用できるように色んな機能を提供しています。
Replication Controller, ReplicaSet

Replication ControllerはDeplicatedになって、現在はReplicaSetを提供している。
上の図のように、Replication、ReplicaSetの機能としてTemplate、Replicas、Selectorがある。
共通機能ではTemplate、Replicasがあり、SelectorはReplicaSetのみの機能である。
まだReplicationを多く使っているが、ReplicationからReplicaSetに変更も可能である。
1. Template

ControllerとPodは、ServiceとPodのようにLabelとセSelectorを使って接続する。
Controllerを作成するときにTemplateとしてPodの内容を設定しておくと、Podがダウンした時、ControllerがTemplateを基に再生成してくれる。
こういう特徴を利用してPodのアップグレードを簡単にできる。
Templateを更新し、既存の接続されているPodをダウンロードさせるとControllerはアップグレードされたTemplateでPodを再作成するからだ。
【yaml】
TemplateにPodを定義するとき、Controllerと接続するためにLabelを定義して置かないとPodとの接続ができない。
2. Replicas

replicasに設定されている数だけPodが管理され、Podが削除されると、1つのPodを作成してくれる。
数値が増加すると、増加されただけPodがScale Outされる。
TemplateとReplicasの機能を使って、PodとControllerを別々に作成せずに一度に複数のPodを作成することができる。
TemplateにPodを定義して置いて、Replicasに数を指定し、Podは作成せずにControllerのみ作成するとControllerが指定されている数だけTemplateの内容を基にPodを作ってくれる。
実際にコントローラを使用する場合、コントローラのみ設定して使います。
3. Selector

Replication ControllerのSelectorは、keyとvalueが同じPodを接続してくれる。
keyとvalueが1つでも異なると接続できない。
ReplicaSetのSelectorには二つ追加された属性があり、MatchLabelsと呼ぶkeyとvalueの両方が一致する時、接続してくれるReplication Controllerと同じ機能がある。
もう1つは、MatchExpressionと呼ばれる機能があり、keyとvalueを細かくコントロールできる。
たとえばkey:ver、operator:Existsに設定すると、値が違いますがLabelのキーがverであるすべてのPodを選択することになる。

yamlファイルを見るとSelectorにmatchLabelsとmatchExpressionsがあってmatchLabelsはkeyのvalueを設定している。

「matchExpressions」は下記のようにもっと詳細な設定ができる。
operatorには、いくつかのオプションがあります。
Exists
keyと一致するPodを接続してくれる。
DoseNotExist
keyと一致しないPodを接続してくれる。
In
keyに1つ以上のvalueを設定することができ、keyとvalueに対応するPodを接続してくれる。
NotIn
keyに1つ以上のvalueを設定することができるがkeyに一致してvalueとは一致しないPodを接続してくれる。
ReplicaSetは、さまざまなPodを接続してくれるオプションを提供している。
