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
Kubernetes & EKSによるインフラ共通基盤の構築
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Quentin Plessis
March 06, 2019
Technology
3k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Kubernetes & EKSによるインフラ共通基盤の構築
Quentin Plessis
March 06, 2019
More Decks by Quentin Plessis
See All by Quentin Plessis
Kubernetesによる インフラ共通基盤 - JapanTaxi Kubernetes Ecosystem (JKE)の紹介
quentinplessis
1
6.2k
Other Decks in Technology
See All in Technology
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
110k
データベース研修【MIXI 26新卒技術研修】
mixi_engineers
PRO
1
380
iOS/Androidの二刀流エンジニアがFlutter & TypeScriptへ越境後の現在地 - Flutterがメインになって見えた景色と現在の醍醐味 / Dual-Platform Mobile Engineer Shifts to Flutter & TypeScript - The View and Real Thrill of Going Flutter-First
bitkey
PRO
0
100
PHPで作って学ぶリアルタイム音声対話AIとWebSocket入門 by ムナカタ
munakata
0
160
カメラ×AIで挑む「ホワイト物流」― 車両管理、自動化の壁と突破口【SORACOM Discovery 2026】
soracom
PRO
0
110
なぜ、あなたのAPIは使われないのか? AX時代の設計原則、ガードレール、運用体制
yokawasa
1
240
Git 研修【MIXI 26新卒技術研修】#2
mixi_engineers
PRO
1
290
それでも、技術なブログを書く理由 #kichijojipm / Why I Still Write Tech Blogs Even Now
shinkufencer
0
1k
CTOキーノート:AI時代の「つなぐ」を再定義 ― 真のIoTとリアルワールドAI【SORACOM Discovery 2026】
soracom
PRO
0
190
どこまでAIに任せるか 〜確率論と決定論の境界決定〜
shukob
0
540
OpenTelemetryにおけるGoのゼロコード・コンパイル時計装について #fukuokago
quiver
0
340
基調講演:人とAIをつなぐIoTの今と未来 ー 「フィジカル」と「デジタル」が出会うその先へ【SORACOM Discovery 2026】
soracom
PRO
0
200
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
72
12k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
A Soul's Torment
seathinner
6
3.1k
Are puppies a ranking factor?
jonoalderson
1
3.7k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
380
Building an army of robots
kneath
306
46k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Building the Perfect Custom Keyboard
takai
2
820
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
390
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Transcript
1 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
JapanTaxi Kubernetes Ecosystem (JKE)の紹介 Kubernetes & EKSによる インフラ共通基盤の構築
2 Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved
Introduction Introduction Quentin Plessis (プレシ カンタン) Software Engineer (SREチーム) @ JapanTaxi株式会社 経験と興味: - 画像処理 - GPUを使ったコンピュータビジョンとAR - モバイル通信のデータ解析と統計モデリング - Web開発 - インフラ(環境構築と運用) - ... Kubernetesの経験 2014/06 1周年 2周年 3周年 4周年 2017/10 2018/5 2019/2 2018/12 EKS AWS kops Azure AKS AWS EKS
3 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
今回のフォーカス ビジネス アプリケーション インフラストラクチャ ビジネスを支えるアプリケーションのためにインフラストラクチャを提供する ユーザービリティ 簡潔性 構築時間 ローメンテナンス 安定性 セキュア
4 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
目次 1) JapanTaxiのインフラ背景 2) Kubernetesをベースに共通なインフラ基盤へ 3) Amazon EKS 4) JapanTaxi Kubernetes Ecosystem (JKE) 5) EKSを運用して思ったこと
5 Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved
JapanTaxiのインフラ背景 1) Kubernetes導入前の状況と課題 2) 目指している世界 3) SREチームの役割 4) 課題の解決方法
6 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
Kubernetes導入前の状況と課題 1) レガシーなシステムが多い - GUIでのデプロイに依存 - ホストに依存(ログファイル、SSHでの作業) - Dockerで動いていない 2) Microsoft Azureのサービスに詳しい人が少ない 3) アプリケーションの管理が統一されていない - デプロイ、ログの収集と閲覧、監視 → アプリケーションによってできることが異なる 4) スケールしにくい 5) 環境の回復力や再現性がない 6) マルチクラウド (AWS, Azure) 7) 外部サービスとの連携が多い(固定IPアドレスが必須) ...
7 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
目指している世界 成長していくビジネス 多数のアプリケーション、高い頻度でのリリース、オートスケーリング 安定的なサービス サービスのダウンタイムをなるべく減らす 管理方法の統一 少人数で多数のアプリケーションを管理する Infrastructure as Code 監視、ログ 問題の発見と原因調査 コスト削減 本番に持っていくまでの時間、作業量 効率化 アプリケーションとインフラの作 業分散
8 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
JapanTaxiの運用制約 - 24時間運用しているサービス - 時間によってトラフィックの変化 → オートスケール 一週間
9 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
JapanTaxiの運用制約 - バックエンドのリリース頻度:毎日 3〜10回ぐらい - 作業分散 - アプリケーションエンジニアはアプリケーションに集中できるようにしたい - SRE/インフラエンジニアはアプリケーションの細かいところを気にしなくてもいいよう にしたい - マイクロサービスをどんどん追加していきたい - 作業ミスを防ぐためなるべく自動化へ
10 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
SREチームの役割
11 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
SREチームの役割
12 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
課題 - アプリケーションに集中したいですがアプリケーションを作るたびに、 - VPC, subnet, NATなどのネットワークのことを考えないといけないのは辛い - ログ送信の仕組みをアプリケーションに入れるのは辛い(言語によって...) - 監視方法を考えないといけないのは辛い(メモリーリーク発見など …) - ロードバランシング ... - スケーリング ... - SSL証明書 … - デプロイ … - ネーミング、管理 … - … - アプリケーションによってカバーしている機能とそうではない機能がある - 環境(開発、ステージング、本番)の差が出る
13 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
解決方法:Kubernetes Kubernetesを利用すると、 全てのアプリケーションが同様に使える共通なインフラ基盤ができる - 全てのアプリケーションが必ず使いたい基本機能を提供する - 新しいインフラ機能を作る時、元々特定のアプリケーションのためだったとしても、インフ ラ基盤に追加すると全てのアプリケーションに提供できる - SREチームは方針を決めてその方針をインフラ基盤に実現する - アプリケーションエンジニアはアプリケーションに集中できる - 環境ごとにクラスターを作れば環境の差が非常に減る
14 Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved
Kubernetesをベースに 共通なインフラ基盤へ 1) クラスターとネームスペースの使い分け 2) よく使われているリソース 3) 課題
15 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
Kubernetes / クラスターとネームスペースの使い分け 例)チームAとチームB | プロダクト P, Q, R | アプリケーション A1, A2, A3, B1, B2
16 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
Kubernetes / よく使われているリソース デプロイとスケーリング Deployment, Horizontal Pod Autoscaler アクセス Service, Ingress 設定 ConfigMap, Secret 安定性 Pod Disruption Budget ジョブ Cron Job, Job 認可(RBAC) Cluster Role, Role, Cluster Role Binding, Role Binding ノード DaemonSet CustomResource CustomResourceDefinition アプリケーション毎
17 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
Kubernetesの課題と解決方法 Kubernetesの一番大きいメリット → 自由度が高い Kubernetesの一番大きいデメリット → 自由度が高すぎる インフラレイヤー(クラスター)の課題 - クラスターはどうやって作る?(kops, kops+Terraform, Amazon EKS, Azure AKS, GKE …) - クラスターができたら、初期化や基本機能の追加はどうやって適用する? - 再現性はどうやって守る?作業 (TOIL)はどうやって減らす? インフラレイヤーの解決方法 - クラスターの作成と管理:EKS - 基本機能の追加:JKE Kubernetesの運用の仕方がありすぎる
18 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
Kubernetesの課題 Kubernetesの一番大きいメリット → 自由度が高い Kubernetesの一番大きいデメリット → 自由度が高すぎる アプリケーションレイヤーの課題 - 管理しないといけないリソースがありすぎる - Yamlファイルが大きいし重複していて慣れていない人にわかりづらい - アプリケーションの差が出る - デプロイの仕組みがあるが … (複数のアプリケーションの場合、Slack通知...) - Kubernetesの仕様自体が複雑 アプリケーションエンジニア全員に理解してもらうのは非現実的 → 新しいアプリケーションを本番に持っていくには時間がかかる Kubernetesの運用の仕方がありすぎる アプリケーションレイヤーの解決方法:JKE
19 Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved
Amazon EKS 1) クラスター作成方法と構成図 2) 認証 3) 認可 4) まとめ
20 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
Amazon EKS
21 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
Amazon EKS / クラスター作成 クラスター作成方法 1) EKSクラスター作成 (Kubernetes Control Plane) AWS Console, AWS CloudFormation, Terraform, ... 2) ノード追加 (EC2インスタンス) AWS CloudFormation, Terraform 3) 認証情報取得:kubeconfig更新 aws eks update-kubeconfig --name my-cluster --region ap-northeast-1 4) aws-auth ConfigMap 作成 kubectl apply -f aws-auth-cm.yaml
22 Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved
EKSクラスター構成図
23 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
Amazon EKS / クラスター作成 / Terraform 0) AWSの他のサービスと同様に、VPCやGatewayなどを用意する必要がります 1) EKS masters aws_iam_role (1), aws_iam_role_policy_attachment (2), aws_security_group (1), aws_security_group_rule (1), aws_eks_cluster (1) → 6リソース 2) EKS nodes aws_iam_role (1), aws_iam_role_policy_attachment (4), aws_iam_policy (1), aws_iam_instance_profile (1), aws_security_group (1), aws_security_group_rule (4), aws_launch_configuration (1), aws_autoscaling_group (1) → 11リソース
24 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
Amazon EKS / クラスター作成 / Terraform - クラスターをTerraformで作成すると、クラスター毎のリソース合計数 = 17 - ただし、module化すれば良い。最終的にクラスター毎の設定: module "eks-cluster" { source = "../modules/eks-cluster" cluster_name = "development-sample-001" kubernetes_version = "1.11" node_count = 3 max_node_count = 30 node_instance_type = "c5.xlarge" }
25 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
Amazon EKS / NodeGroupsとスケーリング - 複数のNodeGroupに対応している - c5.xlarge NodeGroup (Compute Optimized instance) - p3.2xlarge NodeGroup (GPU instance) - ... - オートスケール - Horizontal Pod Autoscaler - metrics-server → CPU使用率やメモリー使用率を取得するためのサービス → 自分で追加する必要がある - Cluster Autoscaler (正式) → AWS Auto Scaling group のサイズを調整してくれる → 自分で追加する必要がある
26 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
Amazon EKS / 認証 認証 aws-iam-authenticator AWSの全てのサービスと同様に AWSのIAMでEKSクラスターに 認証ができる kind: Config apiVersion: v1 … users: - name: arn:aws:eks:ap-northeast-1:redacted user: exec: apiVersion: client.authentication.k8s.io/v1alpha1 args: - token - -i - my-cluster command: aws-iam-authenticator aws eks update-kubeconfigで 作成されるkubeconfigファイル:
27 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
Amazon EKS / 認可 認可 aws-auth ConfigMap AWSの全てのサービスと同様に AWSのIAMユーザにEKSの権限を 付与することはできる apiVersion: v1 kind: ConfigMap metadata: name: aws-auth namespace: kube-system data: ... mapUsers: | - userarn: arn:aws:iam::redacted:user/user_1 username: user_1 groups: - group_1 - group_2 適用方法: kubectl apply -f aws-auth-cm.yaml AWS IAM user K8S groups K8S user AWSのIAMとK8Sの IAMをマッピング
28 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
Amazon EKS / まとめ - EKSクラスターはTerraformで10分で簡単に作れる - AWSのIAMでEKSクラスターに認証ができる - AWSのIAMユーザにEKSの権限を付与することができる - 複数のNodeGroupに対応している - AWSの他のサービスと連携しやすい - KubernetesのControl Planeの管理を隠蔽してくれる - Kubernetesのノードは自分で管理する必要がある
29 Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved
JapanTaxi Kubernetes Ecosystem (JKE) 1) JKEでカバーしたい課題 2) JKE CLI で新しいアプリケーションを動かすには 3) JKEの仕組み詳細
30 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
JapanTaxi Kubernetes Ecosystem (JKE) Kubernetesで運用するために、 - SREチームが考えた方針と - その方針を簡単に適用するためのツール 記事:本番環境へのKubernetesの導入やk8s共通基盤JKEの開発により苦労のないサーバ運用を実現
31 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
JapanTaxi Kubernetes Ecosystem (JKE)
32 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
JapanTaxi Kubernetes Ecosystem (JKE)
33 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
Kubernetesの課題と解決方法 JKEでカバーしたい課題 - インフラレイヤー - クラスターができたら、初期化や基本機能の追加はどうやって適用する? - 作業 (TOIL)はどうやって減らす? - アプリケーションレイヤ - リソースがありすぎる - Kubernetesの仕様が複雑、Yamlファイルがわかりづらい - アプリケーションの差が出る - デプロイの仕組み - 新しいアプリケーションを本番に持っていくには時間がかかる Kubernetesの運用の仕方がありすぎる
34 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
JKE CLI で新しいアプリケーションを動かすには フォーカスはアプリケーションに → アプリケーションエンジニアの視点で新しいアプリケーションを追加してみましょう > cd my_application > docker build & docker push > jke init > jke build > jke dev deploy > jke stg deploy > jke prod deploy > jke dev kubectl get pods NAME READY STATUS RESTARTS AGE > jke stg kubectl get pods NAME READY STATUS RESTARTS AGE > jke prod kubectl get pods NAME READY STATUS RESTARTS AGE > jke prod connect ps ... アプリケーションの追加方法 クローズドな作業環境 > jke stg connect ps ... > jke dev connect ps ... コンテナに接続 jke以外のツールのインストールは不要
35 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
JKEで新しいアプリケーションを動かすには jke dev/stg/prod deploy を実行することだけで自動的に提供されている機能: - デプロイの仕組み (デプロイ、ロールバック、Slack通知、CloudWatch Logs) - アプリケーションログ:Amazon Athenaで自然に見えるようになる - 監視: - メトリクス:NewRelicのダッシュボード(クラスター、ネームスペース、コンテナレベル ) - 死活監視:PagerDuty - エラー通知:Slack - SSL証明書の自動生成 - オートスケール - … - これから追加される機能も
36 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
JKE / アプリケーションレイヤー jke init:JKE設定の自動生成 - 利用したい環境 クラスターとネームスペース先 (dev, stg, prod, …) - 簡単化されたK8SのYamlファイル - helmベース - Deployment, HPA, PDB, Service, Ingressはベースチャートへ - ベースチャートを利用して、 それ以外の設定を追加する application: name: my-application baseChart: name: "application" version: 0.2.2 serviceDefaults: terminationGracePeriod: 45 containers: app: ports: - name: http containerPort: 9000 protocol: TCP envFromSecret: my-secret readinessProbe: httpGet: path: /healthcheck port: http lifecycle: preStopCommand: ["/bin/bash", "-c", "sleep 15"]
37 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
JKE / アプリケーションレイヤー jke build:helmチャートをビルドする - ベースチャートを取得 - helm package - helm s3 push jke deploy : クラスターで動いているサーバまたはジョブでデプロイする - 非同期 - helm fetch - 環境毎に設定選択 - helm upgrade (デプロイ) - ログはCloudWatch Logsへ - Slackへ通知
38 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
JKE / アプリケーションデプロイフロー
39 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
JKE / 構造 …………………………………………………………………………………………………...…. ノード foundation ネームスペース monitoring インフラレイヤー(SREチーム) デプロイメント クラスター オートスケーラー SSL証明書自動 生成と自動更新 ログ アグリゲーター NewRelic 監視 5xxエラー 監視、SLI プロダクト毎 (A, B, C) リバース プロキシ ... サービス デプ ロイ ... アプリケーションレイヤー(アプリケーションエンジニア) ネームスペース プロダクトA デプロイメント サーバ バッチ ジョッブ サーバ1 ... プロダクトB サーバ2 サーバ1 プロダクトC サーバ2
40 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
JKE / インフラーレイヤー 目的 - 初期化や基本機能の追加 - 作業(TOIL)を減らす ansible (k8s plugin & ローカルコマンド実行) helm umbrella chart (helmチャートのバージョン管理と設定) クラスター初期化(EKSをTerraformで作成してから) - ansible --tags init - ネームスペースの作成 - helmインストール - helmが扱えないものを管理する(1MB以上のSecretなど) 基本機能の追加 - ansible --tags my-namespace
41 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
JKE / インフラーレイヤー foundation - RBAC (ロール、権限) - SSL証明書自動管理:cert-manager - クラスターオートスケール:cluster-autoscaler - ポッドオートスケール用:metrics-server → 一時的に問題があってもサービスに影響がない monitoring - NewRelic:kube-state-metrics, newrelic-infrastructure - PagerDuty:ingressmonitorcontroller - ログ:fluent-bit, cluster-log-aggregator (内製) → 一時的に問題があってもサービスに影響がない その他 - Secrets: git-crypt - ...
42 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
JKE / まとめ JKEでできること - Kubernetesの仕様を理解しなくてもアプリケーションエンジニアは単純なコマンドだ けで安定的にKubernetesでアプリケーションを動かせる - 全てのアプリケーションは全く同様に扱われている (管理、デプロイ、起動、監視) - チーム間の知識共有がしやすい - 自分のチーム以外のアプリケーションも管理ができる - SREチームの方針を実現している - 新しい機能をJKEに追加すれば全てのアプリケーションに提供できる - マルチクラウド対応 これから - IngressからIstioへ - Multi Tenantをさらにコントロール:NetworkPolicy, ResourceQuota, Taints, Tolerations - JKEオープンソース化?
43 Proprietary and Confidential ©2017 JapanTaxi, Inc. All Rights Reserved
EKSを運用して思ったこと
44 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
運用して個人的に思ったこと - Amazon EKS vs Azure AKS Azure AKSでの本番運用:4ヶ月間 Amazon EKSでの本番運用:1ヶ月間 項目 Amazon EKS Azure AKS クラスター作成 GUI, CloudFormation, Terraform GUI, Terraform ノード作成 CloudFormation, Terraform 不要 kubeconfig取得 aws cli azure cli aws-auth 必須 / ノードグループ 複数対応 一つだけ Terraformリソース合計数 17 2 ノード追加時間 〜1min 〜5min 認証、認可 AWS IAM ... Kubernetes as is ? As is As is EKS:ノードもマネージドになったら完璧
45 Proprietary and Confidential ©2019 JapanTaxi, Inc. All Rights Reserved
まとめ 1) 問題:アプリケーションに集中できない 解決方法: → Kubernetesをベースに共通なインフラ基盤 2) 問題:自分でクラスターを作成するのは難しい (インフラレイヤー) 解決方法: → クラスター作成:EKS → 初期化、基本機能:JKE 3) 問題:K8Sの使い方がありすぎて混乱する(アプリケーションレイヤー) 解決方法: → SREチームの方針を実現するJKE
〒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