技術書典7で「実践入門 Kubernetesカスタムコントローラへの道」を頒布します

目的

2019/09/22(日)の技術書典7で「実践入門 Kubernetesカスタムコントローラへの道」を頒布します。

この記事は、その本の内容紹介になります。

公開ページでは文字上限があるので、載せられない情報を中心に挙げていきます。

 

techbookfest.org

 

 

どんな本を書くのか

タイトル通り、Kubernetesの「カスタムコントローラ」がテーマの本です。

f:id:go_vargo:20190826014403p:plain

表紙

Kubernetesには拡張機能として、主に次の3つの機能があります。

  1. Admission Webhook
  2. CRD + Custom Controller(= Operatorとも呼ばれる)
  3. API Aggregation

本書はこのうち、近年注目が集まっている2のCRD + Custom Controllerを中心にした本です。

 

Custom Controllerに興味を持った人なら共感いただけることですが、現状Custom Controllerに関する情報は散逸し、非常に敷居が高い分野です。

誰でも手に入る書籍としては、先日ブログ記事で挙げた「Programming Kubernetes」しかありません(さらに英語です)。

go-vargo.hatenablog.com

 

もちろん英語や中国語のブログなどで、Controllerに触れたものは数多くあります。

しかし、これまたややこしいことに、Controller自作のための方法がいくつかあり、初見で見た場合は混乱すること間違いなしです。

私もその一人でした。

 

そのため、Controller・Operatorを自作したい人が、どういうツールを使って、どのように実装していくのかを悩まずに最短の道のりで辿り着けるように、という想いを込めて執筆しているのが本書になります。

 

なぜ書くのか

Custom Controllerだけでなく、Custom API Serverなどの幅広いKubernetesの実装について触れている「Programming Kubernetes」は、ブログ記事でも書きましたが、Kubernetesプログラミングに挑戦したい誰もが読むべきだと考えています。

 

であれば、わざわざ同人誌など書かずに「Programming Kubernetes」を読めばいいではないか、と思うかもしれません。

しかし、あえて誤解を恐れずに言うと、「Programming Kubernetes」を読むだけで、Controller・Operatorを開発するのは難しい、と考えています。

 

理由はいくつかあります。

  1. Custom Controller, Custom API Serverなど幅広い情報を取り扱っているため、Custom Controller実装の章が全体から見ると比較的内容が薄い
  2. 2019/08に販売されたProgramming Kubernetesだが、すでに一部の内容が古くなってしまった(これはSDKの開発サイクルが早すぎるためです)

もちろん、ブログの記事に書いた通り、Programming Kubernetesは控え目に言って(個人的に)最高なので、読むべき良著であることに変わりはありません。

 

しかし、本書では、本書を読み、サンプルコードを実際に実装することで、この本を読んだ誰もがOperatror開発の一歩を踏み出せるようになることを最終目標としています。

 

そのため、Programming Kubernetesとは別の観点で書き上げています。

例えるなら...

  • Programming Kubernetes: KubernetesのControl Planeの実装全般
  • Kubernetesカスタムコントローラへの道: Custom Controllerに特化した実践入門書

といった違いがあります。

 

私も初めてController開発に挑戦したときに、主に次のことで悩みました。

・ツール多すぎ。結局なに使えばいいの…

・ツール使ったら結局どこのなにを修正すれば良いの…

・なにから手をつければいいの(結局なにすればいいの)…

 

試行錯誤・四苦八苦しながら進めていった分、本書が、迷わずOperator実装というゴールに辿り着けるための道標になれば、これに勝る喜びはありません。

 

この本で何が学べるのか

大きく分けて、2つあります。

  1.  KubernetesのController部分の実装の仕組みに詳しくなれる
  2.  Kubernetes Custom Controller・Operator実装に必要なことを学べる 

1. KubernetesのController部分の実装の仕組みに詳しくなれる

Custom Controller・Operatorを実装するための方法には、主に次の3つの方法があります。

  1. KubernetesのController実装と同じ伝統的な方法(client-go + code-generatorライブラリを利用)
  2. KubebuilderというSDKを利用する方法
  3. Operator SDKというSDKを利用する方法

KubernetsのReplicaSetやDeployment, ServiceなどのResourceにも、それを管理するControllerがあります。

 

それらのControllerは1のclient-go + code-generatorライブラリを利用した方法で実装されています。

本書では、client-goのコンポーネントの説明をした後で、Sample Controllerという1の方法で実装されたサンプルリポジトリの内容を解説します。

