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

Platform EngineeringにおけるKubernetesの活用法とLINEヤフーに...

hhiroshell
January 24, 2024

Platform EngineeringにおけるKubernetesの活用法とLINEヤフーにおける事例のご紹介 / Platform Engineering and Kubernetes Findy Lunch LT Edition

hhiroshell

January 24, 2024
Tweet

More Decks by hhiroshell

Other Decks in Technology

Transcript

  1. Cloud Native Developers JP 【PR】⾃作キーボードはいいぞ • ⾃キ専⾨店「遊舎⼯房」へGo! 2 ←遊舎⼯房さんの店舗はこちら ↓@hhiroshellのキーボード

    Timothy ⾃⼰紹介 @hhiroshell 早川 博 (はやかわ ひろし) • Cloud Nativeなインフラを開発 するエンジニア。 LINEヤフー 所属
  2. Cloud Native Developers JP 【PR】本を書きました • 「Kubernetesマイクロサービス開発の実践」 – Kubernetesでアプリケーションを実⾏するサービ ス開発者向け

    – “マイクロサービス”と銘打っていますが、コント ローラーやサービスメッシュでクラスタをもりも りにするよりも、Kubernetesの仕組みを理解して 使いこなすことにフォーカスしてます 3
  3. Cloud Native Developers JP ⽬次 1. いまPlatform Engineeringがアツい 2. Platform

    Engineeringの重要パーツとしてのKubernetes 3. LINEヤフーでの活⽤事例 4
  4. Cloud Native Developers JP ⽬次 1. いまPlatform Engineeringがアツい 2. Platform

    Engineeringの重要パーツとしてのKubernetes 3. LINEヤフーでの活⽤事例 5
  5. Cloud Native Developers JP ITシステム開発の歴史 • リリースの⾼頻度化と円滑な改善サイクルの確⽴を⽬指して進化 6 モノリシックシステム 継続的デリバリー

    (2012〜) デプロイメント・パイプラインによる迅速かつ ⾼頻度なリリースとフィードバック Microservices (2014〜) システムを疎結合な⼩規模アプリ群で 構成しアップデートを容易に クラウドインフラとIaC インフラ管理にソフトウェア・ エンジニアリングのプラクティスを導⼊し、 調達の迅速化と変更容易性を実現 DevOps (2009〜) 開発者と運⽤者の協⼒体制とそれを ⽀えるツール群 ※ 時系列の順序には諸説あります
  6. Cloud Native Developers JP ITシステム開発の歴史 • 開発者の責任範囲や習得すべきスキル/ツールが増加 → 認知的負荷 7

    モノリシックシステム 継続的デリバリー (2012〜) デプロイメント・パイプラインによる迅速かつ ⾼頻度なリリースとフィードバック Microservices (2014〜) システムを疎結合な⼩規模アプリ群で 構成しアップデートを容易に クラウドインフラとIaC インフラ管理にソフトウェア・ エンジニアリングのプラクティスを導⼊し、 調達の迅速化と変更容易性を実現 DevOps (2009〜) 開発者と運⽤者の協⼒体制とそれを ⽀えるツール群 ※ 時系列の順序には諸説あります
  7. Cloud Native Developers JP 近年の開発者が抱えている課題 • 責任範囲の拡⼤と、⼤量のスキル/ツールの習得に悩まされている – 運⽤、監視へのコミットと、マイクロサービス化 による運⽤、監視の複雑化

    – デプロイメント・パイプラインの構築とメンテナンス – 組織によってはクラウド周りの⾯倒を⾒たり 8 • 開発に集中できず効率が悪い • スーパーマン以外は活躍しにくい / スーパーマンの頑張りに依存す るようになり時間を奪ってしまう
  8. Cloud Native Developers JP Platform Engineering • 開発者の効率性と開発体験を ⾼める⽅法として、 ”Platform

    Engineering”が期待 されるように • Gartner Hype Cycle(2023年8⽉) で「過度な期待のピーク」 9 https://www.gartner.co.jp/ja/newsroom/press-releases/pr-20231204
  9. Cloud Native Developers JP Platform Engineeringとは? • ⾃社の開発者たちが開発に集中できるようにするための基盤 (IDP: Internal

    Developer Platform)を提供する取り組み 10 1. システム開発で発⽣する基本的な作業を、セルフサービスで、少ない労⼒ で(舗装された道路を進むように)実施できる 2. 専任チームが “プロダクト” として提供する • 明確なミッションを持って、顧客(開発者)のリアルな課題を解決する 依存コンポー ネントの設定 実⾏環境 の準備 ビルドと デプロイ 権限設定 監視系の セットアップ
  10. Cloud Native Developers JP Platform Engineeringとは? • 具体的には例えばどういうこと? – 開発者が必要とする開発、実⾏環境を、セルフサービスで簡単に⼊⼿できる

    – 実⾏環境にデプロイしたら⾃動的に運⽤ポリシーが適⽤されるようにする – アプリケーションのビルドと同時に⼀定品質以上のチューニング設定をおこ なうツールが利⽤できる – IDPを使うためのドキュメント群が整備されている – 専任チームによるサポートを受けられる – ...etc 11 ※ あくまで⼀例です。実際には組織ごとの具体的な課題に当てはまる取り組みが必要です
  11. Cloud Native Developers JP CloudNativeとPlatform Engineering • とりわけKubernetesは、組織固有の要件を実装するためのベースとし て活躍 13

    • 様々なワークロードを安定的に動かすための基本機能 – セルフヒーリング、ローリングアップデート、スケーラビリティ... • 使いやすく整備された拡張ポイント – カスタムコントローラー、Admission Webhook... • API Servicerを中⼼とした⼀貫性のある使⽤感 – kubectlでKRM(Kubernetes Resource Model)リソースを操作する、という⼀貫 した体験
  12. Cloud Native Developers JP ⽬次 1. いまPlatform Engineeringがアツい 2. Platform

    Engineeringの重要パーツとしてのKubernetes 3. LINEヤフーでの活⽤事例 14
  13. Cloud Native Developers JP Kubernetesの拡張ポイント • Kubernetesには、機能拡張されること想定して多数の拡張ポイントが 設けられている – カスタムコントローラー

    – Admission Webhook – Aggregation Layer – Authentication / Authorization Webhook – Scheduler – Device Plugin – Network Plugin 15
  14. Cloud Native Developers JP Kubernetesの拡張ポイント • Kubernetesには、機能拡張されること想定して多数の拡張ポイントが 設けられている – カスタムコントローラー

    – Admission Webhook – Aggregation Layer – Authentication / Authorization Webhook – Scheduler – Device Plugin – Network Plugin 16
  15. Cloud Native Developers JP Reconciliation Loopの基本 1. 指定された「望ましい状態(Desired State)」を取得する 2.

    「実際の状態(Actual State)」を観測する 3. 「実際の状態」を「望ましい状態」に⼀致するように変更する 4. 1〜3 を繰り返す 17 Controller read read & write Desired State External World (Actual State) (1) (2), (3) (4) Modifies
  16. Cloud Native Developers JP Reconciliation Loopを中⼼にしたKubernetesのアーキテクチャ • コントローラー群がそれぞれ仕事を果たした結果Podが起動する 18 Deployment

    Controller read read & write Modifies API Server ReplicaSet Controller kube scheduler kubelet kubelet kubelet { } Deployment { } ReplicaSet { } Pod Pod
  17. Cloud Native Developers JP カスタムコントローラーによるKubernetesの拡張 • カスタムコントローラー: – Reconciliation Loopを新たに実装することで、元々備わっていない機能を

    Kubernetesに追加するもの – CRD (Custom Resource Definition) と カスタムコントローラーによって実現 19 Hoge Controller Modifies API Server Fuga Controller { } Hoge { } Fuga External World (Actual State)
  18. Cloud Native Developers JP Hoge Controller Modifies API Server Fuga

    Controller { } Hoge { } Fuga External World (Actual State) カスタムコントローラーによるKubernetesの拡張 • CRD (Custom Resource Definition): – カスタムリソースのフォーマットを定義するKubernetesリソース – CRDをKubernetesに適⽤すると、カスタムリソースをAPI Serverで管理できるよ うになる 20 独自フォーマットの manifestを操作できるようになる
  19. Cloud Native Developers JP Hoge Controller Modifies API Server Fuga

    Controller { } Hoge { } Fuga External World (Actual State) カスタムコントローラーによるKubernetesの拡張 • カスタムコントローラー – 新たに実装したコントローラー – Go⾔語でcontroller-runtimeというフレームワークを使って実装するのが基本 – 多くの場合Kubernetesクラスター内にデプロイして動かす 21 新たに実装したコントローラー
  20. Cloud Native Developers JP ⽬次 1. いまPlatform Engineeringがアツい 2. Platform

    Engineeringの重要パーツとしてのKubernetes 3. LINEヤフーでの活⽤事例 22
  21. Cloud Native Developers JP プラットフォームの概要 1/2 • Webアプリケーションの実⾏基盤 – 簡単なコマンドを実⾏

    or マニフェストを適⽤するだけでアプリが起動し、エ ンドポイントが公開される 24 $ paasctl create app hello-world --image=example-registry/sample/helloworld-go:latest --port=8080 $ paasctl get app hello-world NAME ENDPOINT READY REASON AGE hello-world https://hello-world.sandbox.app.dev.yahoo.co.jp True 6m4s $ curl https://hello-world.sandbox.app.dev.yahoo.co.jp Hello World! ※⼀部実際のものとは異なる箇所があります
  22. Cloud Native Developers JP プラットフォームの概要 2/2 • ヤフーのプライベートクラウドにある多数の他サービスと連携し、 様々な機能を提供 –

    クラウドコンソールからのNamespace作成 – オブザーバビリティ系のサービスにテレメトリを⾃動送信 – 認証認可によるAPIの保護、ワークロードアイデンティティの⾃動挿⼊ – シークレットマネージャーと連携して機密情報をアプリに設定 • マルチテナント&スケーラビリティ – 複数のKubernetesクラスター組み合わせて論理的にひとつのクラスターを構成 – ヤフーが抱える多数のサービスを少数のクラスタで実⾏可能 25
  23. Cloud Native Developers JP 28 apiVersion: paas.yahoo.co.jp/v1 kind: App metadata:

    name: hello-world namespace: my-project spec: service: autoscale: maxReplicas: 10 minReplicas: 2 template: spec: containers: - name: nginx image: registry.example.com/hello-world:latest ports: - containerPort: 8080 • アプリケーションを実⾏するための最低限のマニフェスト ※⼀部実際のものとは異なる箇所があります
  24. Cloud Native Developers JP マルチテナントのアプリケーション実⾏基盤 • カスタムコントローラーによる⾃動権限設定の仕組み 29 権限管理システム (Athenz)

    Namespace API CI API Server Git { } Namespace Athenz Policy Operator ns-controller policy-controller etcd Kubernetesクラスター Athenz Policy Namespace Namespace 作成操作 Namespaceをクラスターに作成 開発者
  25. Cloud Native Developers JP マルチテナントのアプリケーション実⾏基盤 • カスタムコントローラーによる⾃動権限設定の仕組み 30 権限管理システム (Athenz)

    Namespace API CI API Server Git { } Namespace { } AthenzPolicyClaim Athenz Policy Operator ns-controller policy-controller etcd Kubernetesクラスター Athenz Policy Namespace Namespace 作成操作 Namespaceをクラスターに作成 開発者 権限情報の登録
  26. Cloud Native Developers JP マルチテナントのアプリケーション実⾏基盤 • カスタムコントローラーによる⾃動権限設定の仕組み 31 権限管理システム (Athenz)

    Namespace API CI Git { } Namespace { } AthenzPolicyClaim Athenz Policy Operator ns-controller policy-controller etcd Kubernetesクラスター Athenz Policy Namespace Namespace 作成操作 Namespaceをクラスターに作成 Namespace内の リソースに対する操作 開発者 権限情報の登録 権限のチェック API Server
  27. Cloud Native Developers JP マルチテナントのアプリケーション実⾏基盤 • アプリケーションデプロイ時のエンドポイント⾃動設定の仕組み 32 App DNS

    Server { } App app operator app-controller ab-controller etcd Ingress Controller Pod drr-controller API Server アプリを デプロイ 開発者 アプリのユーザー Pod Pod
  28. Cloud Native Developers JP マルチテナントのアプリケーション実⾏基盤 • アプリケーションデプロイ時のエンドポイント⾃動設定の仕組み 33 App DNS

    Server { } App { } AppBinding app operator app-controller ab-controller etcd Ingress Controller { } DNSRegistrationRequest Pod drr-controller API Server アプリを デプロイ DNSレコードの登録 開発者 アプリのユーザー Pod Pod
  29. Cloud Native Developers JP マルチテナントのアプリケーション実⾏基盤 • アプリケーションデプロイ時のエンドポイント⾃動設定の仕組み 34 App DNS

    Server { } App { } AppBinding app operator app-controller ab-controller etcd Ingress Controller { } DNSRegistrationRequest Pod drr-controller API Server アプリを デプロイ DNSレコードの登録 開発者 アプリのユーザー 名前解決 リクエスト Pod Pod
  30. Cloud Native Developers JP その他の取り組み • マルチテナント & スケーラビリティ –

    複数のKubernetesクラスターを組み合わせた、超⼤規模なアプリ実⾏基盤の実 現 – 複数のKubernetesクラスターを束ねるメタクラスターを設け、メタクラスター にアプリの起動を指⽰すると、適切なクラスター上でアプリが⽴ち上がる仕 組み 35 アプリをデプロイ 適切なクラスター でアプリを起動 アプリにアクセス コントローラー 開発者 エンドユーザー App
  31. Cloud Native Developers JP その他の取り組み • アプリケーション・アイデンティティの⾃動設定 – アプリケーションを⼀意に識別可能なクライアント証明書をPodに⾃動注⼊し、 さらにAthenz上にそれに対応するアプリケーションアカウントを作成

    – KubernetesのSecretを使わずに外部システムへの認証情報が⾃動設定される ※ https://github.com/AthenZ/athenz/blob/master/docs/copper_argos.md 36 コントローラー API Server Pod ZZZ システム 証明書の注⼊ アプリケーション アカウントを登録 クライアント証明書と共に外部システムにリクエスト 認証・認可 ✓ XXXクラスターのYYYアプリ のアクセスを許可 アプリへのアクセス権を設定 ZZZシステム 管理者 開発者 アプリを デプロイ App
  32. Cloud Native Developers JP おわりに • 開発者の⽣産性と開発体験を⾼めるための “Platform Engineering” が

    注⽬されている • KubernetesはInternal Developer Platform構築のための重要パーツ • Kubernetesをカスタムコントローラーで拡張することで、⾼度な要件 を実現するIDPが構築できる • Kubernetesでプラットフォーム開発、やっていきましょう! 37
  33. Cloud Native Developers JP 参考⽂献 • What is platform engineering?

    (Platform Engineering Org) – https://platformengineering.org/blog/what-is-platform-engineering • What Is Platform Engineering? (Gartner) – https://www.gartner.com/en/articles/what-is-platform-engineering • From Kubernetes to PaaS to … Err, What’s Next? - Daniel Bryant, Ambassador Labs – https://www.youtube.com/watch?v=btUYeOa7JPI • 役に⽴つプラットフォームを作ろう – プラットフォームエンジニアが知っておくべき「プロダクト」の考え⽅ – https://speakerdeck.com/jacopen/yi-nili-tupuratutohuomuwozuo-rou-puratutohuomuenziniagazhi- tuteokubeki-purodakuto-falsekao-efang • 世界に誇れるプラットフォームチームをつくる – https://speakerdeck.com/jacopen/shi-jie-nikua-rerupuratutohuomutimuwotukuru 39