導入
いよいよ、実務で普通のアプリを動かすときの主役 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 の定義(metadata と spec)そのものです。Deployment は「この**型紙(template)**の Pod を、replicas の数だけ、selector の条件で管理する」と宣言しているわけです。
- replicas … 維持したい Pod の個数。
- selector.matchLabels … 管理対象の Pod を選ぶラベル条件。
- template … 増やすときに使う Pod の型紙。ここの
labelsはselectorと一致させる(一致しないと Deployment が自分の Pod を認識できずエラーになる)。
適用も削除も、Pod のときと同じ kubectl apply -f deploy.yaml / kubectl delete -f deploy.yaml です。以後、この Deployment を軸に、更新・スケールを見ていきます。