Kubernetes の Replica 数を減らした時に削除される Pod は「生成日時がより新しい Pod」

普段、Kubernetes の Deployment を使って、一種類の Pod (≒ コンテナ) を複数個作り、冗長稼動させている。

1つの Deployment から作成される Pod の個数は、deployment.yaml 内の spec.replicas プロパティに指定した数値で決まる。replicas: 5 とすれば5個の Pod が作られるし、後で replicas: 3 と変更して kubectl apply すれば、5個稼動している Pod のうち2個の Pod が破棄されて、3個の Pod で稼動するように環境が変更できる。

今回の本題は、ReplicaSet の個数が減らされた時に、どの Pod が破棄されるのか、という点。

結論から言えば、Pod の作成日時が新しいもの (= AGE が若いもの) から優先的に削除される、という仕様になっている。

この仕様の該当コードが以下。

なぜこういう仕様なのか、という疑問や議論は、以下で行われている。

作成日時が古い Pod をできるだけ残そうとするのは、それだけウォームアップができている安定した Pod だと判断できるからだ、ということらしい。

一方で、「ずっと稼動している Pod は、キャッシュを大量に蓄えていたりするから、古い Pod こそ優先的に破棄させた方が綺麗なんじゃないか?」という考え方もあるようだ。

個人的には、うまくキャッシュとかができている古い Pod が残ってくれる動きがデフォルトなのは嬉しい。もしも古い Pod の動きがおかしくなったら kubectl delete pod で破棄してしまえば良いだけだし〜。