Kubernetes Run コマンド

KubernetesBeginner
オンラインで実践に進む

はじめに

kubectl run コマンドは、Kubernetes で Pod を作成するためのシンプルな手段です。現在の Kubernetes バージョンでは、Deployment や Job の作成に kubectl run を使用することは推奨されていないため、本実験では kubectl run と、それぞれのワークロードに適した専用コマンドを組み合わせて学習します。この実験を通じて、各ワークロードタイプに対してどのコマンドを使用すべきかを理解しましょう。

この実験を終えると、以下のことができるようになります。

  1. Minikube クラスターの起動と確認。
  2. kubectl run を使用した Pod の作成。
  3. 複数のレプリカを持つ Deployment の作成。
  4. バッチ処理のための Job の作成と確認。
  5. クラスターを維持するためのリソースのクリーンアップ。

Minikube クラスターの起動

リソースを作成する前に、実行中の Kubernetes クラスターが必要です。Minikube は、ローカルマシン上で動作する軽量な Kubernetes 環境です。

  1. 作業ディレクトリへの移動:

    ターミナルを開き、デフォルトのプロジェクトフォルダに移動します。

    cd /home/labex/project
    
  2. Minikube の起動:

    Minikube を起動して Kubernetes クラスターを初期化します。

    minikube start
    
    • このコマンドにより、ローカルマシン上にシングルノードの Kubernetes クラスターがセットアップされます。
    • システムのパフォーマンスによっては、起動に数分かかる場合があります。
  3. Minikube の動作確認:

    Minikube クラスターの状態を確認します。

    minikube status
    
    • kubeletapiserver などのコンポーネントが Running と表示されていることを確認してください。
    • クラスターが実行されていない場合は、再度 minikube start を実行してください。

Minikube の起動で問題が発生した場合は、必要に応じて minikube delete を実行して環境をリセットしてください。

kubectl run コマンドの探索

kubectl run コマンドは、特定のイメージを使用して Pod を作成・実行するために使用されます。Pod の動作、環境変数、仕様をカスタマイズするための多様なオプションが用意されています。

以下のコマンドを実行して、kubectl run で利用可能なオプションを確認してください。

kubectl run -h

以下のような出力が表示されます。

Create and run a particular image in a pod.

Examples:
## Start a nginx pod
kubectl run nginx --image=nginx

## Start a hazelcast pod and let the container expose port 5701
kubectl run hazelcast --image=hazelcast/hazelcast --port=5701

## Start a hazelcast pod and set environment variables "DNS_DOMAIN=cluster" and "POD_NAMESPACE=default" in the container
kubectl run hazelcast --image=hazelcast/hazelcast --env="DNS_DOMAIN=cluster" --env="POD_NAMESPACE=default"

## Start a hazelcast pod and set labels "app=hazelcast" and "env=prod" in the container
kubectl run hazelcast --image=hazelcast/hazelcast --labels="app=hazelcast,env=prod"

## Dry run; print the corresponding API objects without creating them
kubectl run nginx --image=nginx --dry-run=client

## Start a nginx pod, but overload the spec with a partial set of values parsed from JSON
kubectl run nginx --image=nginx --overrides='{ "apiVersion": "v1", "spec": { ... } }'

## Start a busybox pod and keep it in the foreground, don't restart it if it exits
kubectl run -i -t busybox --image=busybox --restart=Never

## Start the nginx pod using the default command, but use custom arguments (arg1 .. argN) for that command
kubectl run nginx --image=nginx -- <arg1> <arg2> ... <argN>

## Start the nginx pod using a different command and custom arguments
kubectl run nginx --image=nginx --command -- <cmd> <arg1> ... <argN>

Pod の作成

Pod は Kubernetes における最小のデプロイ単位であり、1つまたは複数のコンテナが一緒に実行される環境を表します。このステップでは、Nginx Web サーバーを実行する Pod を作成します。

  1. Pod の作成:

    以下のコマンドを実行して、nginx-pod という名前の Pod を作成します。

    kubectl run nginx-pod --image=nginx
    
    • --image オプションは使用するコンテナイメージを指定します。ここでは公式の Nginx イメージを使用しています。
  2. Pod の確認:

    Pod が実行されていることを確認します。

    kubectl get pods
    
    • 出力の中に nginx-pod があることを確認してください。
    • Pod の準備が整うと、STATUS 列が Running と表示されます。

