はじめに
kubectl run コマンドは、Kubernetes で Pod を作成するためのシンプルな手段です。現在の Kubernetes バージョンでは、Deployment や Job の作成に kubectl run を使用することは推奨されていないため、本実験では kubectl run と、それぞれのワークロードに適した専用コマンドを組み合わせて学習します。この実験を通じて、各ワークロードタイプに対してどのコマンドを使用すべきかを理解しましょう。
この実験を終えると、以下のことができるようになります。
- Minikube クラスターの起動と確認。
kubectl runを使用した Pod の作成。- 複数のレプリカを持つ Deployment の作成。
- バッチ処理のための Job の作成と確認。
- クラスターを維持するためのリソースのクリーンアップ。
Minikube クラスターの起動
リソースを作成する前に、実行中の Kubernetes クラスターが必要です。Minikube は、ローカルマシン上で動作する軽量な Kubernetes 環境です。
作業ディレクトリへの移動:
ターミナルを開き、デフォルトのプロジェクトフォルダに移動します。
cd /home/labex/projectMinikube の起動:
Minikube を起動して Kubernetes クラスターを初期化します。
minikube start- このコマンドにより、ローカルマシン上にシングルノードの Kubernetes クラスターがセットアップされます。
- システムのパフォーマンスによっては、起動に数分かかる場合があります。
Minikube の動作確認:
Minikube クラスターの状態を確認します。
minikube statuskubeletやapiserverなどのコンポーネントが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 を作成します。
Pod の作成:
以下のコマンドを実行して、
nginx-podという名前の Pod を作成します。kubectl run nginx-pod --image=nginx--imageオプションは使用するコンテナイメージを指定します。ここでは公式の Nginx イメージを使用しています。
Pod の確認:
Pod が実行されていることを確認します。
kubectl get pods- 出力の中に
nginx-podがあることを確認してください。 - Pod の準備が整うと、
STATUS列がRunningと表示されます。
- 出力の中に
Pod のステータスが Pending と表示される場合、Kubernetes がコンテナイメージをダウンロードしている可能性があります。少し待ってから再度 kubectl get pods を実行してください。
Deployment の作成とレプリカのスケーリング
Deployment は Pod のセットを管理し、意図した通りに実行されていることを保証します。アプリケーションのスケーリングや更新に役立ちます。
Deployment の作成:
以下のコマンドを実行して、
nginx-deploymentという名前の Deployment を作成します。kubectl create deployment nginx-deployment --image=nginx--imageオプションで使用するコンテナイメージを指定します。
Deployment を 3 レプリカにスケーリング:
--replicasフラグは非推奨となったため、代わりにkubectl scaleを使用してスケーリングを行います。kubectl scaleコマンドを使用してレプリカ数を調整します。kubectl scale deployment nginx-deployment --replicas=3- これにより、Deployment の一部として 3 つの Pod が実行されるようになります。
Deployment とレプリカの確認:
Deployment と Pod の状態を確認します。
kubectl get deployments kubectl get pods- Deployment の
READY列に 3 つのレプリカが表示されていることを確認してください。 kubectl get podsの出力に 3 つの Pod がリストされていることを確認します。
- Deployment の
Pod が Running 状態にならない場合は、クラスターのリソース不足が原因である可能性があります。以下のコマンドで Pod のイベントを確認してください。
kubectl describe pod <pod-name>
Job の作成
このステップでは、短いバッチタスクを実行するための Kubernetes Job を作成します。Job は正常終了を追跡するため、長時間実行される Pod とは異なり、コマンドを実行して終了させる必要がある場合に適したリソースです。
- Job の作成
以下のコマンドを実行して、busybox-job という名前の Job を作成します。
kubectl create job busybox-job --image=busybox -- echo "Hello from Kubernetes"
kubectl create jobは、スタンドアロンの Pod ではなく Job リソースを作成します。echoコマンドは、Job が実行するタスクを定義しています。
- Job ステータスの確認
以下のコマンドを実行して Job を確認します。
kubectl get jobs
期待される出力:
NAME COMPLETIONS DURATION AGE
busybox-job 1/1 5s 10s
COMPLETIONS: Job が正常に 1 回完了したことを示します (1/1)。- まだ Job が表示されない場合は、数秒待ってから再度
kubectl get jobsを実行してください。
- 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 が正常に終了したことを示します。
- Job の出力確認
Job のログを調べて出力を確認します。
kubectl logs job/busybox-job
期待される出力:
Hello from Kubernetes
これで Job が正常に実行されたことが確認できました。
クリーンアップ
クラスターを整理するために、実験中に作成したリソースを削除します。
リソースの削除:
以下のコマンドを実行します。
kubectl delete pod nginx-pod kubectl delete deployment nginx-deployment kubectl delete job busybox-jobクリーンアップの確認:
リソースが残っていないことを確認します。
kubectl get pods kubectl get deployments- 作成したリソースがリストに表示されないことを確認してください。
まとめ
この実験では、以下のことを学びました。
- Minikube クラスターの起動と確認。
kubectl runを使用した Pod の作成、および Deployment や Job を作成するための専用コマンドの使用。- クラスターを整理するためのリソースのクリーンアップ。
また、Kubernetes がワークロードの種類に応じて異なるコマンドを使用することも理解できました。これらの手順を練習することで、より高度な Kubernetes ワークフローのための強固な基盤を築くことができます。


