本書は技術書典7で頒布した、CNCFプロダクト「Kubernetes」の中核ともいえる「Controller」を中心とした技術書です。 PDF形式の商品になります。 2020/02/28よりインプレスR&D「実践入門 Kubernetesカスタムコントローラーへの道」も販売しております。 本同人誌の内容を底本とし、第7章として応用機能のチュートリアルを追加しています。 https://nextpublishing.jp/book/11389.html Kubernetesは、コンテナオーケストレーションツールのデファクトスタンダードです。 Kubernetesを活用すれば、信頼性の高いプラットフォームを構築できます。 Kubernetesは宣言的にインフラを構築し、その宣言した状態を維持し続けるImmutable Infrastructureを実現しています。 宣言した状態から外れると自動で復旧したり(Self Healing)、負荷が高い時に自動でスケールアウト(Auto Scaling)したりさせることができます。 Kubernetesのその宣言的なインフラを構築する要となるのが「Controller」です。 Controllerは、Control Loop(Reconcile Loop)と呼ばれる調整処理を繰り返すことで、Immutable Infrastructureを実現しています。 そして、Kubernetesには拡張機能として、利用者が独自にCustom Controllerを作成することもできます。 本書は、Kubernetesの中核であるControllerがどのように作られているのか、Custom Controllerを作るためには何を実装すればよいかを解説し、Kubernetesを知っている誰もがControllerを実装できるようにサポートします。 ・詳しい図解 ・豊富なサンプルコード を盛り込んで分かりやすく解説しています。 本文中の解説とコミット履歴をリンクさせていますので、Operatorの写経用としても活用いただけます。
対象読者
・KubernetesまたはKubernetesの標準 Resourceについて、ある程度理解している ・Go⾔語の⽂法や基礎を理解している ・KubernetesでControllerがどのように動いているか理解したい ・KubernetesでControllerを⾃分でも実装したい
本書を通じてできること
・KubernetesのControllerの動作原理を知ることができる ・Kubernetesの内部実装で用いられている仕組みを理解できる ・Kubernetes Controllerの内部実装をソースコードレベルで解説 ・Custom Controller実装に必要なものや方法を理解できる ・SDKであるKubebuilderを使ってサンプルOperatorを実装できる ・Operator SDKを使ってサンプルOperatorを実装できる
目次
# はじめに - この本の想定読者 - 検証バージョン - サンプルコード - 表記上の注意 - 免責事項 - 表記関係について # 第1章 CRDとController - Kubernetesのハイレベルアーキテクチャ - api-server - Control Loop(Reconciliation Loop) - Kubernetesの拡張機能 - Admission Webhook - API Aggregation - CRDとCR - CRD - CR - CRD・CRを作ってみよう - CRDの作成 - CRDの応⽤機能 - Validation - Additional Printer Columns - SubResource - Structural Schema - Pruning - Defaulting - Conversion - ControllerとCRD を⾃作するために必要なもの - Kubernetes Way(client-go + code-generator) - Kubebuilder - Operator SDK - 第⼀章のまとめ # 第2章 client-goと知っておくべき周辺知識 - Kind, Resource, Object - client-goとapimachinery - client-goで Pod の情報を取得してみる - 知っておくべき周辺知識 - Informer - Workqueue - Informerの役割 - runtime.Object - GVKとGVR - DeepCopy - Global Tags/Local Tags - TypeMeta/ObjectMeta - Scheme - 第⼆章のまとめ # 第3章 Sample Controller解説 - Sample Controllerは何をするためのものか? - Sample Controllerディレクトリ構成 - 補⾜: Kubernetes Way Controllerにおける実装の順番 - Sample ControllerのCRD - types.go - main関数 - Foo Controller - Controllerの定義 - メインロジック(Reconcile) - processNextWorkItem関数 - syncHandler関数 - 第三章のまとめ # 第4章 controller-runtimeとcontroller-tools - controller-tools - controller-gen Markers - controller-gen - controller-runtime - Controller Manager - Reconcile関数 - 第四章のまとめ # 第5章 KubebuilderでSample Controllerを実装しよう - 環境構築 - Goの環境構築 - Kubebuilderの環境構築 - Kubebuilderでの開発の順番 - Kuberbuilder PROJECTの初期化 - Kuberbuilderで、API ObjectとControllerのテンプレートを作成 - types.goを編集して、API Objectを定義 - controller.goを編集して、Reconcileを実装 - import - Reconciler Sturct - RBAC Marker - Reconcile context / log - Reconcile処理の流れ - Reconcile 1. Foo Objectを取得する - Reconcile 2. 古いDeploymentが存在していたら削除する - Reconcile 3. Fooが管理するDeploymentを作成または更新する - Reconcile 4. Fooのステータスを更新する - main.goを編集して、main関数を修正 - import - NewManager: ctrl.Options - FooReconciler - 実⾏フェーズとして、Operatorを実際に動かす - make install - Go プロセスで動かす(make run) - コンテナで動かす(make deploy) - 第五章のまとめ # 第6章 OperatorSDKでSample Controllerを実装しよう - 環境構築 - Operator SDKの環境構築 - Operator SDKでの開発の順番 - Operator SDKで、Operator⽤のディレクトリの初期化 - Operator SDKで、API Objectのテンプレートを作成 - Operator SDKで、Controllerのテンプレートを作成 - types.goを編集して、API Objectを定義 - operator-sdk generate k8s - operator-sdk generate openapi - controller.goを編集して、Reconcileを実装 - import - Watcher - Reconcile context / log - Reconcile処理の流れ - Reconcile 1. Foo Objectを取得する - Reconcile 2. Fooが過去に管理していた古い Deploymentが存在していたら、削除する - Reconcile 3. Fooが管理するDeploymentが存在していなければ作成する - Reconcile 4. Fooが管理するDeploymentの SpecとFooのSpecを⽐較し、調整する - Reconcile 5. Fooのステータスを更新する - 実⾏フェーズとして、Operatorを実際に動かす - Goプロセスで動かす(operator-sdk up local) - コンテナで動かす - 第六章のまとめ # あとがき
正誤表
2019/09/26 更新 ① p.30 誤「DefaultingもKubernetes v1.15でAlphaとなり、v1.16でGAになる機能です」 正「DefaultingもKubernetes v1.15でAlphaとなり、v1.16でBetaになる機能です」