0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

kubectl apply -f xxx.yaml

0
Last updated at Posted at 2026-04-19

kubectl apply -f xxx.yaml

このYAML で書くのは「こういう状態にしたい」という宣言です。kubectl apply -f xxx.yaml は、その宣言を API Server に送り、対象オブジェクトがなければ作成し、あれば更新します。apply は YAML と JSON の両方を受け付けます。Kubernetes のオブジェクトは API 上の永続的なエンティティで、.yaml で表現できます。 (Kubernetes)

まずは 「初心者が最初に読むべき、いちばん小さい Deployment の YAML」 を使って、1行ずつ分解します。

Deployment は、Pod を何個動かすかを宣言し、その状態を保つために ReplicaSet を使って管理する仕組みです。Kubernetes では kubectl が API を通じてこの宣言をクラスタへ送り、Deployment コントローラが実際の状態を望む状態へ近づけます。 (Kubernetes)

まず全体像

この図の意味は、Deployment が直接コンテナを動かすのではなく、まず ReplicaSet を管理し、その ReplicaSet が Pod の個数を保つ、ということです。ReplicaSet の役割は「指定された数の同じ Pod を安定して動かし続けること」です。 (Kubernetes)


最初に読むべき Deployment YAML

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:
  replicas: 2
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
            - containerPort: 80

これは、**「nginx コンテナが入った Pod を 2 個動かして保ってください」**という宣言です。Kubernetes オブジェクトの基本形は、apiVersionkindmetadataspec で表されます。 (Kubernetes)


1行ずつ分解

apiVersion: apps/v1

どの Kubernetes API の種類を使うかです。
Deployment は apps/v1 という API グループ・バージョンで扱います。Kubernetes オブジェクトでは apiVersion が必須項目です。 (Kubernetes)

kind: Deployment

何を作るかです。
ここでは Deployment を作る、という意味です。kind も Kubernetes オブジェクトの基本項目です。 (Kubernetes)

metadata:

そのオブジェクト自身の情報を書き始める場所です。
名前、ラベル、アノテーションなどの付帯情報はここに入ります。Kubernetes のオブジェクトには ObjectMeta というメタデータ部分があります。 (Kubernetes)

name: web

この Deployment の名前です。
web という名前の Deployment を作る、という意味です。あとで kubectl get deployment web のように、この名前で扱います。 (Kubernetes)

spec:

「どういう状態にしたいか」の本体です。
Kubernetes では spec が望む状態、status が実際の状態、という考え方が基本です。 (Kubernetes)

replicas: 2

Pod を 2 個にしてほしいという意味です。
Deployment はこの数を目標にして、足りなければ増やし、多ければ減らします。Deployment は宣言的に Pod 群を更新・管理します。 (Kubernetes)

selector:

Deployment が、自分が管理すべき Pod を見分ける条件です。
どの Pod を自分の配下とみなすかをここで決めます。 (Kubernetes)

matchLabels:

ラベル一致で選ぶという意味です。
この下に書いたラベル条件に一致する Pod を対象にします。Kubernetes では labels と selectors が、オブジェクトの関連付けに広く使われます。 (Kubernetes)

app: web

これは app=web というラベル条件です。
つまりこの Deployment は、app: web というラベルを持つ Pod を管理対象にします。 (Kubernetes)

template:

ここから下は、Deployment が作る Pod の設計図です。
Deployment は Pod を直接 1 個書くのではなく、「こういう Pod を作ってね」というテンプレートを持ちます。 (Kubernetes)

metadata:template: の下のもの)

これは 作られる Pod 自身のメタデータです。
上の metadata.name: web は Deployment 自体の名前でしたが、こちらは Pod 側の metadata です。インデントが違うと意味も変わります。Kubernetes の YAML は、インデントで親子関係を表します。 (Kubernetes)

labels:

これから作る Pod に、どんなラベルを付けるかです。
Pod に付くラベルは、Service や Deployment の selector が見に行く重要な情報です。 (Kubernetes)

app: webtemplate.metadata.labels の中)

これで、作られる Pod に app=web というラベルが付きます。
ここが selector.matchLabels.app: web と一致しているのがとても重要です。ずれていると、Deployment が自分の Pod を正しく管理できません。Deployment は selector で対象 Pod を見つける仕組みだからです。 (Kubernetes)

spec:template: の下のもの)

これは Pod の中身です。
どのコンテナを入れるか、環境変数は何か、ポートは何か、ボリュームはあるか、などはここに書きます。Pod は Kubernetes がコンテナを動かす基本単位です。 (Kubernetes)

containers:

Pod の中に入れるコンテナ一覧です。
containers は配列なので、この下に - が出てきます。Pod は 1 個以上のコンテナを持てます。 (Kubernetes)

- name: nginx

-一覧の1件目という意味です。
このコンテナの名前を nginx にしています。コンテナ名は Pod 内でそのコンテナを識別するために使います。 (Kubernetes)

image: nginx:latest

このコンテナで使うイメージ名です。
ここでは nginx:latest というコンテナイメージを使います。Deployment の目的は、こうしたコンテナ化アプリをクラスタ上で動かすことです。 (Kubernetes)

ports:

このコンテナが使うポート情報を書きます。
これは「このコンテナはこのポートを使います」という宣言で、あとで読む人や他の設定が理解しやすくなります。 (Kubernetes)

- containerPort: 80

コンテナ内で 80番ポートを使う、という意味です。
nginx は通常 HTTP を 80 番で待ち受けるので、最初の例として分かりやすいです。Service は Pod 群への安定した入口を提供し、こうしたアプリに通信を流すために使われます。 (Kubernetes)


この YAML を初心者向けに1文で言うと

web という名前の Deployment を作り、app=web ラベル付きの nginx Pod を 2 個、常に維持する、という意味です。Deployment は宣言された望む状態に合わせて Pod 群を管理します。 (Kubernetes)


初心者が最初に特に覚えるべき3点

1. metadata.name は Deployment 自体の名前

これは 管理オブジェクトの名前です。Pod の名前ではありません。Kubernetes オブジェクトでは metadata がオブジェクト自体の情報を持ちます。 (Kubernetes)

2. selector.matchLabelstemplate.metadata.labels はそろえる

ここが食い違うと、Deployment が「自分の Pod」を見つけにくくなります。Deployment は selector で対象 Pod を判断します。 (Kubernetes)

3. template.spec.containers が、実際に動くコンテナの本体

初心者が一番見たいのはここです。
どのイメージを使うのか何ポートか環境変数は何かvolume はあるかは、この中に増えていきます。Pod はコンテナを実行する基本単位です。 (Kubernetes)


最初はこう読めば十分です

YAML を上から順に見ると、こう読めます。

  1. apps/v1
  2. Deployment
  3. web という名前で作って
  4. nginx の Pod を
  5. app=web ラベル付きで
  6. 2 個維持する。 (Kubernetes)

自分で中身を調べるときの便利コマンド

kubectl explain deployment
kubectl explain deployment.spec
kubectl explain deployment.spec.template.spec.containers

kubectl explain は、各リソースやフィールドの説明を OpenAPI から表示するコマンドです。どのフィールドが何を意味するか確認するときに一番便利です。 (Kubernetes)

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?