Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kubernetes入門#2 CronJob / Kubernetes Getting Started#2 CronJob

hi-rose
November 22, 2018

Kubernetes入門#2 CronJob / Kubernetes Getting Started#2 CronJob

Kubernetes Sapporo for Beginners #k8ssa

hi-rose

November 22, 2018
Tweet

More Decks by hi-rose

Other Decks in Programming

Transcript

  1. Kubernetes Sapporo for Beginners 自己紹介 廣瀬 亮輔(Ryosuke Hirose)/@hi-rose • 最近は家の近くにできたジムに通うのがマイブーム •

    旭川高専卒業後、札幌で今の会社に就職してシステム開発 ◦ 言語はC#、Java、delphiなど ◦ ミドルウェアはSQLServer、Oracle、Apache、Tomcatなど • 2017年4月からアーキテクト部署となりクラウドシステムのバックエンド系基盤機能開発に ◦ Kubernetesもそのころから利用 ▪ 普段GCPで使用しているため、 GCP実装ベースでの理解が中心となります ◦ データマイグレーション系サービスのプロジェクトリーダー 2
  2. Kubernetes Sapporo for Beginners 事前準備 このイベントのひとつ前のセッション (Step1)ができていれば Kubernetesの実行環境としては問題ありません。 $ kubectl

    apply -f Step1-ApplicationDeployment/statefulsets 注意事項! コマンドは hands-onリポジトリをcloneした場所をカレントディレクトリとして記載しています。 本セッションではひとつ前のセッションで使用した greet APIを 呼び出すため、リソースを削除している場合は以下のコマンドで起動してください。 4
  3. Kubernetes Sapporo for Beginners Let's ハンズオン STEP.1 CronJobのワークロードを作成します。 $ kubectl

    apply -f Step2-Cronjob/cronjob Cronjob.batch “cron-test” created STEP.2 実行状態を確認します。 $ kubectl get pod -w NAME READY STATUS RESTARTS AGE greet-0 2/2 Running 0 10m cron-test-1542618600-t8xjr 0/1 Pending 0 0s cron-test-1542618600-t8xjr 0/1 Pending 0 0s cron-test-1542618600-t8xjr 0/1 ContainerCreating 0 0s cron-test-1542618600-t8xjr 0/1 Completed 0 3s Completedが出たら実行完了 8
  4. Kubernetes Sapporo for Beginners Let's ハンズオン2 STEP.3 実行結果はlogsコマンドで確認します。 $ kubectl

    logs cron-test-1542618600-t8xjr “Hello” APIの実行結果が取得できている。 9
  5. Kubernetes Sapporo for Beginners 中身の説明 apiVersion: batch/v1beta1 kind: CronJob metadata:

    name: cron-test spec: concurrencyPolicy: Replace schedule: "*/1 * * * *" jobTemplate: spec: template: metadata: labels: app: cron-test spec: restartPolicy: Never containers: - name: cron-test image: k8ssa/hands-on-alpine-cronjob:latest imagePullPolicy: IfNotPresent resources: requests: cpu: 100m memory: 100Mi limits: cpu: 100m memory: 100Mi args: - sh - -c - curl -s http://greet:30000/hello | jq '.Message' 既に実行中のCronjobがあった場 合の動作 Allow:制限なし Replace:停止して置き換え Forbid:次のJobを実行しない Cron形式のスケジューリング ※時刻はUTC指定 greet API呼び出し結果jsonをjq により要素抜き出し ※実行イメージはalpine linuxにcrulとjqコマンドを入れたものを勉強会用に作成し、Dockerhubにアップ。 https://hub.docker.com/r/k8ssa/hands-on-alpine-cronjob/~/dockerfile/ POD障害時のポリシー Never:新規PODを作成し再実行 OnFailure:同一PODで再実行 ※ 10
  6. Kubernetes Sapporo for Beginners Let's ハンズオン3 STEP.4 しばらくしてpodを取得すると、Completedとなっている実行履歴が複数出てきます。 $ kubectl

    get pod cron-test-1542618600-t8xjr 0/1 Completed 0 2m cron-test-1542618600-azc9e 0/1 Completed 0 1m cron-test-1542618600-zbnbk 0/1 Completed 0 37s Historyが残っていればkubectl logsにより確認ができるが、 保存数に限りがあるため、別途ログ収集基盤を用意しておいたほうが良い。 実行履歴は定義Yamlにより設定可能です。 spec.successfulJobsHistoryLimit … 成功したJobを保存する数 spec.failedJobsHistoryLimit … 失敗したJobを保存する数 11
  7. Kubernetes Sapporo for Beginners STEP.6 しばらくしてpodを取得すると、実行が停止していることがわかります。 $ kubectl get pod

    cron-test-1542618600-t8xjr 0/1 Completed 0 5m cron-test-1542618600-azc9e 0/1 Completed 0 4m cron-test-1542618600-zbnbk 0/1 Completed 0 3m Let's ハンズオン4 STEP.5 CronJobの一時停止を行うことができます。 $ kubectl patch cronjob cron-test -p '{"spec":{"suspend":true}}' Cronjob.batch “cron-test” patched ※Windowsはこちら patchで変更差分を当てていますがYamlを変更してApplyでもOK $ kubectl patch cronjob cron-test -p "{\"spec\":{\"suspend\":true}}" 12
  8. Kubernetes Sapporo for Beginners お片付け STEP.7 定義を削除します。 $ kubectl delete

    -f Step2-Cronjob/cronjob $ kubectl delete -f Step1-ApplicationDeployment/statefulsets $ kubectl delete persistentvolumeclaim/greet-storage-greet-0 $ kubectl delete persistentvolumeclaim/greet-storage-greet-1 14
  9. Kubernetes Sapporo for Beginners CronJobの利点と利活用 • 利点 ◦ Kubernetes内で完結して仕組みを構築することが可能 ▪

    Yamlファイルによる一元管理 ▪ 別マシンを立てる必要がない • 運用コストや、そのマシンの死活リスクの面でメリット ◦ JobごとにCPU,Memoryリソースを確保して実行が可能 ◦ 通常のCronとは違い、エラー時の再実行など、ある程度動作制御が可能 ◦ Kubernetesでの実行成否確認を行うことができる ▪ コンテナ内でCronプロセスを動かす場合、実行結果を別の場所に残す必要がある • 活用ポイント ◦ 夜間バッチ的な処理 ◦ バックアップ ◦ 不要データの整理 ◦ 一括データ処理のトリガ ◦ 時報トリガ 15
  10. Kubernetes Sapporo for Beginners 注意点 • β機能です • 場合によってJobが実行されないことや、複数の Jobが同時に実行される可能性があります。

    ◦ 実行されない部分は設定によりある程度回避できる。 ◦ 複数実行は処理側で冪等性を担保する必要がある。 • 詳細は公式ページにある制限事項を参照。 16