kubectl run と kubectl apply の違い
kubectl run
と kubectl apply
は、Kubernetes クラスターにリソースを作成および管理するためのコマンドですが、それぞれの用途や動作が異なります。以下では、その違いを詳細に解説します。
概要
-
kubectl run
- 主に Pod を素早く作成するために使用されます。
- コマンドライン引数で指定した最小限の設定で Pod を生成します。
- 手軽に試験環境を作成したいときに便利です。
-
kubectl apply
- Kubernetes マニフェスト(YAML または JSON ファイル)を使ってリソースを宣言的に作成・更新するために使用されます。
- 既存リソースの状態をマニフェストに基づいて変更できます。
- 本番環境では主にこの方法が推奨されます。
用途の違い
kubectl run
の用途
- 主に開発やデバッグのために使用されます。
- 簡単にコンテナを実行したい場合に便利です。
- 例:
このコマンドは、指定したイメージ(nginx)を基に Pod を作成します。
kubectl run nginx --image=nginx
kubectl apply
の用途
- 宣言的にリソースを管理します。
- 一度に複数のリソースを作成・更新できます。
- バージョン管理システムと連携しやすいです。
- 例:
このコマンドは、マニフェスト(deployment.yaml)に基づいてリソースを作成または更新します。
kubectl apply -f deployment.yaml
使用方法の詳細
kubectl run
の詳細
- コマンド:
kubectl run <name> --image=<image> [--port=<port>] [--env=<env-vars>] [options]
- 主な特徴:
- デフォルトで作成されるのは Pod。
- Deployment を作成することはできません。
- 基本的な引数を指定するだけで実行可能です。
- 使用例:
このコマンドは、
kubectl run myapp --image=myapp:1.0 --port=8080
myapp:1.0
イメージを使用してポート 8080 で動作する Pod を作成します。
kubectl apply
の詳細
- コマンド:
kubectl apply -f <manifest-file> [options]
- 主な特徴:
- マニフェストに記述されたリソースを作成・更新します。
-
kubectl diff
コマンドと組み合わせることで変更を事前に確認可能です。 - 既存リソースがあれば更新、なければ作成する仕組みです。
- 使用例:
kubectl apply -f pod.yaml
pod.yaml
に定義されたリソースを適用します。
宣言的管理と命令的管理
Kubernetes では、リソース管理方法として以下の 2 種類があります。
-
命令的管理(Imperative Management):
- 手動でコマンドを実行してリソースを作成・更新します。
- 例:
kubectl run
,kubectl create
,kubectl delete
。 - メリット:
- 手軽で簡単。
- 少量の変更に適している。
- デメリット:
- 設定が履歴管理されない。
- チームでの作業では非効率。
-
宣言的管理(Declarative Management):
- リソースの状態をマニフェストファイルに記述して管理します。
- 例:
kubectl apply
。 - メリット:
- 設定をコードとしてバージョン管理可能。
- クラスターの状態を常に一定に保つことができる。
- デメリット:
- 初期設定に手間がかかる。
kubectl run
は命令的管理に分類され、kubectl apply
は宣言的管理に分類されます。
サポートの違い
- Kubernetes のバージョンが上がるにつれ、
kubectl run
の用途は制限されてきました。- 以前は Deployment を作成する機能がありましたが、現在は Pod 作成専用になっています。
-
kubectl apply
は現在も積極的に使用されており、Kubernetes の公式ドキュメントでも推奨されています。
実例・比較
Pod を作成する例
-
kubectl run
:kubectl run nginx --image=nginx
- 即座に Pod を作成します。
- 設定内容はコマンドの引数に依存します。
-
kubectl apply
:# pod.yaml apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx
kubectl apply -f pod.yaml
- マニフェストに記述された設定に基づいて Pod を作成します。
- 設定が明確で再利用可能です。
状態の更新
-
kubectl run
:- 一度作成したリソースに対しては適用できません。
-
kubectl apply
:- マニフェストを変更し、再度
kubectl apply
を実行することでリソースの状態を更新します。
- マニフェストを変更し、再度
場面に応じた使用
kubectl run
を使用すべき場面
- 試験的にコンテナをすばやく実行したい場合。
- 複雑な設定が不要な場合。
kubectl apply
を使用すべき場面
- 本番環境のリソースを管理する場合。
- 複数のリソースを一括で管理・更新したい場合。
- バージョン管理やチームでの作業が必要な場合。
結論
kubectl run
と kubectl apply
は、それぞれ異なるユースケースに適したコマンドです。kubectl run
は単純な Pod 作成に向いており、開発やデバッグで役立ちます。一方、kubectl apply
は宣言的管理に基づいており、リソースのライフサイクル全体を通して一貫性を保つのに適しています。
おわり
現在、「つくって、壊して、直して学ぶ Kubernetes入門」を読みながら学習を進めてます。頑張ります。