導入
Kubernetes では、Pod どうしや上位の部品を結びつけるのに、直接「この Pod」と名指ししません。代わりに ラベル(付箋) を貼り、セレクタ(付箋の条件) で束ねます。この仕組みは後の章の Service や Deployment がすべて土台にする、極めて重要な考え方です。
説明
ラベル(label) とは、Pod などに貼る「キー=値」の付箋です(例:app=web、env=prod)。1つの Pod に何枚でも貼れます。
セレクタ(selector) は、その付箋を条件にして対象を選ぶ仕組みです。「app=web の付箋が貼られた Pod ぜんぶ」というように、名前ではなく条件でゆるく束ねます。
graph TB
S["セレクタ: app=web<br/>(この付箋の Pod を束ねる)"]
P1["Pod A<br/>label: app=web"]
P2["Pod B<br/>label: app=web"]
P3["Pod C<br/>label: app=web"]
P4["Pod D<br/>label: app=api"]
S --> P1
S --> P2
S --> P3
S -. 一致しない .-x P4
kubectl でも、この付箋を使って対象を絞り込めます。
# app=web の付箋が貼られたPodだけを一覧
kubectl get pods -l app=web
# 各Podに貼られている付箋(ラベル)も一緒に表示
kubectl get pods --show-labels
# NAME READY STATUS RESTARTS AGE LABELS
# my-nginx 1/1 Running 0 2m app=web
なぜ名指しでなく付箋で束ねるのか。それは Pod が増えたり減ったり入れ替わったりするからです。名前で1個ずつ指定していたら、Pod が入れ替わるたびに全部書き換えねばなりません。「app=web という条件」で束ねておけば、条件に合う Pod が新しく増えても自動的に対象に含まれます。この「ゆるいつながり」こそ、次章以降で Service が通信先を、Deployment が管理対象の Pod を見つける仕組みそのものです。