全体図
ReplicasetはPod達をNodeをまたいで包み込んでいるオレンジ色の点線のイメージです。
Replicasetとは
ReplicaはPodを複製します。
Specで定義されたレプリカの数を自動配置、維持してくれます。
Podが死んでも自動修復してくれます。
Replicasetを試す
ここでは説明上はずせないのでReplicasetを作成しますが、本番運用ではまずをもってReplicasetを生で作ることはなく、その上位概念であるDeploymentを作成し管理します。Deploymentについては次の記事にまとめます。
replicaset.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: helloworld
spec:
replicas: 3
selector:
matchLabels:
app: helloworld
template:
metadata:
labels:
app: helloworld
spec:
containers:
- image: gcr.io/google-samples/hello-app:2.0
name: helloworld
上記では、googleのリポからhello-appイメージを3つに冗長化したコンテナ化する指示を記述しています。
Yamlに納得したらApplyしてレプリカセットを作成します。
kubectl apply -f replicaset.yaml
操作デモ
こちらのGif動画では、hello-appをレプリカ数5個で作成し、故意にPodを一つ手動で削除した時、Podが自動復活する様を表現しています。
この挙動の意味するところは、kubernetesの思想はyaml絶対主義であり、yamlに記載された状態を維持しようとします。
それがたとえ管理者が故意にした操作であっても、「お前間違ったろ?」という認識でyamlの状態に戻します。
まとめ
Replicasetの挙動については、デモで伝えたとおり、宣言的指示を絶対重視します。
この挙動については、先に説明するDeploymentでも同じです。
また、冒頭の方でもお伝えしたように本番運用においてReplicasetを生で作成することはまずありえません。
その理由は、先に説明するDeploymentはReplicasetを包み込み世代管理をするリソースであるため、Deploymentで管理することで更新やロールバックが容易になるためです。
次回はそのDeploymentについて記事をまとめます。