ゼロからわかるKubernetes 3章(ReplicaSet, Deployment編)
ReplicaSetとは
複数のPodを管理するためのリソースです。これまでPodについて解説してきましたが、実際のサービスではPod単体で運用することは困難です。そこで、複数のPodを管理するためにReplicaSetを、さらにこれを管理するために後述のDeploymentを使用します。
ReplicaSetで何ができるの?
前述のように複数のPodを管理することができます。具体的にはReplicaSetの中で指定した分のPodを複製します。「Podの数を二つにして」というように扱うことができます。これらの内容も全てマニフェストファイルに記述します。
ReplicaSetの定義の仕方
それでは実際のReplicaSetの定義方法を記載します。以下のマニフェストファイルの例を参考にしてみてください。
apiVersion: apps/v1 # APIのバージョン、ReplicaSetの場合は apps/v1
kind: ReplicaSet # ReplicaSetリソースを指定
metadata:
name: xxxxx-replicaset # ReplicaSetの名前
namespace: yyyyy # 所属するnamespace
spec:
replicas: 3 # 作成するPodの数
selector:
matchLabels: # このReplicaSetが管理するPodのlabel名
app: xxxxx # この後のtemplate > labels と一致させる
template: # ここ以下はPodと同様の宣言
metadata:
labels:
app: xxxxx
spec:
containers:
- name: xxxxx
image: docker .io/hoge/xxxxx
ports:
- containerPort: 8080
基本的にはPodを定義するマニフェストファイルと同様です。spec > replicasのセクションで複製するPodの数を指定します。
作成したマニフェストファイルを適用させるときは、以下のようにコマンドを入力します。
kubectl apply -f ReplicaSet_example.yaml -n yyyyy
ReplicaSetのリソースを確認する場合は、kubectlのgetコマンドを用います。
kubectl get replicaset -n yyyyy
Deployment
ReplicaSetでは複数のPodを複製しました。ここでバージョンを以降するために、ReplicaSetを複数作成したいとします。ここでDeploymentを用います。つまり、Deploymentは複数のReplicaSetを管理するリソースです。
Deploymentで何ができるの?
マニフェストファイルを定義して複数のレプリカを管理できます。運用しているコンテナイメージのバージョン切り戻しを手動でやるのは手間ですし、間違いも発生しやすいです。そのため、Deploymentで自動で管理できるようにするのが、最もベターな運用方法となります。
Deploymentの定義の仕方
いつも通りマニフェストファイルの例を記載します。
apiVersion: apps/v1 # APIバージョン、Deploymentの場合は apps/v1
kind: Deployment # Deploymentリソースを指定
metadata:
name: xxxxx-deployment # Deploymentの名前
namespace: yyyyy # 所属するnamespace
spec: # ここ以下はほぼReplicaSetの内容と同じ
replicas: 3
selector:
matchLabels:
app: xxxxx
template: # ここ以下はPodと同様の宣言
metadata:
labels:
app: xxxxx
spec:
containers:
- name: nginx
image: docker .io/hoge/xxxxx
ports:
- containerPort: 8080
strategy: # デプロイ方式を指定(未指定だとRollingUpdateになる)
type: RollingUpdate # RollingUpdate:古いPodを段階的に新しいものに置き換える
デプロイの方式はstrategyのtypeで指定します。どのような方式にするかは、運用環境に合わせて選択してください(Recreateという方式もあります)。
applyとgetのコマンドは以下のようになります。
kubectl apply -f Deployment_example.yaml -n yyyyy
kubectl get deployment -n yyyyy
Pod, ReplicaSet, Deploymentのまとめ
これまでの内容を踏まえると、概念的には以下のような階層構造になります。
上位: Deployment > ReplicaSet > Pod :下位
つまり
- 最小のリソース単位がPod
- Podを管理、複製するReplicaSet
- ReplicaSetを管理、デプロイ方式を選択するDeployment
となります。
詳しく内容を知りたい場合は追加で調べてみると、より理解が深まるかと思います。
次回は各種Serviceリソースについて解説する予定です。
Discussion