本文へスキップ
BecomeCoder

Kubernetesコース · 第2章 Pod ― 最小の実行単位 · レッスン10

ラベルとセレクタ ― ゆるくつなぐ仕組み

ブラウザで完結

導入

Kubernetes では、Pod どうしや上位の部品を結びつけるのに、直接「この Pod」と名指ししません。代わりに ラベル(付箋) を貼り、セレクタ(付箋の条件) で束ねます。この仕組みは後の章の Service や Deployment がすべて土台にする、極めて重要な考え方です。

説明

ラベル(label) とは、Pod などに貼る「キー=値」の付箋です(例:app=webenv=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 を見つける仕組みそのものです。

実際に動かしてみよう

上がマニフェスト(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 などの動きを再現した軽量な自作シミュレータです)。
スクロールして表示された時点でも自動で読み込まれます。