背景
様々な Kubernetest Operator がある。 それが何か理解しつつあるのでまとめておく。
Kubernetest Operatorに対する僕の理解
僕の理解では、「CRD(Custom Resource Difinition)とControllerリソースを用いてあれこれするモジュール」である。 まず、CRDというのは、独自のk8sリソースである。PodとかServiceとかSecretとか公式のリソースのように独自に定義できる。 Controllerというのは、PodというかインスタンスというかCRDを操作する実態である。主に kubernetes API を使ってクラスタ内のリソースを操作したり、外部のAPIを実行したりする。
だから、Kubernetest Operatorの主な仕事は、CRDを定義してContollerを作成すること、だと思う。
例えばPrometheus Operatorでは
CRDとして Prometheus
や Alertmanager
, PrometheusRule
などを定義する。
Contorollerとして Deployment を定義している。
だから、Prometheus Operatorをクラスタにリリースすると、それらのCRDの定義そのもの(リソースではない)やPodが作成される。
このリリースにより、Prometheus
や Alertmanager
といったCRDを使えるようになる(リソースとしてデプロイできる)
Contoroller は、デプロイされたCRDのリソースを使用して、メトリクスを保存したりアラートを送ったりできる。 このContorollerをServiceやらIngressやらを用いて外部に公開していると、PrometheusのUIをWebアプリとして見れたりAPIとしてクエリを実行したりできる。
そういう世界観。