1
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?

run? apply? どう違うの?

Posted at

kubectl run と kubectl apply の違い

kubectl runkubectl apply は、Kubernetes クラスターにリソースを作成および管理するためのコマンドですが、それぞれの用途や動作が異なります。以下では、その違いを詳細に解説します。


概要

  • kubectl run

    • 主に Pod を素早く作成するために使用されます。
    • コマンドライン引数で指定した最小限の設定で Pod を生成します。
    • 手軽に試験環境を作成したいときに便利です。
  • kubectl apply

    • Kubernetes マニフェスト(YAML または JSON ファイル)を使ってリソースを宣言的に作成・更新するために使用されます。
    • 既存リソースの状態をマニフェストに基づいて変更できます。
    • 本番環境では主にこの方法が推奨されます。

用途の違い

kubectl run の用途

  • 主に開発やデバッグのために使用されます。
  • 簡単にコンテナを実行したい場合に便利です。
  • 例:
    kubectl run nginx --image=nginx
    
    このコマンドは、指定したイメージ(nginx)を基に Pod を作成します。

kubectl apply の用途

  • 宣言的にリソースを管理します。
  • 一度に複数のリソースを作成・更新できます。
  • バージョン管理システムと連携しやすいです。
  • 例:
    kubectl apply -f deployment.yaml
    
    このコマンドは、マニフェスト(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 runkubectl apply は、それぞれ異なるユースケースに適したコマンドです。kubectl run は単純な Pod 作成に向いており、開発やデバッグで役立ちます。一方、kubectl apply は宣言的管理に基づいており、リソースのライフサイクル全体を通して一貫性を保つのに適しています。

おわり

現在、「つくって、壊して、直して学ぶ Kubernetes入門」を読みながら学習を進めてます。頑張ります。

1
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
1
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?