ジョブとクロンジョブでポッドを実行する

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

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

Kubernetes では、長時間稼働するアプリケーションやサービスの一部ではないタスクを実行するために、ジョブとクロンジョブが使用されます。ジョブは一度限りのタスクに使用され、クロンジョブは定期的に実行する必要のあるタスクに使用されます。

この実験では、Kubernetes でジョブとクロンジョブを使ってポッドを実行する方法を学びます。簡単な例から始めて、徐々に複雑な例に至ります。

これは Guided Lab です。学習と実践を支援するためのステップバイステップの指示を提供します。各ステップを完了し、実践的な経験を積むために、指示に注意深く従ってください。過去のデータによると、この 初級 レベルの実験の完了率は 97%です。学習者から 100% の好評価を得ています。

Minikube クラスタを起動する

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

  1. 作業ディレクトリに移動する:

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

    cd /home/labex/project
  2. Minikube を起動する:

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

    minikube start
    • このコマンドは、ローカル マシン上に単一ノードの Kubernetes クラスタをセットアップします。
    • Minikube は、システムの性能に応じて数分かかる場合があります。
  3. Minikube が稼働していることを確認する:

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

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

Minikube の起動に問題がある場合は、必要に応じて minikube delete を使用して環境をリセットします。

ジョブでポッドを実行する

最初のステップは、ジョブを実行するポッドを作成することです。この例では、コンソールに "Hello, World!" と表示するコマンドを実行するポッドを作成します。

/home/labex/project/ 以下に job.yaml という名前のファイルを作成し、以下の内容を記述します。

apiVersion: batch/v1
kind: Job
metadata:
  name: hello-job
spec:
  template:
    spec:
      containers:
        - name: hello
          image: busybox
          command: ["sh", "-c", 'echo "Hello, World!"']
      restartPolicy: Never
  backoffLimit: 4

このファイルでは、hello-job という名前のジョブを定義しており、このジョブは hello という名前の単一のコンテナを実行します。コンテナは busybox イメージを実行し、コンソールに "Hello, World!" と表示するコマンドを実行します。

ジョブを作成するには、次のコマンドを実行します。

kubectl apply -f job.yaml

ジョブの状態を確認するには、次のコマンドを実行します。

kubectl get jobs

ジョブが完了したら、次のコマンドを実行してポッドのログを表示できます。

kubectl logs <POD_NAME>

<POD_NAME> を、ジョブを実行したポッドの名前に置き換えてください。kubectl get pods |grep hello-job コマンドで POD_NAME を取得できます。

おめでとうございます。Kubernetes でジョブでポッドを成功裏に実行しました!

複数のポッドでジョブを実行する

場合によっては、より良いパフォーマンスのために複数のポッドでジョブを実行する必要があります。この例では、リモート サーバーからファイルをダウンロードするために複数のポッドを実行するジョブを作成します。

/home/labex/project/ 以下に multi-pod-job.yaml という名前のファイルを作成し、以下の内容を記述します。

apiVersion: batch/v1
kind: Job
metadata:
  name: download-job
spec:
  completions: 3
  parallelism: 2
  template:
    spec:
      containers:
        - name: downloader
          image: curlimages/curl
          command: ["curl", "-o", "/data/file", "http://example.com/file"]
          volumeMounts:
            - name: data-volume
              mountPath: /data
      restartPolicy: Never
      volumes:
        - name: data-volume
          emptyDir: {}
  backoffLimit: 4

このファイルでは、curlimages/curl イメージを使って複数のポッドを実行する download-job という名前のジョブを定義しています。各ポッドは http://example.com/file からファイルをダウンロードし、data-volume という名前の共有ボリュームに保存します。

ジョブを作成するには、次のコマンドを実行します。

kubectl apply -f multi-pod-job.yaml

ジョブの状態を確認するには、次のコマンドを実行します。

kubectl get jobs

ジョブが完了したら、次のコマンドを実行してポッドのログを表示できます。

kubectl logs <POD_NAME>

<POD_NAME> を、ジョブを実行した任意のポッドの名前に置き換えてください。ファイルのダウンロード ログを確認でき、kubectl get pod |grep download-job コマンドで POD_NAME を取得できます。

おめでとうございます。Kubernetes で複数のポッドでジョブを成功裏に実行しました!

クロンジョブを実行する

一度限りのジョブに加えて、Kubernetes は定期的にタスクを実行するためのクロンジョブもサポートしています。この例では、毎分コマンドを実行するクロンジョブを作成します。

/home/labex/project/ 以下に cronjob.yaml という名前のファイルを作成し、以下の内容を記述します。

apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello-cronjob
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: hello
              image: busybox
              command: ["sh", "-c", 'echo "Hello, World!"']
          restartPolicy: Never
  successfulJobsHistoryLimit: 3
  failedJobsHistoryLimit: 3

このファイルでは、毎分コマンドを実行する hello-cronjob という名前のクロンジョブを定義しています。コマンドは、最初の例でコンソールに "Hello, World!" と表示するために使用したものと同じです。

クロンジョブを作成するには、次のコマンドを実行します。

kubectl apply -f cronjob.yaml

クロンジョブの状態を確認するには、次のコマンドを実行します。

kubectl get cronjobs

クロンジョブが実行されているときは、次のコマンドを実行してポッドのログを表示できます。

kubectl logs -f <POD_NAME>

<POD_NAME> を、クロンジョブによって作成された任意のポッドの名前に置き換えてください。kubectl get pod |grep hello-cronjob コマンドで POD_NAME を取得できます。

おめでとうございます。Kubernetes でクロンジョブを成功裏に実行しました!

まとめ

この実験では、Kubernetes でポッドをジョブとクロンジョブで実行する方法を学びました。まずは、ジョブを実行する単純なポッドの例から始め、徐々に複数のポッドや定期的に実行されるクロンジョブを持つより複雑なジョブの例に至りました。この知識を使えば、Kubernetes で長時間実行されるアプリケーションやサービスの一部ではない様々なタスクを実行できます。