KISS からはじまる Elixir on Kubernetes
by
Takanori Ishikawa
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
Takanori Ishikawa KISS からはじまる Elixir on Kubernetes
Slide 2
Slide 2 text
Copyright © ABEJA, Inc. All rights reserved. はじめに
Slide 3
Slide 3 text
Copyright © ABEJA, Inc. All rights reserved.
Slide 4
Slide 4 text
Copyright © ABEJA, Inc. All rights reserved. みなさん、KISS していますか!?
Slide 5
Slide 5 text
Copyright © ABEJA, Inc. All rights reserved. KISS の原則 Keep It Simple, Stupid
Slide 6
Slide 6 text
Copyright © ABEJA, Inc. All rights reserved. 本⽇のまとめ AWS の EC2 上で動かしていた Elixir システムを、コンテナ化し、Kubernetes ク ラスタに載せ替えて、さらに Elixir クラスタで分散環境も組んだら、いい感じに シンプルな構成になった、という話
Slide 7
Slide 7 text
Copyright © ABEJA, Inc. All rights reserved. ⾃⼰紹介
Slide 8
Slide 8 text
Copyright © ABEJA, Inc. All rights reserved. ⽯川尊教 Takanori Ishikawa @takanori_is ❤ Elixir &
Slide 9
Slide 9 text
Copyright © ABEJA, Inc. All rights reserved. 職務経歴 2004年 ドリコム 2008年 暗黒(ニート)時代 2009年 mixi 2017年 ABEJA
Slide 10
Slide 10 text
Copyright © ABEJA, Inc. All rights reserved. ABEJA Platform
Slide 11
Slide 11 text
Copyright © ABEJA, Inc. All rights reserved.
Slide 12
Slide 12 text
Copyright © ABEJA, Inc. All rights reserved.
Slide 13
Slide 13 text
Copyright © ABEJA, Inc. All rights reserved.
Slide 14
Slide 14 text
Copyright © ABEJA, Inc. All rights reserved. ¥
Slide 15
Slide 15 text
Copyright © ABEJA, Inc. All rights reserved.
Slide 16
Slide 16 text
Copyright © ABEJA, Inc. All rights reserved.
Slide 17
Slide 17 text
Copyright © ABEJA, Inc. All rights reserved. どんなところに Elixir を使っているのか?
Slide 18
Slide 18 text
Copyright © ABEJA, Inc. All rights reserved. 横断的な処理をしているところ • TensorBoard / Notebook のプロキシ (HTTP / WebSocket) • ユーザーや各種リソースの認証 • API 呼び出しのルーティング • リソース利⽤量の計測 • 契約プランと課⾦ • 社内管理ツール
Slide 19
Slide 19 text
Copyright © ABEJA, Inc. All rights reserved. 以前の構成 • Distillery で OTP Release 作成 • ブランチがマージされたら CircleCI 上で動く • AWS CodeDeploy で EC2 インスタンスに配布 • ストレージは RDS のみ • ログは CloudWatch Logs へ • Spotinst: スポットインスタンスの活⽤
Slide 20
Slide 20 text
Copyright © ABEJA, Inc. All rights reserved. 問題なく動いていたが、いくつかの課題があった
Slide 21
Slide 21 text
Copyright © ABEJA, Inc. All rights reserved. 以前の構成の課題 • ⾮コンテナ AMI の更新: Terraform, Packer 職⼈ • IaaS 抽象化 マルチクラウド構成の機運 • Code Deploy ときどき壊れる。調査が⾯倒 • CloudWatch Logs 検索性があまりよくない。意外と⾼い • Elixir クラスタを組みたい 接続先ノードの管理
Slide 22
Slide 22 text
Copyright © ABEJA, Inc. All rights reserved. どうする?
Slide 23
Slide 23 text
Copyright © ABEJA, Inc. All rights reserved. Kubernetes
Slide 24
Slide 24 text
Copyright © ABEJA, Inc. All rights reserved. Kubernetes • 宣⾔的な設定に応じてコンテナをデプロイ • コンテナを管理するための論理的グループ • 配置されたコンテナ (Pod) の名前解決が出来る • 活発なコミュニティとエコシステム • マネージドなサービス (GKE, EKS, ) で楽できる • ⾃分たちで Kubernetes Master 運⽤は「死」を意味する
Slide 25
Slide 25 text
Copyright © ABEJA, Inc. All rights reserved. まず、Kubernetes クラスタを⽤意します
Slide 26
Slide 26 text
Copyright © ABEJA, Inc. All rights reserved. 省略
Slide 27
Slide 27 text
Copyright © ABEJA, Inc. All rights reserved. コンテナ化 • Docker の multi stage build • OTP Release ビルドと配置を分ける • デプロイされるイメージは slim ベースで OTP Release のみ含む • CodeDeploy, CloudWatch Logs のエージェントも不要になった
Slide 28
Slide 28 text
Copyright © ABEJA, Inc. All rights reserved. 新しい構成 • Distillery で作成した OTP Release を含むイメージのビルド • ブランチがマージされたら CircleCI 上で動く • kubectl でローリングアップデート • ログは標準出⼒/エラーを datadog へ転送 • LB: AWS ALB Ingress Controller • スケール: Spotinst Elastigroup, Horizontal Pod Autoscaler
Slide 29
Slide 29 text
Copyright © ABEJA, Inc. All rights reserved. Elixir クラスタも簡単
Slide 30
Slide 30 text
Copyright © ABEJA, Inc. All rights reserved. 必要なポートを開放 • epmd (Erlang Port Mapper Daemon) の起動ポート 4369 • ノード間通信に使うポートをひとつ (例: 4370) • erl の起動オプションでポート範囲を絞る必要あり • -kernel inet_dist_listen_min 4370 inet_dist_listen_max 4370
Slide 31
Slide 31 text
Copyright © ABEJA, Inc. All rights reserved. Headless Service の DNS • Kubernetes Service の clusterIP を None で設定 (Headless Service) • my-svc.my-namespace.svc.cluster.local で名前解決すると、A レコー ドで Pods の IP ⼀覧が取得できる • これで接続先 Erlang node の IP アドレスはわかる • あとは定期的に Node.connect/1 するだけ • peerage ϥΠϒϥϦͰ؆୯ʹग़དྷΔ
Slide 32
Slide 32 text
Copyright © ABEJA, Inc. All rights reserved.
Slide 33
Slide 33 text
Copyright © ABEJA, Inc. All rights reserved.
Slide 34
Slide 34 text
Copyright © ABEJA, Inc. All rights reserved. rel/vm.args
Slide 35
Slide 35 text
Copyright © ABEJA, Inc. All rights reserved. config/prod.exs
Slide 36
Slide 36 text
Copyright © ABEJA, Inc. All rights reserved. Elixir クラスタ構築できた
Slide 37
Slide 37 text
Copyright © ABEJA, Inc. All rights reserved. 最後に
Slide 38
Slide 38 text
Copyright © ABEJA, Inc. All rights reserved. Elixir クラスタで更にシンプルな構成にできる • 通常であればクラウドサービスを利⽤するものを、Elixir クラスタで実装 • キャッシュ Cachex ライブラリは Distributed Cache にも対応 • 定期実⾏ Quantum. Cron ライクな設定だけでなく、どのノードで実⾏するかも 指定可能 • ジョブキュー Honeydew. Mnesia か RDB をバックエンドにできる
Slide 39
Slide 39 text
Copyright © ABEJA, Inc. All rights reserved. Elixir クラスタで、更にシンプルな構成にできる • 実⾏中ノードのコンソールに接続してデバッグや調査が可能 • 信頼できる VM とネットワーク透過なクラスタがあるので、明確な理由がない かぎり外部のサービスを増やさない • 依存する外部サービスが減れば、そのぶん堅牢かつ管理しやすくなる
Slide 40
Slide 40 text
Copyright © ABEJA, Inc. All rights reserved. Keep It Simple, Stupid
Slide 41
Slide 41 text
Copyright © ABEJA, Inc. All rights reserved. システムとうまくつきあうために、 KISS を怖れるな
Slide 42
Slide 42 text
Copyright © ABEJA, Inc. All rights reserved. ご静聴ありがとうございました