arrow_back

Job を Google Kubernetes Engine にデプロイする

ログイン 参加
700 以上のラボとコースにアクセス

Job を Google Kubernetes Engine にデプロイする

ラボ 1時間 universal_currency_alt クレジット: 5 show_chart 入門
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
700 以上のラボとコースにアクセス

概要

このラボでは、Job と CronJob を定義して実行します。

Google Kubernetes Engine(GKE)では、Job は有限のタスクを表すコントローラ オブジェクトで、理想的な進行状態(実行中のポッドの総数を維持するなど)の管理ではなく、タスクの実行から完了までを管理します。

CronJob は、時間に関連した有限のタスクを、指定された時間に 1 回だけまたは繰り返し実行します。タスクの実行には Job オブジェクトが使用されます。

目標

このラボでは、次のタスクの実行方法について学びます。

  • GKE Job の定義、デプロイ、クリーンアップ
  • GKE CronJob の定義、デプロイ、クリーンアップ

ラボの設定

Qwiklabs にアクセスする

各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。

  1. Qwiklabs にシークレット ウィンドウでログインします。

  2. ラボのアクセス時間(例: 1:15:00)に注意し、時間内に完了できるようにしてください。
    一時停止機能はありません。必要な場合はやり直せますが、最初からになります。

  3. 準備ができたら、[ラボを開始] をクリックします。

  4. ラボの認証情報(ユーザー名パスワード)をメモしておきます。この情報は、Google Cloud Console にログインする際に使用します。

  5. [Google Console を開く] をクリックします。

  6. [別のアカウントを使用] をクリックし、このラボの認証情報をコピーしてプロンプトに貼り付けます。
    他の認証情報を使用すると、エラーが発生したり、料金の請求が発生したりします。

  7. 利用規約に同意し、再設定用のリソースページをスキップします。

最初のログイン手順を完了すると、プロジェクト ダッシュボードが表示されます。

Google Cloud Shell の有効化

Google Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。

Google Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。

  1. Google Cloud コンソールで、右上のツールバーにある [Cloud Shell をアクティブにする] ボタンをクリックします。

  2. [続行] をクリックします。

環境がプロビジョニングされ、接続されるまでしばらく待ちます。接続した時点で認証が完了しており、プロジェクトに各自のプロジェクト ID が設定されます。次に例を示します。

gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。

  • 次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list

出力:

Credentialed accounts: - @.com (active)

出力例:

Credentialed accounts: - google1623327_student@qwiklabs.net
  • 次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project

出力:

[core] project =

出力例:

[core] project = qwiklabs-gcp-44776a13dea667a6 注: gcloud ドキュメントの全文については、 gcloud CLI の概要ガイド をご覧ください。

タスク 1. Job マニフェストを定義してデプロイする

GKE では、Job は有限のタスクを表すコントローラ オブジェクトです。

このタスクでは、Job を作成し、そのステータスを調べてから削除します。

ラボの Google Kubernetes Engine クラスタに接続する

  1. Cloud Shell で次のコマンドを入力して、ゾーンとクラスタ名の環境変数を設定します。
export my_region={{{project_0.default_region | "REGION"}}} export my_cluster=autopilot-cluster-1
  1. Cloud Shell で kubectl のタブ補完を構成します。
source <(kubectl completion bash)
  1. Cloud Shell で次のコマンドを使用して、kubectl コマンドライン ツールのクラスタへのアクセスを設定します。
gcloud container clusters get-credentials $my_cluster --region $my_region

Job を作成して実行する

円周率の値を 2,000 桁まで計算し、その結果を出力するサンプルの Job を作成しましょう。

  1. example-job.yaml というファイルを作成し、次のコマンドを実行して nano で開きます。
nano example-job.yaml
  1. nano が開いたら、以下を example-job.yaml ファイルに貼り付けます。
apiVersion: batch/v1 kind: Job metadata: # Job インスタンスの一意のキー name: example-job spec: template: metadata: name: example-job spec: containers: - name: pi image: perl:5.34 command: ["perl"] args: ["-Mbignum=bpi", "-wle", "print bpi(2000)"] # 終了後にコンテナを再起動しない restartPolicy: Never
  1. Ctrl+O キーの次に Enter キーを押し、編集したファイルを保存します。

  2. Ctrl+X キーを押して nano テキスト エディタを終了します。

  3. 次のコマンドを実行して、このファイルから Job を作成します。

kubectl apply -f example-job.yaml

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 Job を作成して実行する

  1. 次のコマンドを実行して、この Job のステータスを確認します。
kubectl describe job example-job

実行中の Job 数、正常に完了した Job 数、失敗した Job 数を示す Pod のステータスを含め、Job の詳細が表示されます。

... Start Time: Thu, 20 Dec 2018 14:34:09 +0000 Pods Statuses: 0 Running / 1 Succeeded / 0 Failed ...
  1. 次のコマンドを実行して、クラスタ内のすべての Pod リソース(完了した Job によって作成された Pod を含む)を表示します。
kubectl get pods

実際の Pod 名は出力例と異なる場合があります。

NAME READY STATUS RESTARTS AGE example-job-sqljc 0/1 Completed 0 1m

いずれかの Pod 名をメモしておきます。

Job をクリーンアップして削除する

Job が完了すると、Pod の作成が中止されます。Job が完了しても、Job API オブジェクトは削除されないため、Job のステータスを表示できます。Job によって作成された Pod は削除されませんが、終了します。Pod は保持されるため、Pod のログを表示したり、Pod を操作したりできます。

  1. 次のコマンドを実行して、クラスタ内の Job のリストを取得します。
kubectl get jobs

出力は次のようになります。