github.com

 

Sample Controllerの実装が理解できれば、同じ仕組みを使っているため、その知識は既存のKubernetesのController実装の理解にも繋がります。

 

 

例えば本書を読めば、次のような図の意味が理解できるようになるでしょう。

f:id:go_vargo:20190826021511p:plain

よく見かけるやつですが、最初は理解不能でした

 

2. Kubernetes Custom Controller・Operator実装に必要なことを学べる 

Kubebuilder, Operator SDKも利用するには、ある程度お作法・実装方法を学ぶ必要があります。

 

公式チュートリアルもあるので、ある程度迷うことは少ないかもしれません。

(とはいえ、全ての実装の解説があるわけではありません)

 

特にKubebuilderはメジャーバージョン(v2.0.0)が2019/08/23(このブログ公開の3日前)に出たばかりです。

Programming Kubernetesは、Kubebuilder v1での実装が掲載されているので、参考にできるのは次の公式チュートリアルだけです。

 

book.kubebuilder.io

 

Kubernetesカスタムコントローラへの道」では、KubebuilderとOperator SDKのそれぞれのサンプルリポジトリを用意しています。

 

それぞれの実装で細かくコミットを残し、本文中の解説とリンクするようにコミット先のリンクを脚注に掲載しています。

少なくとも、本文とコミット履歴を見比べながら写経すれば、誰でもOperatorを実装できるように注力しています。

 

また、次のような図の意味が理解できるようになるでしょう。

 

f:id:go_vargo:20190826021603p:plain

これもよく見かけますが、最初は理解不能でした

最後に本の章立てを説明して、終わりたいと思います。

 

章立て・構成

1章 CRDとController

Kubernetesの3つ存在する拡張機能の概要と、そのうちの一つであるCRD・Controllerについて説明します。

次のテーマを取り扱います。

 

Kubernetesのハイレベルアーキテクチャ

・Control Loop(Reconciliation Loop)

Kubernetes拡張機能(Admission, CRD, API Aggregation) 

・CRDとCR

・CRDの応用機能

・ControllerとCRDを自作するために必要なもの

 

2章 client-goと知っておくべき周辺知識

Kubernetesの実装でも使われているライブラリ「clinet-go」と、Kubernetesの実装を見るにあたって必要なコンポーネントについて解説します。

次のテーマを取り扱います。

 

・Kind, Resource, Object

・client-goとapimachinery

・Informer

・Workqueue

・runtime.Object

Scheme

 

3章 Sample Controller解説

本章では、その「Sample Controller」の仕組みをコードベースで解説します。

次のテーマを取り扱います。

 

・Sample Controllerは何をするためのものか?

・Sample Controllerディレクトリ構成

・Sample ControllerのCRD

・types.go

・main関数

・メインロジック(Reconcile)

 

4章 controller-runtimeとcontroller-tools

本書では、Kubebuilderが利用しているSDK「controller-runtime」と「controller-tools」の使い方を説明します。

v0.2.0のcontroller-runtimeとcontroller-toolsを、Controller開発に必要な部分に特化して説明します。

次のテーマを取り扱います。

 

・controller-tools markers

・Controller Manager

・Metrics

・Leader Election

・Reconcile

 

5章 KubebuilderでSample Controllerを実装しよう

Kubebuilderで、実際のControllerを実装します。

3章のSample Controllerを題材に、Kubebuilderで再実装に挑戦します。

 

第5章と第6章は、実際に手を動かして実装してもらえるように、細かくコミットをきって、本文中の解説とリンクして脚注にコミット履歴を連携しています。

(電子版でないとリンクを辿るのが厳しいですが、ご容赦ください)

 

最新版のKubebuilder v2.0.0で実装します。

 

6章 OperatorSDKでSample Controllerを実装しよう

絶賛執筆中です。

後日更新します。

 

9/7追記 無料サンプル版を第1章まで公開しています。

 

こちらも合わせて読んでいただけると幸いです。

go-vargo.booth.pm

 

 

最後に

 

在庫の準備数は、サークルチェック数を元に決めようと考えています。

この記事を読んで興味が出た方は、サークルチェックをしてくださると幸いです。

 

techbookfest.org

 

 

当日は、

  • 物理本 + ダウンロードカード
  • ダウンロードカードのみ

という形態で、頒布します(どちらも¥1,500)。

電子版は、後日BOOTHでも取り扱う予定です。

 

それでは、9/22当日はお06C「アルハンブラの畔」にてお待ちしています。