---
title: Kubernetesとカスタムコントローラーを活用したプラットフォーム開発・運用の勘所
tags:  #devsumi  
author: [Yahoo!デベロッパーネットワーク](https://convert.docswell.com/user/ydnjp)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/GJWLVK18E2.jpg?width=480
description: Developer Summit 2023 #devsumi
published: February 13, 23
canonical: https://convert.docswell.com/s/ydnjp/KW1E1D-2023-02-13-111059
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/GJWLVK18E2.jpg)

Kubernetesとカスタムコントローラーを
活⽤したプラットフォーム開発・運⽤の勘所
ヤフー株式会社 テクノロジーグループ システム統括本部 クラウドプラットフォーム本部
第12代⿊帯 〜クラウドスタック〜
早川 博
@hhiroshell
Copyright
©2023
(C) Yahoo
2020 Yahoo
Japan Corporation
Japan Corporation.
All rights
Allreserved.
Rights Reserved.


# Page. 2

![Page Image](https://bcdn.docswell.com/page/4EZM4ZP9J3.jpg)

⾃⼰紹介
早川 博 / @hhiroshell
• ヤフー株式会社（2020年2⽉〜）
• プライベートクラウド開発チーム
• 第12代⿊帯〜クラウドスタック〜
• 書籍執筆 &amp; レビュー、各所での
登壇発表などしてます
• 分割キーボードはいいぞ
©2023 Yahoo Japan Corporation All rights reserved.
DIYキーボードたち。
↑Cornelius
→ Corne
← BMEK


# Page. 3

![Page Image](https://bcdn.docswell.com/page/Y76N3ZMD7V.jpg)

⽬次
1. いまPla&#039;orm Engineeringがアツい
2. Pla&#039;orm Engineeringの重要パーツとしてのKubernetes
3. ヤフーでの活⽤事例
4. Kubernetesを使ってプラットフォーム開発を始めよう
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 4

![Page Image](https://bcdn.docswell.com/page/G755LWZ874.jpg)

⽬次
1. いまPlatform Engineeringがアツい
2. Platform Engineeringの重要パーツとしてのKubernetes
3. ヤフーでの活⽤事例
4. Kubernetesを使ってプラットフォーム開発を始めよう
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 5

![Page Image](https://bcdn.docswell.com/page/9J2NLQRVER.jpg)

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


# Page. 6

![Page Image](https://bcdn.docswell.com/page/DEYPQWDQEM.jpg)

ITシステム開発の歴史
• アプリケーション開発者(Dev)は幸せになったのか…︖
• ⾼頻度のリリースとそれに耐える品質を実現するプラクティスにより、⼼理
的安⼼感を持って開発に当たれるようになった
• ⾼機能かつUXに優れ、スケーラブルで安定的に稼働するシステムが実現でき
るようになり、結果として開発者の評価に…(※)
※ 個⼈の⾒解を含みます
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 7

![Page Image](https://bcdn.docswell.com/page/VJN5K96278.jpg)

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


# Page. 8

![Page Image](https://bcdn.docswell.com/page/YE9YV2LDJ3.jpg)

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


# Page. 9

![Page Image](https://bcdn.docswell.com/page/GE86P5X57D.jpg)

Platform Engineering
• 開発者の効率性と開発体験を⾼める
⽅法として、”Platform Engineering”
が期待されるように
• 2022年のGartner Hype Cycleに登場
• Innovation Trigger（黎明期）フェーズ
ここ
※ Cloud-Nativeは
Slope of Enlightenment（啓発機）フェーズ
https://twitter.com/TheMarkONeill/status/1557531379746881536
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 10

![Page Image](https://bcdn.docswell.com/page/LEL91Y83JR.jpg)

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


# Page. 11

![Page Image](https://bcdn.docswell.com/page/4JMZWN6MEW.jpg)

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


# Page. 12

![Page Image](https://bcdn.docswell.com/page/PJR6YDPL79.jpg)

パブリッククラウドとの違い
• パブリッククラウドだけでは組織固有の課題や要件に応えるのは難
しい
• 例えば、組織固有のポリシーに準拠した権限をデフォルトで従業員に設定し
たくても、始めからそれが⽤意されているわけではない
• 権限を⾃動設定する機能が提供されることはありうるが、それを使って⾃組
織に適⽤するのはユーザーの責任
使⽤
提供
使⽤
IDP
開発者
プラットフォーム
チーム
©2023 Yahoo Japan Corporation All rights reserved.
パブリッククラウド
の機能群


# Page. 13

![Page Image](https://bcdn.docswell.com/page/PEXMG1N67X.jpg)

CloudNativeとPlatform Engineering
• CloudNativeなテクノロジー群はIDPを実現するためのパーツとして
重要な役割を担う
• Kubernetesを中⼼とした様々なミドルウェアと強固なOSSエコシステム
CNCF Graduated Projects
https://landscape.cncf.io/card-mode?project=graduated
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 14

![Page Image](https://bcdn.docswell.com/page/3EKG42NGJD.jpg)

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


# Page. 15

![Page Image](https://bcdn.docswell.com/page/L73NL4V575.jpg)

⽬次
1. いまPlatform Engineeringがアツい
2. Platform Engineeringの重要パーツとしてのKubernetes
3. ヤフーでの活⽤事例
4. Kubernetesを使ってプラットフォーム開発を始めよう
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 16

![Page Image](https://bcdn.docswell.com/page/87DWNQ8YJG.jpg)

Kubernetesの拡張ポイント
• Kubernetesには、機能拡張されること想定して多数の拡張ポイント
が設けられている
• カスタムコントローラー
• Aggregation Layer
• Admission / Mutating Webhook
• Authentication / Authorization Webhook
• Scheduler
• Device Plugin
• Network Plugin
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 17

![Page Image](https://bcdn.docswell.com/page/VJP95L82E8.jpg)

本セッションで話すこと
• Kubernetesには、機能拡張されること想定して多数の拡張ポイント
が設けられている
• カスタムコントローラー
これについて話します
• AggregaMon Layer
• Admission / MutaMng Webhook
• AuthenMcaMon / AuthorizaMon Webhook
• Scheduler
• Device Plugin
• Network Plugin
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 18

![Page Image](https://bcdn.docswell.com/page/2EVMPQNXEQ.jpg)

Kubernetesのコントローラーパターン
• Deploymentを適⽤するといい感じにPod（とコンテナ）が起動する
Worker Node
Pod
&gt; kubectl apply
Deployment
API
Server
感じの
い
い
か
なに
しくみ
Worker Node
Pod
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 19

![Page Image](https://bcdn.docswell.com/page/57GGPWKR7L.jpg)

Kubernetesのコントローラーパターン
• コントローラー群がそれぞれ仕事を果たした結果Podが起動する
Worker Node
&gt; kubectl apply
Deployment
API
Server
Worker Node
etcd
{ } Deployment
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 20

![Page Image](https://bcdn.docswell.com/page/4EQX23NY7P.jpg)

Kubernetesのコントローラーパターン
• コントローラー群がそれぞれ仕事を果たした結果Podが起動する
Controller Manager
Worker Node
Deployment
Controller
&gt; kubectl apply
Deployment
API
Server
Worker Node
etcd
{ } Deployment
{ } ReplicaSet
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 21

![Page Image](https://bcdn.docswell.com/page/KJ46L1GZ71.jpg)

Kubernetesのコントローラーパターン
• コントローラー群がそれぞれ仕事を果たした結果Podが起動する
Controller Manager
Deployment
Controller
&gt; kubectl apply
Deployment
Worker Node
ReplicaSet
Controller
API
Server
Worker Node
etcd
{ } Deployment
{ } ReplicaSet
{ } Pod
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 22

![Page Image](https://bcdn.docswell.com/page/LE1VLGDD7G.jpg)

Kubernetesのコントローラーパターン
• コントローラー群がそれぞれ仕事を果たした結果Podが起動する
Controller Manager
Deployment
Controller
&gt; kubectl apply
Deployment
ReplicaSet
Controller
Worker Node
kubescheduler
API
Server
Worker Node
etcd
{ } Deployment
{ } ReplicaSet
{ } Pod
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 23

![Page Image](https://bcdn.docswell.com/page/GEWLVKY872.jpg)

Kubernetesのコントローラーパターン
• コントローラー群がそれぞれ仕事を果たした結果Podが起動する
Controller Manager
Deployment
Controller
&gt; kubectl apply
Deployment
ReplicaSet
Controller
Worker Node
kubescheduler
API
create / edit
k
kubelet
Pod
watch
Server
Worker Node
etcd
{ } Deployment
{ } ReplicaSet
{ } Pod
©2023 Yahoo Japan Corporation All rights reserved.
create / edit
k
kubelet
Pod


# Page. 24

![Page Image](https://bcdn.docswell.com/page/47ZM4ZX9E3.jpg)

Reconciliation Loopの基本
1. 指定された「望ましい状態(Desired State)」を取得する
2. 「実際の状態(Actual State)」を観測する
3. 「実際の状態」を「望ましい状態」に⼀致するように変更する
4. 1〜3 を繰り返す
Modiﬁes
Desired
State
read
read &amp; write
(1)
Controller
(4)
©2023 Yahoo Japan Corporation All rights reserved.
(2), (3)
External World
(Actual State)


# Page. 25

![Page Image](https://bcdn.docswell.com/page/YJ6N3Z4DJV.jpg)

KubernetesにおけるReconciliation Loop
• 「望ましい状態」をKubernetesリソースとして記述し、API Serverで
管理する
• API Serverに保存したり、CRUD操作を⾏ったりする
• 「実際の状態」は何でもよい。例えば:
• 所定の内容のKubernetesリソースがAPI Serverにあること
• 所定の状態でPodが起動していること
• 外部システムに所定の設定が⾏われていること
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 26

![Page Image](https://bcdn.docswell.com/page/GJ55LWQ8J4.jpg)

Reconciliation Loopに着⽬したKubernetesのアーキテクチャ
• コントローラー群がそれぞれ仕事を果たした結果Podが起動する
API
Server
etcd
Modiﬁes
{ } Deployment
Deployment Controller
{ } ReplicaSet
ReplicaSet Controller
{ } Pod
kube scheduler
read
read &amp; write
kubelet
kubelet
kubelet
©2023 Yahoo Japan Corporation All rights reserved.
Pod


# Page. 27

![Page Image](https://bcdn.docswell.com/page/LE3NL4VGE5.jpg)

カスタムコントローラーによるKubernetesの拡張
• カスタムコントローラー:
• Reconciliation Loopを新たに実装することで、元々備わっていない機能を
Kubernetesに追加するもの
• CRD (Custom Resource Definition) と カスタムコントローラーによって実現
API
Server
etcd
Modiﬁes
{ } Hoge
Hoge Controller
{ } Fuga
Fuga Controller
©2023 Yahoo Japan Corporation All rights reserved.
External World
(Actual State)


# Page. 28

![Page Image](https://bcdn.docswell.com/page/8EDWNQ8N7G.jpg)

カスタムコントローラーによるKubernetesの拡張
• CRD (Custom Resource DeﬁniQon):
• カスタムリソースのフォーマットを定義するKubernetesリソース
• CRDをKubernetesに適⽤すると、カスタムリソースをAPI Serverで管理できるよ
うになる
API
Server
etcd
Modiﬁes
{ } Hoge
Hoge Controller
{ } Fuga
Fuga Controller
独自フォーマットの
manifestを操作できるようになる
©2023 Yahoo Japan Corporation All rights reserved.
External World
(Actual State)


# Page. 29

![Page Image](https://bcdn.docswell.com/page/V7P95L8NJ8.jpg)

カスタムコントローラーによるKubernetesの拡張
• カスタムコントローラー
• 新たに実装したコントローラー
• Go⾔語でcontroller-runMmeというフレームワークを使って実装するのが基本
• 多くの場合Kubernetesクラスター内にデプロイして動かす
API
Server
etcd
Modiﬁes
{ } Hoge
Hoge Controller
{ } Fuga
Fuga Controller
External World
(Actual State)
新たに実装した
コントローラー
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 30

![Page Image](https://bcdn.docswell.com/page/2JVMPQNYJQ.jpg)

⽬次
1. いまPla&#039;orm Engineeringがアツい
2. Pla&#039;orm Engineeringの重要パーツとしてのKubernetes
3. ヤフーでの活⽤事例
4. Kubernetesを使ってプラットフォーム開発を始めよう
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 31

![Page Image](https://bcdn.docswell.com/page/5EGGPWKWEL.jpg)

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


# Page. 32

![Page Image](https://bcdn.docswell.com/page/4JQX23NQEP.jpg)

ヤフーでの実践例 – Kubernetesベースのアプリケーション実⾏環境
• セルフサービスで利⽤開始
• 開発者がGUIでNamespaceを作成すると、アクセス権が⾃動設定され安全に利
⽤可能になる
• 少ない⼿間でWebアプリケーションを実⾏
• アプリをデプロイするとURLが⾃動的に払い出され、すぐにアクセス可能に
なる
• アプリにクライアント証明書が⾃動注⼊され、Secret管理の必要なく他システ
ムにアクセスできる
• マルチテナント &amp; スケーラブル
• ヤフーの多数のサービスを少数のクラスターで実⾏
©2023 Yahoo Japan Corporation All rights reserved.
他にも色々ありますが
一部ご紹介します &gt; &lt;


# Page. 33

![Page Image](https://bcdn.docswell.com/page/K746L1GYE1.jpg)

ヤフーでの実践例 - Kubernetesベースのアプリケーション実⾏環境
• セルフサービスのNamespace払い出しと権限設定
• GUIからNamespaceを作成
Super Awesome Private Cloud Console
my-project
Namespace新規作成
Namespace名:
•
⾃分が属さないプロジェクトのNamespaceに対しては操作できない
# 関係ないNamespaceに対する操作（CLIのコンテキストは設定しておく）
$ sapctl –n another-project get app
Error from server (Forbidden): apps.fleet.zlab.co.jp is forbidden: User ”hhiros...
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 34

![Page Image](https://bcdn.docswell.com/page/LJ1VLGDNEG.jpg)

ヤフーでの実践例 - Kubernetesベースのアプリケーション実⾏環境
• アプリのデプロイからアクセスまで
• 簡単なコマンドまたはカスタムリソースからアプリをデプロイ
• アプリが起動すると⾃動的にURLが払い出され、すぐにアクセス可能
$ sapctl create app hello-world
--image=example-registry/sample/helloworld-go:latest
--port=8080
$ sapctl get app hello-world
NAME
ENDPOINT
hello-world
https://hello-world.sandbox.app.dev.yahoo.co.jp
$ curl https://hello-world.sandbox.app.dev.yahoo.co.jp
Hello World!
©2023 Yahoo Japan Corporation All rights reserved.
READY
True
REASON
AGE
6m4s


# Page. 35

![Page Image](https://bcdn.docswell.com/page/GJWLVK8ME2.jpg)

ヤフーでの実践例 - Kubernetesベースのアプリケーション実⾏環境
• カスタムコントローラーによる⾃動権限設定の仕組み
Namespace
API
Namespace
作成操作
Git
CI
Namespace
Namespaceをクラスターに作成
API
Server
開発者
etcd
{ } Namespace
Kubernetesクラスター
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 36

![Page Image](https://bcdn.docswell.com/page/4EZM4Z8MJ3.jpg)

ヤフーでの実践例 - Kubernetesベースのアプリケーション実⾏環境
• カスタムコントローラーによる⾃動権限設定の仕組み
Namespace
API
Namespace
作成操作
Git
CI
Namespace
権限管理システム (Athenz)
Athenz Policy
Namespaceをクラスターに作成
API
権限情報の登録
Server
開発者
etcd
ns-controller
{ } Namespace
{ } AthenzPolicyClaim
policy-controller
Athenz Policy Operator
Kubernetesクラスター
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 37

![Page Image](https://bcdn.docswell.com/page/Y76N3ZP57V.jpg)

ヤフーでの実践例 - Kubernetesベースのアプリケーション実⾏環境
• カスタムコントローラーによる⾃動権限設定の仕組み
Namespace
API
Git
Namespace
作成操作
CI
開発者
Athenz Policy
Namespaceをクラスターに作成
API
Namespace内の
リソースに対する操作
権限管理システム (Athenz)
Namespace
Server
権限情報の登録
権限のチェック
etcd
ns-controller
{ } Namespace
{ } AthenzPolicyClaim
policy-controller
Athenz Policy Operator
Kubernetesクラスター
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 38

![Page Image](https://bcdn.docswell.com/page/G755LWKG74.jpg)

ヤフーでの実践例 - Kubernetesベースのアプリケーション実⾏環境
• アプリケーションデプロイ時のエンドポイント⾃動設定の仕組み
{ } App
API
App
アプリを
デプロイ
Server
etcd
開発者
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 39

![Page Image](https://bcdn.docswell.com/page/9J2NLQWDER.jpg)

ヤフーでの実践例 - Kubernetesベースのアプリケーション実⾏環境
• アプリケーションデプロイ時のエンドポイント⾃動設定の仕組み
app operator
API
App
アプリを
デプロイ
Server
etcd
{ } App
app-controller
{ } AppBinding
ab-controller
{ } DNSRegistraUonRequest
drr-controller
開発者
DNS Server
DNSレコードの登録
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 40

![Page Image](https://bcdn.docswell.com/page/DEYPQWLMEM.jpg)

ヤフーでの実践例 - Kubernetesベースのアプリケーション実⾏環境
• アプリケーションデプロイ時のエンドポイント⾃動設定の仕組み
app operator
API
App
アプリを
デプロイ
Server
etcd
{ } App
app-controller
{ } AppBinding
ab-controller
{ } DNSRegistraUonRequest
drr-controller
開発者
DNSレコードの登録
DNS Server
名前解決
アプリのユーザー
リクエスト
Pod
Ingress
Controller
Pod
Pod
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 41

![Page Image](https://bcdn.docswell.com/page/VJN5K94378.jpg)

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


# Page. 42

![Page Image](https://bcdn.docswell.com/page/YE9YV2QPJ3.jpg)

その他の取り組み
• アプリケーション・アイデンティティの⾃動設定
• アプリケーションを⼀意に識別可能なクライアント証明書をPodに⾃動注⼊
し、さらにAthenz上にそれに対応するアプリケーションアカウントを作成
• KubernetesのSecretを使わずに外部システムへの認証情報が⾃動設定される
※ h6ps://github.com/AthenZ/athenz/blob/master/docs/copper_argos.md
App
アプリを
デプロイ
開発者
アプリへのアクセス権を設定
アプリケーション
アカウントを登録
API
Server
✓ XXXクラスターのYYYアプリ
のアクセスを許可
Pod
ZZZシステム
管理者
認証・認可
証明書の注⼊
コントローラー
クライアント証明書と共に外部システムにリクエスト
©2023 Yahoo Japan Corporation All rights reserved.
ZZZ
システム


# Page. 43

![Page Image](https://bcdn.docswell.com/page/GE86P5GX7D.jpg)

⽬次
1. いまPla&#039;orm Engineeringがアツい
2. Pla&#039;orm Engineeringの重要パーツとしてのKubernetes
3. ヤフーでの活⽤事例
4. Kubernetesを使ってプラットフォーム開発を始めよう
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 44

![Page Image](https://bcdn.docswell.com/page/LEL91YGNJR.jpg)

このセクションで話すこと
• ここではカスタムコントローラー開発をおこなう際の、設計の考え
⽅やプロジェクトの進め⽅について話します
• 実装作業の観点ではcontroller-runQmeと呼ばれるフレームワークが
デファクトになっていて、これを使いこなす必要があります。これ
についてはすでに良質な資料があるのでそちらを参考にしてくださ
い（本スライドの最後に参考⽂献を掲載してあります）
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 45

![Page Image](https://bcdn.docswell.com/page/4JMZWNQQEW.jpg)

カスタムコントローラー開発の進め⽅
• カスタムコントローラー開発の全体の流れ
設計
コントローラーをひとつずつ
実装・テスト・リリースしていく
コントローラーと
カスタムリソースの
構成を決める
カスタムリソースの
仕様を決める
コントローラー毎に
詳しい挙動を決める
コントローラー
の実装・テスト
リリース
設計へのフィードバック
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 46

![Page Image](https://bcdn.docswell.com/page/PJR6YD8K79.jpg)

カスタムコントローラーの設計の進め⽅
• コントローラーとカスタムリソースの構成を決める
• 作りたい機能を実現できるようにコントローラーとカスタムリソースを作る
単位を決めていく
• 下のような図を書きながら試⾏錯誤
etcd
{ } Namespace
{ } AthenzPolicyClaim
ns-controller
policy-controller
Athenz Policy Operator
External World
(Actual State)
• ひとつのコントローラーに機能を詰め込みすぎないように注意
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 47

![Page Image](https://bcdn.docswell.com/page/PEXMG1857X.jpg)

カスタムコントローラーの設計の進め⽅
• カスタムリソースの仕様を決める
• 実際にmanifest（yamlファイル）を書きながらフィールド構成を考えていく
• specとstatusがある。statusはコントローラーからリソースに対するActual State
の状態などを記録するのに利⽤できる
kind: AthenzPolicyClaim
spec:
policySetVersion: user-namespace-template-1_1_0
status:
synchronized: True
• kubectl get したときに表⽰する項⽬もいい感じにしておくと運⽤時に便利
$ kubectl get athenzpolicyclaim
NAMESPACE
NAME
my-project-test
my-project-test-claim
SYNCHRONIZED
True
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 48

![Page Image](https://bcdn.docswell.com/page/3EKG42KRJD.jpg)

カスタムコントローラーの設計の進め⽅
• コントローラー毎に詳しい挙動を整理する
• ns-controllerの動作
イベント
コントローラーの動作
Namespaceリソースが新規作成された
⼦のAthenzPolicyClaimリソースを作成するxxxフィールド、yyy
フィールドの値は…
Namespaceリソースのxxxが変更された
⼦のAthnezPolicyClaimのxxxをNamespaceに合わせて変更する
Namespaceリソースが削除された
⼦のAthenzPolicyClaimを削除する
AthenzPolicyClaimリソースが削除された
AthenzPolicyClaimリソースを再作成する
AthenzPolicyClaimリソースが変更された
親のNamespaceリソースの内容に合わせてAthenzPolicyClaimリ
ソースを元に戻す
• policy-controllerの動作
イベント
...
コントローラーの動作
...
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 49

![Page Image](https://bcdn.docswell.com/page/L73NL4ZG75.jpg)

カスタムコントローラーの設計の進め⽅
• コントローラーの挙動を決めるときのコツ
• Actual Stateに変更があったときの動作も忘れない
ここが変更されたら
policy-controllerがもとに戻す
etcd
{ } Namespace
{ } AthenzPolicyClaim
ここが変更され
たら
ns-controller
がもとに戻す
ns-controller
policy-controller
Athenz Policy Operator
External World
(Actual State)
• 各表（前ページ）が⼤きくなり過ぎるようなら、コントローラーの役割が多すぎ
ないか⾒直す
• 前ページの各表はそのままテストケースにもなる
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 50

![Page Image](https://bcdn.docswell.com/page/87DWNQRNJG.jpg)

コントローラーの実装
• 1つのバイナリに複数のコントローラーが含まれることがほとんど
• コントローラーを1つずつ実装していく
• それぞれのコントローラーは互いに独⽴したReconciliaMon Loopを担当するの
で、別々に実装を進められる
• Athenz Policy Operatorの例では、policy-controllerができ上がった時点で、権限
情報をmanifestで管理できるようになる
カスタムリソースを
直接適⽤
API
Server
etcd
{ } AthenzPolicyClaim
policy-controller
Athenz Policy Operator
権限の管理をmanifestで
できるようになった！
©2023 Yahoo Japan Corporation All rights reserved.
External World
(Actual State)


# Page. 51

![Page Image](https://bcdn.docswell.com/page/VJP95LWNE8.jpg)

コントローラー単位で開発を進めるメリット
• コントローラー単位で開発すると、⼩さな独⽴した単位で漸進的に
開発を進めていける
• 意味のある⼩さな単位でリリースして、早めにフィードバックを得られる
• 複数チームで分担できる
• スクラムチームの動き⽅にうまくはまる
※ MVP - not “bike to car” (h8ps://www.linkedin.com/pulse/mvp-bike-car-fred-voorhorst/)
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 52

![Page Image](https://bcdn.docswell.com/page/2EVMPQ8YEQ.jpg)

ここまでのまとめ
• カスタムコントローラー開発の全体の流れ
設計
コントローラーをひとつずつ
実装・テスト・リリースしていく
コントローラーと
カスタムリソースの
構成を決める
カスタムリソースの
仕様を決める
コントローラー毎に
詳しい挙動を決める
コントローラー
の実装・テスト
リリース
設計へのフィードバック
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 53

![Page Image](https://bcdn.docswell.com/page/57GGPW5W7L.jpg)

おわりに
• 開発者の⽣産性と開発体験を⾼めるための “Platform Engineering” が
注⽬されている
• KubernetesはInternal Developer Platform構築のための重要パーツ
• Kubernetesをカスタムコントローラーで拡張することで、⾼度な要
件を実現するIDPが構築できる
• カスタムコントローラー開発やっていきましょう︕
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 54

![Page Image](https://bcdn.docswell.com/page/4EQX23ZQ7P.jpg)

宣伝
• サイバーエージェントさん主催のイベントにて、本⽇紹介したアプ
リケーション実⾏基盤についての発表があります。今⽇よりもっと
詳しい話が気になる⽅は、ぜひご参加ください︕
「CA.infra #1 - Kubernetes as a Service」
・ 2023/03/02(⽊) 19:00〜 オンライン開催
・ hGps://cyberagent.connpass.com/event/272843/
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 55

![Page Image](https://bcdn.docswell.com/page/KJ46L13Y71.jpg)

©2023 Yahoo Japan Corporation All rights reserved.


# Page. 56

![Page Image](https://bcdn.docswell.com/page/LE1VLG1N7G.jpg)

参考⽂献 – Platform Engineeringについて
• What is plaUorm engineering? (PlaUorm Engineering Org)
•
hGps://plaOormengineering.org/blog/what-is-plaOorm-engineering
• What Is PlaUorm Engineering? (Gartner)
•
hGps://www.gartner.com/en/arQcles/what-is-plaOorm-engineering
• From Kubernetes to PaaS to … Err, What’s Next? - Daniel Bryant, Ambassador Labs
•
hGps://www.youtube.com/watch?v=btUYeOa7JPI
• 役に⽴つプラットフォームを作ろう
– プラットフォームエンジニアが知っておくべき「プロダクト」の考え⽅
•
hGps://speakerdeck.com/jacopen/yi-nili-tupuratutohuomuwozuo-rou-puratutohuomuenziniagazhituteokubeki-purodakuto-falsekao-efang
• 世界に誇れるプラットフォームチームをつくる
•
hGps://speakerdeck.com/jacopen/shi-jie-nikua-rerupuratutohuomuQmuwotukuru
©2023 Yahoo Japan Corporation All rights reserved.


# Page. 57

![Page Image](https://bcdn.docswell.com/page/GEWLVK9M72.jpg)

参考⽂献 – カスタムコントローラーの開発について
• The Kubebuilder Book
• https://book.kubebuilder.io/
• つくって学ぶKubebuilder
• https://zoetrope.github.io/kubebuilder-training/
• Kubernetesオペレータのアンチパターン &amp; ベストプラクティス
• https://speakerdeck.com/zoetrope/kubernetesoperetafalseantipatanbesutopurakuteisu
©2023 Yahoo Japan Corporation All rights reserved.


