🐥

ゼロからわかるKubernetes 3章(ReplicaSet, Deployment編)

2024/04/27に公開

ReplicaSetとは

複数のPodを管理するためのリソースです。これまでPodについて解説してきましたが、実際のサービスではPod単体で運用することは困難です。そこで、複数のPodを管理するためにReplicaSetを、さらにこれを管理するために後述のDeploymentを使用します。

ReplicaSetで何ができるの?

前述のように複数のPodを管理することができます。具体的にはReplicaSetの中で指定した分のPodを複製します。「Podの数を二つにして」というように扱うことができます。これらの内容も全てマニフェストファイルに記述します。

ReplicaSetの定義の仕方

それでは実際のReplicaSetの定義方法を記載します。以下のマニフェストファイルの例を参考にしてみてください。

ReplicaSet_example.yaml
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の定義の仕方

いつも通りマニフェストファイルの例を記載します。

Deployment_example.yaml
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