Slide 1

Slide 1 text

Sansan株式会社 部署 名前 gokartで動かすバッチの コストと実⾏時間の両⽴戦略 Sansan技術本部 Sansan技術本部 技術本部 研究開発部 Architectグループ 新井和弥

Slide 2

Slide 2 text

写真が入ります 新井 和弥 Sansan株式会社 技術本部 研究開発部 Architectグループ エンジニア 前職ではデータエンジニアとしてB2B SaaS企業のABMプラット フォームプロダクトの開発に従事。2022年Sansan株式会社入社。 研究開発部Architectグループ ML Platform所属。研究員とともに DevOps/MLOpsに向き合う。チームの生産性を大事にしている。 中部支社勤務。 Please call me KAZY.

Slide 3

Slide 3 text

研究開発部内のアプリケーション基盤(K8s)で gokartをどう運⽤しているかについて話します。 本⽇のテーマ 2

Slide 4

Slide 4 text

研究開発部のアプリケーション基盤 “Circuit”

Slide 5

Slide 5 text

Circuitって何? - 研究開発部のアプリケーション基盤 > 2022/05頃に誕生 > Kubernetes(AWS EKS) > 合計50くらいのアプリやバッチが動く - gokartも15個ほど稼働中 > 某氏も大絶賛なネーミング 詳細な紹介はこちら https://speakerdeck.com/sansan_randd/about-circuit-r-and-ds- application-platform おしゃれ、すごい、感動

Slide 6

Slide 6 text

課題

Slide 7

Slide 7 text

速い、安い、うまい - EC2インスタンスのコストを下げたい > 15個ほどのgokartが定期的に走る > 大きいものだとx1e.16xlargeのインスタンスが動く(≒19USD/時間) - 実行時間はなるべく短くしたい 💸 https://aws.amazon.com/jp/ec2/pricing/on-demand/

Slide 8

Slide 8 text

Timepointを利⽤した コスト削減と実⾏時間の両⽴戦略

Slide 9

Slide 9 text

Spot Instance x Dynamic workspace dir - スポットインスタンスを使う > 安い - gokartのworkspace_directoryでキャッシュ > S3に置いて中断リスクの緩和 > 実行時間の増加を最小限にする - 動的にworkspace_directoryを変更 > 定期実行時は毎回新しいworkspace_directory > Timepointと呼んでいる ConfigMapで実現 https://github.com/kubernetes/community/tree/master/icons

Slide 10

Slide 10 text

Timepointの実装

Slide 11

Slide 11 text

CronWorkflowで定期ConfigMap更新 - CronWorkflowで定期的にConfigMapの更新 > ConfigMapの作成・更新権限を付与 - ConfigMap取得した値を元に環境変数設定 - 環境変数経由でworkspace_directoryを設定 - 実現 > 定期実行時→新しいworkspace_direcotry > スポットインスタンス中断/一時エラー→既存の workspace_direcotry ConfigMapで実現 https://argoproj.github.io/workflows/

Slide 12

Slide 12 text

CronWorkflowで定期ConfigMap更新 - 定期的にConfigMapを更新するマニフェスト apiVersion: argoproj.io/v1alpha1 kind: CronWorkflow metadata: name: timepoint spec: schedule: "0 0 * * mon" timezone: Asia/Tokyo workflowSpec: entrypoint: main templates: - name: main resource: action: apply manifest: | apiVersion: v1 kind: ConfigMap metadata: name: batch-timepoint data: timepoint: '{{=sprig.dateInZone("2006-01-02", sprig.now(), "Asia/Tokyo")}}'

Slide 13

Slide 13 text

CronWorkflowで定期ConfigMap更新 - CronWorkflowがConfigMapを作成、更新できるRole apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: timepoint rules: - apiGroups: - "" resources: - configmaps verbs: - create - get - patch

Slide 14

Slide 14 text

- Timepointにより動的に環境変数を設定するCronJob apiVersion: batch/v1 kind: CronJob metadata: name: hoge-batch spec: schedule: "0 0 * * mon" jobTemplate: spec: template: spec: containers: - name: batch image: 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/batch env: - name: TIMEPOINT valueFrom: configMapKeyRef: name: timepoint key: timepoint - name: WORKSPACE_DIRECTORY value: s3://workspaces_dirctory/hoge-batch/$(TIMEPOINT) CronWorkflowで定期ConfigMap更新

Slide 15

Slide 15 text

結果

Slide 16

Slide 16 text

速い、安い、うまいになった - キャッシュがあるので 速い - スポットインスタンスで 安い - いい感じなworkspace_directory更新で うまい 🎉

Slide 17

Slide 17 text

WE ARE HIRING JOIN OUR TEAM https://media.sansan-engineering.com/randd https://open.talentio.com/r/1/c/sansan/pages/76616

Slide 18

Slide 18 text

No content