これを買って読みました。記憶しておきたいところなどまとめ。
章構成
- 第1章 CRDとController
- 第2章 client-goと知っておくべき周辺知識
- 第3章 Sample Controller解説
- 第4章 controller-runtimeとcontroller-tools
- 第5章 KubebuilderでSample Controllerを実装しよう
- 第6章 OperatorSDKでSample Controllerを実装しよう
- 第7章 Custom Resourceの応用機能を実装しよう
この本を読んでわかること
各章ごとの覚えておきたいこと
第1章 CRDとController
- k8sのAPI拡張方法
方法 | 内容 | 拡張の自由度 |
---|---|---|
Admission Webhook | APIリクエストを変更・検証するためのWebhookを追加する | △ |
CRD | 独自のリソースを定義するAPI拡張方法 | ○ |
API Aggregation | 追加のAPIを実装しAggregation Layerに登録することで拡張する方法 | ◎ |
- Admission Webhook
- Mutating Admission Webhook: APIリクエストの変更(APIリクエストのデフォ値を変更、独自実装など)
- Vaidating Admission Webhook: APIリクエストの検証(APIリクエストに対するバリデーションチェックなど、OpenPolicyAgentとかはこの仕組み使ってるのかな?)
- API Aggregation
- kube-api-server以外にcustom api-serverを実装し拡張する方法
- metrics server / service catalog などのapiを実現するために使われている
- www.youtube.com
- CRD
- 主流で使われている
- CR: カスタムリソース
- CRD: カスタムリソースディフィニション(定義)
- CR Controller: カスタムリソースコントローラー(あるべきにする)
これを適用するだけでapiVersion: "stable.example.com/v1alpha"
が使えるようになる
apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: name: samples.stable.example.com spec: group: stable.example.com versions: - name: v1alpha served: true storage: true scope: Namespaced names: kind: Sample plural: samples singular: sample shortNames: ["sp"]
思ってたよりCRDはだいぶ簡単。
apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: samples.stable.example.com spec: group: stable.example.com scope: Namespaced names: kind: Sample plural: samples singular: sample shortNames: ["sp"] versions: - name: v1alpha served: true storage: true schema: openAPIV3Schema: type: object properties: spec: type: object properties: image: type: string message: type: string required: - message
こうすることでOpenAPIスキーマを利用してCRに対してValidationをつけることができる。またrequiredも。
- ControllerとCRDを自作する方法
- Kubernetes Way(Client-go + code-generator): 自由度高いが覚えることが多い
- Kubebuilder: Custom controllerのロジックだけに集中できる / Operatorとしてどうさしてくれう
- Operator SDK:
- 【Kubernetes Operator】operator-sdkとkubebuilder統合に関する注意点 - Qiita で解説してくれているが2020年よりkubebuilderとOperator SDKを統合するとのこと。kubebuilderに寄せていくぽいのでこっちを選択するのが今後は良さそう。(
- kubebuilder/integrating-kubebuilder-and-osdk.md at master · kubernetes-sigs/kubebuilder · GitHub
- Custom ControllerとOperatorの違い
- Custom Controller - Custom Resourceの管理を行うController
- Operator - CRDとCustom Controllerのセット
第2章 client-goと知っておくべき周辺知識
- client-go: CustomControllerを実装する時に使われるライブラリ
- kubebuilderとかoperator sdk使えば隠蔽されてる
- kubernetesのクライアントライブラリ
- apimachinery
- KubernetesAPIObject&KubernetesAPIlikeObject用の機能を備えたライブラリ
- 結構飛ばした
第3章 Sample Controller解説
$ curl -sL https://github.com/kubernetes-sigs/kubebuilder/releases/download/v2.2.0/kubebuilder_2.2.0_darwin_amd64.tar.gz |tar -xz -C /tmp $ sudo mv /tmp/kubebuilder_2.2.0_darwin_amd64 /usr/local/kubebuilder $ export PATH=$PATH:/usr/local/kubebuilder/bin $ kubebuilder version $ curl -s "https://raw.githubusercontent.com/\\nkubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash $ mv kustomize /usr/local/bin $ chmod +x /usr/local/bin/kustomize $ export PATH=$PATH://usr/local/bin $ kustomize version
- KuberbuilderPROJECTの初期化
- Kuberbuilderで、APIObjectとControllerのテンプレートを作成
- types.goを編集して、APIObjectを定義
- controller.goを編集して、Reconcileを実装
- main.goを編集して、main関数を修正
- 実行フェーズとして、Operatorを実際に動かす
磯 賢大. 実践入門 Kubernetesカスタムコントローラーへの道 (Japanese Edition) (Kindle の位置No.1744-1749). Kindle 版.
第4章 controller-runtimeとcontroller-tools
- 未読
第5章 KubebuilderでSample Controllerを実装しよう
- 未読
第6章 OperatorSDKでSample Controllerを実装しよう
- 未読
第7章 Custom Resourceの応用機能を実装しよう
- 未読