Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ex-app-on-k8s
Search
ohr486
November 09, 2019
Programming
270
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ex-app-on-k8s
ohr486
November 09, 2019
More Decks by ohr486
See All by ohr486
負荷試験Night#1 負荷試験2023年トレンド
ohr486
17
4.9k
Elixir/PhoenixによるWeb開発の現場から
ohr486
1
650
Hacking Phoenix Performance
ohr486
1
410
Plug & WAF
ohr486
2
560
elixirをプロダクションに導入する
ohr486
1
740
IEx maniacs
ohr486
4
670
Hack and Read Elixir
ohr486
2
820
Running App on AppRunner
ohr486
0
870
sponsor-talk-drecom-heisei-ruby-kaigi
ohr486
0
910
Other Decks in Programming
See All in Programming
Agentic UI
manfredsteyer
PRO
0
220
正しくソフトウェアを作る、前提を疑うための認知の視点 / doubt-premise
minodriven
21
7.2k
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
780
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
280
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.9k
トークンをケチるな、設計しろ:GitHub Copilotを賢く使うコンテキスト戦略
ochtum
0
270
Go1.27で導入されるジェネリクスメソッドでできること
mackee
0
230
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
260
ランチタイムLT会3周年!ランチタイムLT会を3年間続けられたお話
y0hgi
1
120
技術記事、 専門家としてのプログラマ、 言語化
mizchi
14
7.2k
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
7
1.7k
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
160
Featured
See All Featured
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
380
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
630
Why Our Code Smells
bkeepers
PRO
340
58k
WCS-LA-2024
lcolladotor
0
670
Optimising Largest Contentful Paint
csswizardry
37
3.8k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.3k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
500
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
550
BBQ
matthewcrist
89
10k
エンジニアに許された特別な時間の終わり
watany
107
250k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Transcript
Elixir app on k8s 2019/11/09 週1ゆるもく会 @ohrdev
agenda • about me • target • goal • elixir
• kubernetes(k8s) • our tools for service/deployment • our service architecture • our deployment diagram • release build for elixir • conclusion
about me • Tsunenori Ohara/おーはら ◦ Twitter: @ohrdev ◦ Github:
ohr486 • Work ◦ Drecom ◦ SRE/Infra/Ruby,Elixir,Lisp,etc • Community ◦ tokyo.ex, ElixirConfJapan, Erlang&ElixirFest オーガナイザー ◦ Japan Elixir Association ◦ meguro.rb, meguro.es • Hobby ◦ 仏像制作, 丸太収集, 写経, 寺社仏閣 ◦ 人工衛星/アマチュア無線
target • アプリの実行環境をサーバーからコンテナに変更したい人 • k8s環境へのアプリのデプロイ方法を知りたい人 • (k8sちょっと興味がある勢) • (elixirちょっと興味ある勢)
goal • elixirアプリを例に、以下の内容がわかる • k8s環境へアプリをdeployする方法 • deployの為に必要なツール • k8s上で動くサービスのインフラ/アーキテクチャ/構成
elixir • ErlangVM上で動作 • 関数型言語 • モダンな開発環境/ツール • 並行プログラミング ◦
Actor Model • 軽量プロセス ◦ OSのプロセスとは異なる ◦ 超軽量 • OTP(Open Telecom Platform) ◦ 並行プログラミングのパターン /FW
7 Erlang VM Architecture Linux Server Erlang VM CPU CPU
CPU CPU CPU CPU コア数と同数のスケジューラー erlang process != OS process VMがスケジューラー間のプロセスを分 散/マイグレーション スケジューラー プロセス
8 Erlang PROCESS Architecture Erlang VM application controller application master
application プロセス ・elixir, iex, mix, etc ・user apps ・lib apps
kubernetes(k8s) • コンテナのオペレーションを自動化するプラットフォーム ◦ アプリの自動デプロイ ◦ スケーリング ◦ アプリ・コンテナ運用 •
OSS • 自前運用も可能だが、マネージドなクラウドサービスを使うのが一般的 ◦ GCP : GKE <= よく使われている、事例があがるやつ ◦ AWS: EKS <= 今日のターゲット ◦ Azure: AKS
our tools for service/deployment • インフラ ◦ EKS(Elastic Kubernetes Service)
▪ AWSのマネージドなk8sサービス ◦ ECR(Elastic Container Registry) ▪ AWSのDockerコンテナのレジストリサービス ◦ ALB(Application Load Balancer) ▪ AWSのロードバランサー ◦ EC2(Elastic Compute Cloud) ▪ AWSのマネージドな仮想サーバー • CI/CD ◦ CircleCI ◦ GitHub ◦ Chatwork
EKS cluster worker node群 our service architecture ALB service pod
elixir app container ECR AutoScalingGroup EC2 Instance EC2 Instance EC2 Instance end user developer CD tools kubectl git push configmap deployment … etc
CircleCI workflow our deployment diagram test lint release build aws
auth docker push kubectl apply docker build 言語による違 いはここ push message 各種通知 webhooks start CI/CD deploy/更新 はk8sが実行 v1.1の imageを pull tag: v1.1 v1.1の imageを 適用
release build for elixir • elixirはコンパイル言語 • elixirのリリースアーカイブ作成機能 ◦ 言語ランタイムも一緒にアーカイブしてくれる
◦ つまり、同じOS/アーキテクチャのサーバーであれば、ファイルを copyするだけで実行可能 ▪ つまり、実行環境にelixirをインストールしなくても良い ◦ dockerで動かす場合は、docker buildでイメージにランタイム毎焼けば良い • workflow ◦ strep0. mix deps.get ◦ step1. MIX_ENV=prod mix compile ◦ step2. MIX_ENV=prod mix release ◦ step3. cp _build/prod/<app> /path/to/app <= /path/to/app を含めてdocker buildすれば良い ◦ step4. /path/to/bin/<app> start
conclusion • k8s環境へのdeploymentの事例を紹介しました • 言語によらずほぼしくみは同じだと思います ◦ つまりRailsだろうがGolangだろうが同じ仕組みで適用可能だと思います • k8sを利用する事でdeploymentオペレーションをシンプルにできます •
クラウドが提供するマネージドk8sを利用するとk8sの管理も不要になるのでとても 管理が楽になります