このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Kubernetes入門:デプロイメントの定義ファイルを作成する

 Kubernetesにおいて、デプロイメント(Deployment) は、アプリケーションのスケーリング、アップデート、可用性の確保を自動化するための重要なコンポーネントです。デプロイメントは、Podの作成・管理を行い、指定された数のPodが常に稼働し続けるようにKubernetesに指示します。これは、リソースの安定性と効率的な運用を確保するための基本的な仕組みです。デプロイメントの役割を理解し、定義ファイルを適切に作成することは、Kubernetesを効果的に活用するために欠かせません。

Podとデプロイメントの関係

 Podが個々の作業者の役割を果たすのに対して、デプロイメントはその作業者がどのように働き、何人必要であるかを管理するスーパーバイザーのようなものです。スーパーバイザーは作業者(Pod)が確実に働き続けるように監督し、必要に応じて増員や減員を行います。この役割をKubernetesではデプロイメントが担い、安定したアプリケーションの稼働を保証します。

デプロイメントの定義ファイルの書き方

デプロイメントの設定項目

apiVersion:
kind:
metadata:
  name: ←(中項目)デプロイメントの名前
spec:
selector:        ← (中項目) セレクターの設定
  matchLabels:   ← (小項目) ラベルをセレクターで選択して管理する
replicas:        ← (中項目) レプリカの設定
template:        ← (中項目) テンプレート(作成するPodの情報を書く)
  metadata:      ← (小項目) Podのメタデータを書く
  spec:          ← (小項目) Podのスペックを書く

各セクションの解説

  • apiVersionapps/v1 はデプロイメントのAPIグループおよびバージョンを指定します。
  • kind: ここではDeploymentを指定し、リソースの種類がデプロイメントであることを示しています。
  • metadata: デプロイメント自体の名前やラベルなど、管理するリソースのメタデータを設定します。
  • spec: デプロイメントの動作内容を設定する重要な部分です。ここではPodのレプリカ数、テンプレート、セレクターなどを設定します。

セレクター(Selector)の設定

 セレクターは、デプロイメントがどのPodを管理するかを指定するために使用されます。デプロイメントは、matchLabelsを使って、特定のラベルが付けられたPodのみを管理します。Podのラベルはtemplateの中で設定します。

selector:
  matchLabels:
    app: apache

レプリカの設定

 レプリカの数をreplicasで指定します。ここでは、3つのPodが常に稼働している状態を確保します。

replicas: 3

テンプレート(template)の設定

 テンプレートの中には、実際に作成されるPodの詳細を記述します。「pod.yml」で記述した内容(メタデータとスペック)をほぼ丸ごと転記します。

デプロイメントの定義ファイルの構造

デプロイメントの定義ファイル名と置く場所

 次に、定義ファイルの保存場所を決定します。ファイルは適切な場所に保存し、ファイル名を理解しやすいものにします。このパスに配置することで、ファイル管理が容易になり、デプロイメントを簡単に適用できます。

項目
デプロイメントの定義ファイル名deployment.yml
ファイルを置く場所C:\Users\ユーザー名\Desktop\kubernetes\apache
デプロイメントの定義ファイル名と置く場所

デプロイメントで記述する項目

作成するデプロイメントとコンテナの情報

 ここで、デプロイメントとコンテナの設定情報を整理しておきます。この情報に基づいてデプロイメントの定義ファイルを作成します。

項目
APIグループとバージョンapps/v1
リソースの種類Deployment
デプロイメントの名前apache-dep
セレクターの対象とするラベルapp: apache
レプリカ (Pod) の数3
コンテナの名前apache-container
元となるイメージhttpd
コンテナポートcontainerPort: 80
作成するデプロイメントとコンテナの情報

【作成手順】デプロイメントの定義ファイル

 デプロイメントの定義ファイルを作成するには、「pod.yml」ファイルの内容を、ほぼそのままデプロイメントのtemplate内に転記します。以下は、ここで行うApacheサーバーを題材にしたデプロイメントの作成手順です。レプリカ数は「3」とし、Podが3つ作成されるように設定します。

手順内容
1. 大項目を並べるapiVersion, kind, metadata, spec を並べる
2. メタデータを記述するデプロイメント名: apache-dep、ラベル: app: apache
3. スペックを記述するセレクターラベル: app: apache、レプリカ数: 3、コンテナ名: apache-container、イメージ: httpd、コンテナポート: 80
作成手順

デプロイメントの定義ファイルの作成

 ここでは、KubernetesでApacheサーバを管理するためのデプロイメント定義ファイルを作成します。デプロイメントの定義ファイルは、複数のPodを管理するための重要な設定ファイルです。この定義ファイルを作成する手順を詳しく解説します。

【STEP1】「deployment.yml」ファイルを作成します。

 まず、デプロイメントの設定を記述する「deployment.yml」ファイルを作成します。VScodeを使って定義ファイルを作成します。以下の手順で進めていきます。

・PowerShellを起動し、作業ディレクトリに移動します。

PS C:\Users\joeac> cd desktop\kubernetes
PS C:\Users\joeac\Desktop\kubernetes>

・「apache」ディレクトリに移動して、VSCodeを使って「deployment.yml」ファイルを作成します。

PS C:\Users\joeac\Desktop\kubernetes> cd apache 
PS C:\Users\joeac\Desktop\kubernetes\apache> code deployment.yml

これで、VSCodeが起動し、deployment.yml ファイルが開かれます。

【STEP2】大項目を並べます。

 次に、デプロイメント定義ファイルに必要な大項目(apiVersionkindmetadataspec)を並べます。これらはKubernetesリソースの基本構造を定義するために必要です。

以下の内容を入力します。

apiVersion:
kind:
metadata:
spec:

【STEP3】apiVersionkind の設定を入力します。

 APIのバージョンとリソースの種類を設定します。この場合は、デプロイメントリソースを作成するために apps/v1Deployment を指定します。

以下のように入力します。

apiVersion: apps/v1
kind: Deployment
metadata:
spec:

【STEP4】metadata の設定値を入力します。

 metadata の中にデプロイメントの名前を設定します。これにより、デプロイメントに一意の名前が付けられます。名前は「apache-dep」とします。

以下のように入力します。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: apache-dep
spec:

【STEP5】spec にセレクターとレプリカの値を設定します。

 spec 内にセレクターとレプリカの設定を行います。selector でラベル app: apache を持つPodを選択し、replicas で3つのPodを作成するように指定します。

以下のように入力します。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: apache-dep
spec:
  selector:
    matchLabels:
      app: apache
  replicas: 3

【STEP6】spec のテンプレートにPodの内容を転記します。

 template 以下にPodのメタデータとスペックを記述します。この部分には、前に作成した「pod.yml 」の内容をほぼそのまま転記します。template内のmetadataにname(名前)は記入しません。転記したらpod.ymlファイルは削除してかまいません。スペースには気をつけて転記します。

以下のように編集します。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: apache-dep
spec:
  selector:
    matchLabels:
      app: apache
  replicas: 3
  template:
    metadata:
      labels:
        app: apache
    spec:
      containers:
        - name: apache-container
          image: httpd
          ports:
            - containerPort: 80

【STEP7】保存します。

 定義した内容を見直して、問題が無ければ deployment.yml ファイルを保存します。字下げやスペースに注意し、特に template 以下が正しくインデントされていることを確認しましょう。

これで、デプロイメントの定義ファイルが完成しました。

まとめ

 デプロイメントは、Kubernetesにおけるアプリケーションの管理とスケーリングを自動化するための重要なリソースです。定義ファイルの正しい記述によって、安定したアプリケーションの稼働が保証されます。