Pod のステータスが Pending と表示される場合、Kubernetes がコンテナイメージをダウンロードしている可能性があります。少し待ってから再度 kubectl get pods を実行してください。

Deployment の作成とレプリカのスケーリング

Deployment は Pod のセットを管理し、意図した通りに実行されていることを保証します。アプリケーションのスケーリングや更新に役立ちます。

  1. Deployment の作成:

    以下のコマンドを実行して、nginx-deployment という名前の Deployment を作成します。

    kubectl create deployment nginx-deployment --image=nginx
    
    • --image オプションで使用するコンテナイメージを指定します。
  2. Deployment を 3 レプリカにスケーリング:

    --replicas フラグは非推奨となったため、代わりに kubectl scale を使用してスケーリングを行います。

    kubectl scale コマンドを使用してレプリカ数を調整します。

    kubectl scale deployment nginx-deployment --replicas=3
    
    • これにより、Deployment の一部として 3 つの Pod が実行されるようになります。
  3. Deployment とレプリカの確認:

    Deployment と Pod の状態を確認します。

    kubectl get deployments
    kubectl get pods
    
    • Deployment の READY 列に 3 つのレプリカが表示されていることを確認してください。
    • kubectl get pods の出力に 3 つの Pod がリストされていることを確認します。

Pod が Running 状態にならない場合は、クラスターのリソース不足が原因である可能性があります。以下のコマンドで Pod のイベントを確認してください。

kubectl describe pod <pod-name>

Job の作成

このステップでは、短いバッチタスクを実行するための Kubernetes Job を作成します。Job は正常終了を追跡するため、長時間実行される Pod とは異なり、コマンドを実行して終了させる必要がある場合に適したリソースです。

  1. Job の作成

以下のコマンドを実行して、busybox-job という名前の Job を作成します。

kubectl create job busybox-job --image=busybox -- echo "Hello from Kubernetes"
  • kubectl create job は、スタンドアロンの Pod ではなく Job リソースを作成します。
  • echo コマンドは、Job が実行するタスクを定義しています。
  1. Job ステータスの確認

以下のコマンドを実行して Job を確認します。

kubectl get jobs

期待される出力:

NAME          COMPLETIONS   DURATION   AGE
busybox-job   1/1           5s         10s
  • COMPLETIONS: Job が正常に 1 回完了したことを示します (1/1)。
  • まだ Job が表示されない場合は、数秒待ってから再度 kubectl get jobs を実行してください。
  1. Job の Pod の確認

Job は Pod 内で実行されるため、以下のコマンドで Pod を確認します。

kubectl get pods

期待される出力:

NAME                      READY   STATUS      RESTARTS   AGE
busybox-job-abcde         0/1     Completed   0          30s
  • Pod 名には、Job によって所有されているため、生成されたサフィックスが含まれます。
  • STATUS フィールドが Completed と表示されていれば、Job の Pod が正常に終了したことを示します。
  1. Job の出力確認

Job のログを調べて出力を確認します。

kubectl logs job/busybox-job

期待される出力:

Hello from Kubernetes

これで Job が正常に実行されたことが確認できました。

クリーンアップ

クラスターを整理するために、実験中に作成したリソースを削除します。

  1. リソースの削除:

    以下のコマンドを実行します。

    kubectl delete pod nginx-pod
    kubectl delete deployment nginx-deployment
    kubectl delete job busybox-job
    
  2. クリーンアップの確認:

    リソースが残っていないことを確認します。

    kubectl get pods
    kubectl get deployments
    
    • 作成したリソースがリストに表示されないことを確認してください。

まとめ

この実験では、以下のことを学びました。

  1. Minikube クラスターの起動と確認。
  2. kubectl run を使用した Pod の作成、および Deployment や Job を作成するための専用コマンドの使用。
  3. クラスターを整理するためのリソースのクリーンアップ。

また、Kubernetes がワークロードの種類に応じて異なるコマンドを使用することも理解できました。これらの手順を練習することで、より高度な Kubernetes ワークフローのための強固な基盤を築くことができます。