フラミナル

考え方や調べたことを書き殴ります。IT技術系記事多め

【備忘録】Kubernetesカスタムコントローラーへの道 を読んだ

これを買って読みました。記憶しておきたいところなどまとめ。

章構成

  • 第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も。

第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
  1. KuberbuilderPROJECTの初期化
  2. Kuberbuilderで、APIObjectとControllerのテンプレートを作成
  3. types.goを編集して、APIObjectを定義
  4. controller.goを編集して、Reconcileを実装
  5. main.goを編集して、main関数を修正
  6. 実行フェーズとして、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の応用機能を実装しよう

  • 未読