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

Kubernetesによる インフラ共通基盤 - JapanTaxi Kubernetes Ecosystem (JKE)の紹介

Quentin Plessis
September 09, 2019

Kubernetesによる インフラ共通基盤 - JapanTaxi Kubernetes Ecosystem (JKE)の紹介

Quentin Plessis

September 09, 2019
Tweet

More Decks by Quentin Plessis

Other Decks in Technology

Transcript

  1. 1
    Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
    Kubernetesによる
    インフラ共通基盤
    JapanTaxi Kubernetes Ecosystem (JKE)の紹介

    View Slide

  2. 2
    Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved
    Introduction
    Introduction
    Quentin Plessis (プレシ カンタン)
    Software Engineer (SREチーム) @ JapanTaxi株式会社
    経験と興味
    - 画像処理
    - GPUを使ったコンピュータビジョンとAR
    - モバイル通信のデータ解析と統計モデリング
    - Web開発
    - インフラ(環境構築と運用)
    - ...

    View Slide

  3. 3
    Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
    目次
    1) 背景
    a) JapanTaxiのインフラ背景
    b) なぜKubernetes?
    2) Kubernetesでの運用
    3) JapanTaxi Kubernetes Ecosystem (JKE)

    View Slide

  4. 4
    Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved
    JapanTaxiのインフラ背景
    1) 1年半前からの状況
    2) なぜKubernetes?

    View Slide

  5. 5
    Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
    1年半前からの状況
    Azure
    ホスト:Terraformで構築
    プロビジョニング:Ansible
    仮想化技術:Docker
    オーケストレーション:手動
    スケール:手動
    課題:ログ、デプロイ、監視
    Azure AKS
    ホスト:AKS
    プロビジョニング:無
    仮想化技術:Docker
    オーケストレーション:K8S
    スケール:K8S
    統一:ログ、デプロイ、監視
    Amazon EKS
    ホスト:Terraform
    プロビジョニング:無
    仮想化技術:Docker
    オーケストレーション:K8S
    スケール:K8S
    統一:ログ、デプロイ、監視
    K8Sへ移行 AWSへ移行

    View Slide

  6. 6
    Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
    なぜKubernetes?
    アプリケーションに集中したいですが、
    ネットワーク (VPC, subnet…)
    オートスケール
    デプロイ、ロールバック
    監視、アラート
    ログ送信、収集、閲覧 ...
    SSL
    認証、認可
    ...
    回復力
    再現性

    View Slide

  7. 7
    Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
    なぜKubernetes?
    Kubernetesを利用すると、全てのアプリケーションが同様
    に使える共通なインフラ基盤ができる (PaaS)
    マルチクラウド コミュニティドリブン 開発スピード
    プラグイン オンプレミス PaaSの実現方法
    ...

    View Slide

  8. 8
    Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved
    Kubernetesでの運用
    1) クラスタ構築
    2) K8Sリソース管理
    3) 運用して気づいたこと

    View Slide

  9. 9
    Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
    クラスタ構築
    - オンプレミス → 大変
    - クラウドサービス
    - GUI
    → テストレベルまでOK、実際の運用には再現性が足りていない
    - 構築ツール (kops, eksctl ...)
    → 悪くないですが汎用性は足りていない
    - Terraform
    → 全クラウドサービスがサポートされている、K8S以外のリソース管理もできる

    View Slide

  10. 10
    Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
    K8Sリソース管理
    - YAML+ kubectl apply
    - (+) シンプル
    - (+) コード化可能
    - (-) クラスタのコンテキスト切り替えに注意
    - (-) テンプレート機能がない
    - (-) 複数のリソースを一つのパッケージとして管理するのも複雑 (依存関係...)
    - パッケージングツール (helm …)
    - (+) コード化可能
    - (+) テンプレートエンジン
    - (+) パッケージング
    - (+) ビルドとデプロイを分ける
    - (-) クラスタのコンテキスト切り替えに注意
    - (-) 学習コスト

    View Slide

  11. 11
    Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
    運用して気づいたこと
    - PodDisruptionBudget(PDB)は大事
    - ポッド数が決まったしきい値より少なくならないように (クラスタのローリングアップ
    デート時など)
    - ServiceのExternalTrafficPolicyは大事
    - 冗長化可能なアプリケーションしか作らない方がいい
    - 同時に1つのポッドしか動かせないアプリケーションの運用は大変
    - アプリケーションはホストに依存しないようにする
    - ログファイルなどはNG
    - データベースはマネージドサービスのほうがいい
    - データの保存、管理、移行などを避けるためStatefulSetは使わない
    - 全てのアプリケーションに設定すべきな共通なリソースがある
    - Deployment, Service, HorizontalPodAutoscaler, PDB, Secret, (Ingress) ...

    View Slide

  12. 12
    Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
    運用して気づいたこと
    - KubernetesのServiceリソースは一番便利
    - DNSレコードを追加しなくてもいい、dev/prod環境と関係なく同じエンドポイントなど
    - Kubernetesのコンテキスト切り替えは混乱する
    - 開発環境で操作しようと思ったら本番環境だった
    - 学習コストが高い
    - アプリケーションエンジニア全員に教えるのは難しい
    - (+) 柔軟性が高い
    - 「これをKubernetesで実現するのは難しい」と言ったこと(ほぼ)ない
    - (-) 柔軟性が高すぎる
    - コントロールしないとアプリケーションによる構成の差異が大きくなって管理が難しく
    なる

    View Slide

  13. 13
    Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved
    JapanTaxi Kubernetes
    Ecosystem (JKE)
    1) JKEとは
    2) JKE CLI で新しいアプリケーションを動かすには

    View Slide

  14. 14
    Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
    JapanTaxi Kubernetes Ecosystem (JKE)
    Kubernetesで運用するために、
    SREチームが考えた方針と
    その方針を簡単に適用するためのツール
    記事:本番環境へのKubernetesの導入やk8s共通基盤JKEの開発により苦労のないサーバ運用を実現

    View Slide

  15. 15
    Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
    JapanTaxi Kubernetes Ecosystem (JKE)

    View Slide

  16. 16
    Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
    JKE
    - JKE クラスター
    - SREメンバーが管理している
    - インフラの共通機能が提供されている(ログ収集、監視、デプロイ …)
    - 新しい機能をどんどん追加していく
    - JKE CLI
    - SREチームがRubyで開発したCLI
    - アプリケーションエンジニアが使う
    - jkeさえインストールすれば、
    - 新しいアプリケーションを簡単に作成できる
    - 統一されたやり方でアプリケーションを管理できる
    - jke以外のツールのインストールは不要

    View Slide

  17. 17
    Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
    JKEで新しいアプリケーションを動かすには
    フォーカスはアプリケーションに
    → アプリケーションエンジニアの視点で新しいアプリケーションを追加してみましょう
    > cd my_application
    > docker build & docker push
    > jke init --port 80
    > jke build
    > jke dev deploy
    > jke stg deploy
    > jke prod deploy
    5分でビルド&
    デプロイ!

    View Slide

  18. 18
    Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
    JKE init
    jke init:JKE設定の自動生成
    ...
    containers:
    app:
    ports:
    - name: http
    containerPort: 80
    protocol: TCP
    resources:
    limits:
    cpu: 1.0
    memory: 2Gi
    requests:
    cpu: 1.0
    memory: 2Gi
    replicaCount: 2
    autoscale:
    enabled: true
    minReplicas: 2
    maxReplicas: 10
    targetCPUUtilizationPercentage: 70
    terminationGracePeriod: 30
    ...
    サーバを2台
    用意
    オートスケール
    で最大10台まで
    拡張
    アプリケーションポート
    最低と最高CPUとメモリー

    View Slide

  19. 19
    Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
    JKEで新しいアプリケーションを動かすには
    jke initコマンドだけでス
    ケーラブルなサーバ環境
    を瞬時に構築!

    View Slide

  20. 20
    Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
    JKE / アプリケーションデプロイフロー

    View Slide

  21. 21
    Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
    JKEで使える便利な機能
    jkeで使える便利な機能
    ▶ jke dev connect
    Switched to context "arn:aws:eks:redacted:redacted:cluster/redacted".
    [email protected]:/app# ps ax
    PID TTY STAT TIME COMMAND
    1 ? Ss 0:00 /bin/bash /docker-entrypoint.sh bundle exec puma
    27 ? Sl 0:11 puma 3.12.1 (unix:////app/tmp/sockets/puma.so
    121 ? Sl 0:16 puma: cluster worker 1: 27 [app]
    165 ? Sl 0:13 puma: cluster worker 0: 27 [app]
    コンテナに接続
    ▶ jke stg connect
    ...
    ▶ jke prod connect
    ...
    環境の選択や認証などは
    jkeに任せる!

    View Slide

  22. 22
    Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
    JKEで使える便利な機能
    jkeで使える便利な機能
    ▶ jke dev logs
    10.100.xxx.xxx - - [02/Jul/2019:10:27:53 +0000] "GET / HTTP/1.1" 401 12 "-" "Mozilla/5.0 AppleWebKit/ Chrome/ Safari/"
    10.100.xxx.xxx - - [02/Jul/2019:10:27:55 +0000] "GET /test HTTP/1.1" 401 12 "-" "Mozilla/5.0 AppleWebKit/ Chrome/ Safari/"
    10.100.xxx.xxx - - [02/Jul/2019:10:28:01 +0000] "GET / HTTP/1.1" 200 15 "-" "kube-probe/1.12"
    ...
    ログを閲覧
    ▶ jke stg logs
    ...
    ▶ jke prod logs
    ...

    View Slide

  23. 23
    Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
    JKEで使える便利な機能
    jkeを使ってアプリケーションを作ると、下記の機能が使えます
    - デプロイの仕組み (デプロイ、ロールバック、Slack通知、CloudWatch Logs)
    - アプリケーションログ:Amazon Athena/BigQueryで閲覧できる
    - 監視:NewRelicのダッシュボード、PagerDutyでの死活監視 ...
    - SSL証明書の自動生成
    - オートスケール
    - …
    - これから追加される機能も

    View Slide

  24. 24
    Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
    まとめ
    1) 問題:アプリケーションに集中できない
    解決方法:
    → Kubernetes (k8s) をベースに共通なインフラ基盤
    2) 問題:K8Sの使い方がありすぎて混乱する、学習コストが高い
    解決方法:
    → SREチームの方針を実現するJKE
    → jke initを使うことで5分で運用しやすくて安定的なアプリケーションが作れる
    → アプリケーションに集中できる

    View Slide

  25. 〒102-0094 東京都千代田区紀尾井町3-12
    3-12 Kioicho Chiyoda-ku, Tokyo 102-0094 Japan
    TEL 03-6265-6265 FAX 03-3239-8115
    www.japantaxi.co.jp
    文章·画像等の内容の無断転載及び複製等の行為はご遠慮ください。
    Proprietary and Confidential ©2019 JapanTaxi, Inc.
    All Rights Reserved

    View Slide