kcp:
Kubernetes APIs Are
All You Need
#techfeed_live
公認エキスパート No.150 チェシャ猫 (@y_taka_23)
TechFeed Experts Night #28 〜コンテナ技術最前線
8th May. 2024
Slide 2
Slide 2 text
$ kubectl get pods
error: the server doesn't have a resource type "pods"
$ kubectl get deploy
error: the server doesn't have a resource type "deploy"
$ kubectl get nodes
error: the server doesn't have a resource type "nodes"
$ kubectl get configmaps
NAME DATA AGE
kube-root-ca.crt 1 126m
$ kubectl version
Client Version: v1.29.2
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Server Version: v1.28.1+kcp-v0.24.0
通常のリソースが存在しない
サーバのバージョンが “kcp”
KubeCon EU 2024 でも発表
https://www.youtube.com/watch?v=7op_r9R0fCo https://www.youtube.com/watch?v=-P1kUo5zZR4
Slide 22
Slide 22 text
kcp が目指すもの
● API プラットフォームのためのフレームワーク
○ CRUD API の管理に特化した Kubernetes API Server
○ Pod / Volume 系のリソースが定義されていない
● 責務を分離できる設計になっている
○ 階層構造の Workspace が定義できる
○ API を提供する側と使用する側が分離されている
Slide 23
Slide 23 text
root
app
photo
chat
storage db
クラスタは全体でひとつ
インフラチーム管理
$ kubectl workspace tree
.
└── root
├── app
│ ├── chat
│ └── photo
├── db
└── storage
$ kubectl workspace :root:app:chat
Current workspace is 'root:app:chat' (type root:universal).
$ kubectl get configmaps
NAME DATA AGE
example 1 10s
kube-root-ca.crt 1 3m23s
$ kubectl workspace :root:app:photo
Current workspace is 'root:app:photo' (type root:universal).
$ kubectl get configmaps
NAME DATA AGE
kube-root-ca.crt 1 4m22s
Workspace の階層構造
chat Workspace からは
ConfigMap が見える
photo Workspace からは
ConfigMap が見えない
$ kubectl workspace :root:storage
Current workspace is 'root:storage' (type root:organization).
$ kubectl apply -f apiresourceschema.yaml
apiresourceschema.apis.kcp.io/v240508.buckets.storage.example.com created
$ kubectl apply -f apiexport.yaml
apiexport.apis.kcp.io/buckets.storage.example.com created
$ kubectl workspace :root:app:photo
Current workspace is 'root:app:photo' (type root:universal).
$ kubectl apply -f bucket.yaml
error: resource mapping not found for name: "photo-bucket" namespace: "" from "bucket.yaml":
no matches for kind "Bucket" in version "storage.example.com/v1" ensure CRDs are installed
first
$ kubectl apply -f apibinding.yaml
apibinding.apis.kcp.io/buckets-api created
$ kubectl apply -f bucket.yaml
bucket.storage.example.com/photo-bucket created
APIBinding を作成して初めて
Bucket 払い出し API が使用できる
Slide 36
Slide 36 text
まとめ
● Kubernetes はコンテナに留まらない基盤
○ CustomResource に対する Reconciliation
● しかし Controller の責務を置く場所が悩ましい
○ インフラ/アプリ以外の「共通サービス」チームの存在
● kcp は API プラットフォーム構築に特化した API Server
○ API(≒ CRD) を公開する側と使用する側の分離
Slide 37
Slide 37 text
From the Platform of Platforms,
To the Platform of APIs
Presented By チェシャ猫 (@y_taka_23)