概要
先日Kubernetes Novice Tokyo #27に参加しました。
その際にKubernetes OperatorをテーマにしたLTがあり、興味がわいたため、学んだことをアウトプットしたいと思います。
※Kubernetes Operatorについてはゼロから学び初めたため、正しくないことなどあればご容赦ください。
Kuberntes Operatorとは??
Kubernetes Operatorは、Kubernetes公式ドキュメントでは「Operatorパターン」と定義されています。
Operatorパターンは、カスタムリソース(Kubernetes APIの拡張)を使用しKubernetesへのソフトウェア拡張をすることができる仕組みです。
KubernetesのOperatorパターンは、Kubernetesのソースコードを修正すること無く、クラスターの振る舞いを拡張することを可能にします。
この「Operatorパターン」を実現するために、ユーザの独自リソースを「定義」したものを「Custom Resource Definision/Custom Resource」、ユーザが定義した独自リソースを「扱う」コンポーネントを「Operator(Custom Controller)」と呼びます。
Kubernetes Operatorがなぜ必要か?
Kubernetes Operatorは、複雑なアプリケーションの自動化と効率化を実現し、Kubernetes上でアプリケーションをスケーラブルに運用するための不可欠なツールです。アプリケーションのライフサイクル管理や運用タスクを自動化し、一貫性を確保します。これにより、運用の簡素化と人的エラーの削減が実現され、Kubernetesクラスタの運用が向上します。
operatorの仕組み
Custom Resource Definition (CRD)
Operatorは、アプリケーションやサービスのカスタムリソースタイプを定義するためにCRDを使用します。これにより、Kubernetes APIに新しいリソースタイプを追加し、Kubernetesが特定のアプリケーションの操作を可能にします。
operator(Custom Controller)
Operatorは、CRDと連携して特定のカスタムリソースを監視し、状態変化やアクションのトリガーを検出します。operatorはコードで記述され、カスタムリソースの状態に従ってアプリケーションの実際の操作(デプロイ、スケーリング、バックアップなど)を実行します。
カスタムリソース(CR)
ユーザーはOperatorに対してアプリケーションやサービスのカスタムリソースを作成します。これにより、Kubernetesオーケストレーションがカスタムアプリケーションに対応できるようになります。CRはアプリケーションの要件と構成を指定します。
Operatorのデプロイ
Operator自体はKubernetesクラスタ内にデプロイされ、Kubernetes APIと連携します。Operatorはカスタムリソースを監視し、CRDに定義されたアプリケーション固有の操作を実行します。
Operatorはアプリケーションやサービスのオーケストレーションを自動化し、運用を簡素化するための強力なツールです。CRDとControllerの組み合わせにより、Kubernetes上で複雑なアプリケーションを効率的に管理できます。
Kubernetes Operator の実装方法
以下のようなサードパーティ製のものを使うと、比較的簡単に実装が行えるみたいです。(下記以外の実装方法もあります)
Go で kubernetes/client-go を使って、k8s API を触りながらフルスクラッチな実装も可能なようです。
感想
Kubernetes Operatorについて、LT会で学んだこと+αで調べたことを簡単にまとめてみました。
次回は実際に手元で動かしてみた内容をアウトプットできればと思います。