このページで解説している内容は、以下の 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のスペックを書く各セクションの解説
- apiVersion:
apps/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】大項目を並べます。
次に、デプロイメント定義ファイルに必要な大項目(apiVersion、kind、metadata、spec)を並べます。これらはKubernetesリソースの基本構造を定義するために必要です。
以下の内容を入力します。
apiVersion:
kind:
metadata:
spec:【STEP3】apiVersion と kind の設定を入力します。
APIのバージョンとリソースの種類を設定します。この場合は、デプロイメントリソースを作成するために apps/v1 と Deployment を指定します。
以下のように入力します。
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におけるアプリケーションの管理とスケーリングを自動化するための重要なリソースです。定義ファイルの正しい記述によって、安定したアプリケーションの稼働が保証されます。
