Slide 1

Slide 1 text

Cloud Native Developers JP Platform EngineeringにおけるKubernetesの 活⽤法とLINEヤフーにおける事例のご紹介 早川 博 | @hhiroshell LINEヤフー株式会社 SIグループ クラウド統括本部 1

Slide 2

Slide 2 text

Cloud Native Developers JP 【PR】⾃作キーボードはいいぞ • ⾃キ専⾨店「遊舎⼯房」へGo! 2 ←遊舎⼯房さんの店舗はこちら ↓@hhiroshellのキーボード Timothy ⾃⼰紹介 @hhiroshell 早川 博 (はやかわ ひろし) • Cloud Nativeなインフラを開発 するエンジニア。 LINEヤフー 所属

Slide 3

Slide 3 text

Cloud Native Developers JP 【PR】本を書きました • 「Kubernetesマイクロサービス開発の実践」 – Kubernetesでアプリケーションを実⾏するサービ ス開発者向け – “マイクロサービス”と銘打っていますが、コント ローラーやサービスメッシュでクラスタをもりも りにするよりも、Kubernetesの仕組みを理解して 使いこなすことにフォーカスしてます 3

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

Cloud Native Developers JP ITシステム開発の歴史 • リリースの⾼頻度化と円滑な改善サイクルの確⽴を⽬指して進化 6 モノリシックシステム 継続的デリバリー (2012〜) デプロイメント・パイプラインによる迅速かつ ⾼頻度なリリースとフィードバック Microservices (2014〜) システムを疎結合な⼩規模アプリ群で 構成しアップデートを容易に クラウドインフラとIaC インフラ管理にソフトウェア・ エンジニアリングのプラクティスを導⼊し、 調達の迅速化と変更容易性を実現 DevOps (2009〜) 開発者と運⽤者の協⼒体制とそれを ⽀えるツール群 ※ 時系列の順序には諸説あります

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

Cloud Native Developers JP 近年の開発者が抱えている課題 • 責任範囲の拡⼤と、⼤量のスキル/ツールの習得に悩まされている – 運⽤、監視へのコミットと、マイクロサービス化 による運⽤、監視の複雑化 – デプロイメント・パイプラインの構築とメンテナンス – 組織によってはクラウド周りの⾯倒を⾒たり 8 • 開発に集中できず効率が悪い • スーパーマン以外は活躍しにくい / スーパーマンの頑張りに依存す るようになり時間を奪ってしまう

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

Cloud Native Developers JP CloudNativeとPlatform Engineering • CloudNativeなテクノロジー群はIDPを実現するためのパーツとして重 要な役割を担う – Kubernetesを中⼼とした様々なミドルウェアと強固なOSSエコシステム 12 CNCF Graduated Projects

Slide 13

Slide 13 text

Cloud Native Developers JP CloudNativeとPlatform Engineering • とりわけKubernetesは、組織固有の要件を実装するためのベースとし て活躍 13 • 様々なワークロードを安定的に動かすための基本機能 – セルフヒーリング、ローリングアップデート、スケーラビリティ... • 使いやすく整備された拡張ポイント – カスタムコントローラー、Admission Webhook... • API Servicerを中⼼とした⼀貫性のある使⽤感 – kubectlでKRM(Kubernetes Resource Model)リソースを操作する、という⼀貫 した体験

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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)

Slide 20

Slide 20 text

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を操作できるようになる

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

Cloud Native Developers JP 本セクションで話すこと • ヤフーではカスタムコントローラーを活⽤して、弊社固有の要件に 応えたり、⾼い開発者体験を実現するプラットフォームを構築して います • このセクションではその⼀部を紹介します 23

Slide 24

Slide 24 text

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! ※⼀部実際のものとは異なる箇所があります

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

Cloud Native Developers JP 26 • コンソールからのNamespace作成 ※画像はイメージです

Slide 27

Slide 27 text

Cloud Native Developers JP 27 • コンソールからのNamespace作成 ※画像はイメージです 4VQFS"XFTPNF1SJWBUF$MPVE$POTPMF NZQSPKFDU Namespace新規作成 Namespace名:

Slide 28

Slide 28 text

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 • アプリケーションを実⾏するための最低限のマニフェスト ※⼀部実際のものとは異なる箇所があります

Slide 29

Slide 29 text

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をクラスターに作成 開発者

Slide 30

Slide 30 text

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をクラスターに作成 開発者 権限情報の登録

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

Cloud Native Developers JP その他の取り組み • マルチテナント & スケーラビリティ – 複数のKubernetesクラスターを組み合わせた、超⼤規模なアプリ実⾏基盤の実 現 – 複数のKubernetesクラスターを束ねるメタクラスターを設け、メタクラスター にアプリの起動を指⽰すると、適切なクラスター上でアプリが⽴ち上がる仕 組み 35 アプリをデプロイ 適切なクラスター でアプリを起動 アプリにアクセス コントローラー 開発者 エンドユーザー App

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

Cloud Native Developers JP おわりに • 開発者の⽣産性と開発体験を⾼めるための “Platform Engineering” が 注⽬されている • KubernetesはInternal Developer Platform構築のための重要パーツ • Kubernetesをカスタムコントローラーで拡張することで、⾼度な要件 を実現するIDPが構築できる • Kubernetesでプラットフォーム開発、やっていきましょう! 37

Slide 38

Slide 38 text

Cloud Native Developers JP Appendix. 参考⽂献 38

Slide 39

Slide 39 text

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