本文へスキップ
BecomeCoder

Kubernetesコース · 第3章 ワークロード ― 複製と無停止デプロイ · レッスン14

Deployment ― 宣言的にアプリを管理する主役

ブラウザで完結

導入

いよいよ、実務で普通のアプリを動かすときの主役 Deployment(デプロイメント) です。Pod の複製を保ちつつ、バージョン更新も安全にこなせる、いちばんよく使うワークロードです。

説明

Deployment(デプロイメント) は、「アプリをこういう状態で動かし続けたい」を宣言する部品です。内部では ReplicaSet を作って Pod の個数を保ち、さらに更新(次レッスン)を安全に取り仕切ります。所有の階層はこうなっています。

graph TB
    D["Deployment<br/>(アプリの管理者)"]
    RS["ReplicaSet<br/>(個数を保つ)"]
    P1[Pod]
    P2[Pod]
    P3[Pod]
    D --> RS
    RS --> P1
    RS --> P2
    RS --> P3

Deployment は「Deployment が ReplicaSet を持ち、ReplicaSet が Pod を持つ」という3層。あなたは一番上の Deployment だけを宣言すれば、下2層は自動で用意されます。nginx を3個動かす Deployment のマニフェストはこうです。

apiVersion: apps/v1        # Deployment は apps/v1
kind: Deployment
metadata:
  name: web-deploy
spec:
  replicas: 3              # Podを3個維持したい
  selector:
    matchLabels:
      app: web             # この付箋のPodを管理対象にする
  template:                # 作るPodの「型紙」
    metadata:
      labels:
        app: web           # 型紙から作るPodに貼る付箋(selectorと一致させる)
    spec:
      containers:
        - name: nginx
          image: nginx:1.27
          ports:
            - containerPort: 80

第2章の Pod マニフェストと見比べてください。template: の中身が、まさに Pod の定義(metadataspec)そのものです。Deployment は「この**型紙(template)**の Pod を、replicas の数だけ、selector の条件で管理する」と宣言しているわけです。

  • replicas … 維持したい Pod の個数。
  • selector.matchLabels … 管理対象の Pod を選ぶラベル条件。
  • template … 増やすときに使う Pod の型紙。ここの labelsselector と一致させる(一致しないと Deployment が自分の Pod を認識できずエラーになる)。

適用も削除も、Pod のときと同じ kubectl apply -f deploy.yaml / kubectl delete -f deploy.yaml です。以後、この Deployment を軸に、更新・スケールを見ていきます。

実際に動かしてみよう

上がマニフェスト(YAML)エディタ、下が kubectl の端末です。エディタの内容は `manifest.yaml` として保存され、下で `kubectl apply -f manifest.yaml` を実行するとクラスタに反映されます(pod.yaml / deploy.yaml / service.yaml も最初から置いてあります)。`kubectl get pods` / `describe` / `scale` / `rollout` などで結果を確かめましょう(本物のKubernetesではなく、動きを再現した軽量なシミュレータです)。各レッスンは毎回まっさらな状態から始まり、「最初からやり直す」で戻せます。

kubectl(シミュレート)

マニフェスト(YAML)を書いて kubectl コマンドを試せる学習用クラスタを読み込みます(本物のKubernetesではなく、apply/get/describe/scale/rollout などの動きを再現した軽量な自作シミュレータです)。
スクロールして表示された時点でも自動で読み込まれます。