NAME COMPLETIONS DURATION AGE example-job 1/1 75s 2m5s
  1. 次のコマンドを実行して、Job を実行した Pod からログファイルを取得します。[Pod 名] は 1 つ前のタスクでメモしたノード名に置き換える必要があります。
kubectl logs [Pod 名]

出力を見ると、円周率の最初の 2,000 桁が Job によって Pod のログに書き込まれたことがわかります。

  1. 次のコマンドを実行して、この Job を削除します。
kubectl delete job example-job

このログに対して再度クエリを実行しても Pod が見つからないため、コマンドは失敗します。

タスク 2. CronJob マニフェストを定義してデプロイする

CronJob を作成すると、時間に関連した有限のタスクを、指定された時間に 1 回だけまたは繰り返し実行できます。

このタスクでは、CronJob を作成して実行した後、クリーンアップして削除します。

CronJob マニフェストを定義する

この CronJob は、時刻、日付、「Hello, World!」を出力する新しいコンテナを 1 分おきにデプロイします。

  1. example-cronjob.yaml というファイルを作成し、次のコマンドを実行して nano で開きます。
nano example-cronjob.yaml
  1. nano が開いたら、以下を example-cronjob.yaml ファイルに貼り付けます。
apiVersion: batch/v1 kind: CronJob metadata: name: hello spec: schedule: "*/1 * * * *" jobTemplate: spec: template: spec: containers: - name: hello image: busybox args: - /bin/sh - -c - date; echo "Hello, World!" restartPolicy: OnFailure
  1. Ctrl+O キーの次に Enter キーを押し、編集したファイルを保存します。

  2. Ctrl+X キーを押して nano テキスト エディタを終了します。

注: CronJob は必須の schedule フィールドを使用し、Unix 標準の crontab 形式で時間を受け取ります。

すべての CronJob 時間は UTC で表示されます。
  • 1 つ目の値は分を示します(0〜59)。
  • 2 つ目の値は時を示します(0〜23)。
  • 3 つ目の値は日を示します(1〜31)。
  • 4 つ目の値は月を示します(1〜12)。
  • 5 つ目の値は曜日を示します(0〜6)。

schedule フィールドでは、ワイルドカード値として * と ? も受け入れられます。タスクを一定の間隔で繰り返す必要がある場合は、/ と範囲を組み合わせて指定します。この例の */1 * * * * は、月、日、曜日に関係なく、1 分ごとにタスクを繰り返す必要があることを示しています。

cron ジョブを作成して実行する

  1. 次のコマンドを実行して、このファイルから Job を作成します。
kubectl apply -f example-cronjob.yaml

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 CronJob を作成して実行する

  1. 次のコマンドを実行して、クラスタ内の Job のリストを取得します。
kubectl get jobs

出力は次のようになります。

NAME COMPLETIONS DURATION AGE hello-1545013620 1/1 2s 18s
  1. 次のコマンドを実行して、この Job のステータスを確認します。[Job 名] は実際の Job 名に置き換えます。
kubectl describe job [Job 名]

Job インスタンスの 1 つが実行されたことを示す Pod のステータスを含め、Job の詳細が表示されます。

... Start Time: Thu, 20 Dec 2018 15:24:03 +0000 Pods Statuses: 0 Running / 1 Succeeded / 0 Failed ... ...Created pod: hello-1545319920-twkhl
  1. この Job で使用した Pod の名前をメモしておきます。
  2. Pod のログに対してクエリを実行して、Job の出力を表示します。[Pod 名] は 1 つ前の手順でメモした Pod 名に置き換えます。
kubectl logs [Pod 名]

CronJob で設定したシェル スクリプトの出力が表示されます。

Fri Jan 28 11:12:01 UTC 2022 Hello, World!
  1. 次のコマンドを実行して、クラスタ内のすべての Job リソース(完了した CronJob によって作成されたすべての Pod を含む)を表示します。
kubectl get jobs

実際の Job 名は出力例と異なる場合があります。Kubernetes では、デフォルトで Job 履歴の上限が設定されており、Job 履歴に表示されるのは、正常に完了した Job と失敗した Job のうち直近の 3 個のみとなります。そのため、このリストに表示されるのは、4 個の Job のうち直近の 3 個の Job のみになります。

NAME COMPLETIONS DURATION AGE hello-27389472 1/1 1s 2m55s hello-27389473 1/1 1s 115s hello-27389474 1/1 1s 55s

Job をクリーンアップして削除する

CronJob を停止して、この CronJob に関連するすべての Job をクリーンアップするには、CronJob を削除する必要があります。

  1. 次のコマンドを実行して、すべての Job を削除します。
kubectl delete cronjob hello
  1. すべての Job が削除されたかどうかは、次のコマンドで確認できます。
kubectl get jobs

出力は次のようになります。

No resources found in default namespace.

これですべての Job が削除されました。

ラボを終了する

ラボが完了したら、[ラボを終了] をクリックします。ラボで使用したリソースが Google Cloud Skills Boost から削除され、アカウントの情報も消去されます。

ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。

星の数は、それぞれ次の評価を表します。

  • 星 1 つ = 非常に不満
  • 星 2 つ = 不満
  • 星 3 つ = どちらともいえない
  • 星 4 つ = 満足
  • 星 5 つ = 非常に満足

フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。

フィードバックやご提案の送信、修正が必要な箇所をご報告いただく際は、[サポート] タブをご利用ください。

Copyright 2020 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。

始める前に

  1. ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
  2. ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
  3. 画面左上の [ラボを開始] をクリックして開始します

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします

1 回に 1 つのラボ

既存のラボをすべて終了して、このラボを開始することを確認してください

シークレット ブラウジングを使用してラボを実行する

このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。