Slide 1

Slide 1 text

新卒N年目の勉強会&交流会!〜〇〇への誘い〜 kubernetes コンポーネント開発入門 @mazrean

Slide 2

Slide 2 text

マズリーン mazrean ■ ツール等を作っている ● k8sクラスタ構築 kanata ● Go言語DIツール Kessoku ■ SRE @DeNA ● 新卒2年目 @mazrean22 2

Slide 3

Slide 3 text

マズリーン mazrean ■ ツール等を作っている ● k8sクラスタ構築 kanata ● Go言語DIツール Kessoku ■ SRE @DeNA ● 新卒2年目 今日はこの話 @mazrean22 3

Slide 4

Slide 4 text

kubernetes コンテナをクラスタ化 して管理するツール ■ マシンを跨いだコンテナ管理 ができる ■ Control Plane・Worker Nodeで構成 クラスタ Control Plane Worker Node コンテナ コンテナ Worker Node コンテナ コンテナ Worker Node コンテナ コンテナ 4

Slide 5

Slide 5 text

kubernetesの仕組み 複数コンポーネント が連携して動作 ■ 手動でのクラスタ構築は手間がかかる 5

Slide 6

Slide 6 text

mazrean/kanata mac上でk8sクラスタ を自動構築 するツール ■ Apple Containerを用いている ■ 起動コンテナ分のリソースのみ使用 クラスタ Control Plane Worker Node Worker Node 6

Slide 7

Slide 7 text

k8sクラスタ構築入門

Slide 8

Slide 8 text

k8sクラスタ構築入門

Slide 9

Slide 9 text

kanataの仕組み kubeletを自作した代替物に置き換えている ■ コンテナ構築 を行うコンポーネント ■ virtual-kubeletと呼ばれる方法 自作コンポーネントへ 置き換え 9

Slide 10

Slide 10 text

k8sクラスタ構築入門 kubelet自作入門

Slide 11

Slide 11 text

目次 1 開発用クラスタ構築 2 API Serverとの通信方法 3 API Serverとの通信フロー 4 まとめ

Slide 12

Slide 12 text

開発用クラスタ kubeletのアクセス先Control Planeが必要 ■ 少なくとも図中4コンポーネントは必須 ■ できればローカルに欲しい 開発時に必要 12

Slide 13

Slide 13 text

開発用クラスタ構築方法 既存k8sクラスタ構築ツール に頼るのが手軽 ■ kanata初期開発時にはkindを使用 ● 今はkanata本体で賄っている ■ 当然kanataを使ってもよい 開発用はkindなどで構築 ※実際のkanata内では別方法で構築 13

Slide 14

Slide 14 text

目次 1 開発用クラスタ構築 2 API Serverとの通信方法 3 API Serverとの通信フロー 4 まとめ

Slide 15

Slide 15 text

API Serverとの通信 基本kubeletからAPI ServerへHTTPリクエスト ■ HTTPのREST APIで通信 ● mTLSで認証と暗号化を行う ● データ形式はProtoBuf ■ 例外はある Worker Node Control Plane HTTP(mTLS) ProtoBuf API Server kubelet 15

Slide 16

Slide 16 text

mTLS クライアントも証明書を持つTLS ■ 「クライアントが誰か」も証明される ■ kubeletにも証明書を設定する必要がある ● 発行方法などは通常kubeletと同じ 信頼不可 通常TLS クライアント 信頼可 サーバー 信頼可 mTLS クライアント 信頼可 サーバー 16

Slide 17

Slide 17 text

目次 1 開発用クラスタ構築 2 API Serverとの通信方法 3 API Serverとの通信フロー 4 まとめ

Slide 18

Slide 18 text

Pod作成までの通信フロー かなりざっくり説明すると以下 1. Node登録(起動時) ● 以降、ハートビートで生きていることを通知 2. Pod割り当て監視 3. Podステータス更新 18

Slide 19

Slide 19 text

Node登録(起動時) Worker Nodeをクラスタに登録 ■ Control Planeが存在を認識する必要がある ■ 登録後、Podが割り当てられるように Worker Node Control Plane POST /api/v1/nodes Node増えたよ~ API Server kubelet 19

Slide 20

Slide 20 text

Pod割り当て監視 Podの割り当てを監視する ■ HTTP/2 streamingで通信 ■ 通知が来たらPodを構築 Control Plane API Server GET /api/v1/pods Pod割り当てたら教えて Pod割り当てたよ HTTP/2 streaming Worker Node kubelet 20

Slide 21

Slide 21 text

Podステータス更新 Podの状態変更を通知する Control Plane API Server PATCH /api/v1/namespaces//pods//status Podの状態変わったよ Worker Node kubelet 21

Slide 22

Slide 22 text

まとめ ■ 簡易kubeletは頑張れば自分で作れる ● 意外と仕組み自体はシンプル ■ 普段使わない技術が色々出てきて面白い ■ これだけ複雑なものが動くだけで楽しい! https://github.com/mazrean/kanata 22