$30 off During Our Annual Pro Sale. View Details »

ex-app-on-k8s

ohr486
November 09, 2019

 ex-app-on-k8s

ohr486

November 09, 2019
Tweet

More Decks by ohr486

Other Decks in Programming

Transcript

  1. Elixir app
    on k8s
    2019/11/09 週1ゆるもく会
    @ohrdev

    View Slide

  2. agenda
    ● about me
    ● target
    ● goal
    ● elixir
    ● kubernetes(k8s)
    ● our tools for service/deployment
    ● our service architecture
    ● our deployment diagram
    ● release build for elixir
    ● conclusion

    View Slide

  3. 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
    ○ 仏像制作, 丸太収集, 写経, 寺社仏閣
    ○ 人工衛星/アマチュア無線

    View Slide

  4. target
    ● アプリの実行環境をサーバーからコンテナに変更したい人
    ● k8s環境へのアプリのデプロイ方法を知りたい人
    ● (k8sちょっと興味がある勢)
    ● (elixirちょっと興味ある勢)

    View Slide

  5. goal
    ● elixirアプリを例に、以下の内容がわかる
    ● k8s環境へアプリをdeployする方法
    ● deployの為に必要なツール
    ● k8s上で動くサービスのインフラ/アーキテクチャ/構成

    View Slide

  6. elixir
    ● ErlangVM上で動作
    ● 関数型言語
    ● モダンな開発環境/ツール
    ● 並行プログラミング
    ○ Actor Model
    ● 軽量プロセス
    ○ OSのプロセスとは異なる
    ○ 超軽量
    ● OTP(Open Telecom Platform)
    ○ 並行プログラミングのパターン /FW

    View Slide

  7. 7
    Erlang VM Architecture
    Linux Server
    Erlang VM
    CPU CPU CPU CPU CPU CPU
    コア数と同数のスケジューラー
    erlang process != OS process
    VMがスケジューラー間のプロセスを分
    散/マイグレーション
    スケジューラー プロセス

    View Slide

  8. 8
    Erlang PROCESS Architecture
    Erlang VM
    application controller application master
    application
    プロセス
    ・elixir, iex, mix, etc
    ・user apps
    ・lib apps

    View Slide

  9. kubernetes(k8s)
    ● コンテナのオペレーションを自動化するプラットフォーム
    ○ アプリの自動デプロイ
    ○ スケーリング
    ○ アプリ・コンテナ運用
    ● OSS
    ● 自前運用も可能だが、マネージドなクラウドサービスを使うのが一般的
    ○ GCP : GKE <= よく使われている、事例があがるやつ
    ○ AWS: EKS <= 今日のターゲット
    ○ Azure: AKS

    View Slide

  10. 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

    View Slide

  11. 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

    View Slide

  12. 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を
    適用

    View Slide

  13. 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/ /path/to/app <= /path/to/app を含めてdocker buildすれば良い
    ○ step4. /path/to/bin/ start

    View Slide

  14. conclusion
    ● k8s環境へのdeploymentの事例を紹介しました
    ● 言語によらずほぼしくみは同じだと思います
    ○ つまりRailsだろうがGolangだろうが同じ仕組みで適用可能だと思います
    ● k8sを利用する事でdeploymentオペレーションをシンプルにできます
    ● クラウドが提供するマネージドk8sを利用するとk8sの管理も不要になるのでとても
    管理が楽になります

    View Slide