はじめに
本記事は、Kubernetes Operatorについて説明します。Operatorの説明に入る前に、Kubernetesを構成するコントローラとリソースについて、説明をおこないその後で、Operatorについて説明いたします。
Kubernetesについて
前回で、Kubernetesでコンテナが動作するための仕組みを説明しましたので、本記事はKubernetesを構成する主な機能であるコントローラとリソースについて説明します。
Kubernetesコントローラについて
Kuberentesのコントローラは以下のコンポートネントで実現されており、主なKubernetesコンポートネントは表1に示したものが存在します。
表1 Kubernetesコンポーネントについて
名称 | 主な機能 | ソースコード | 備考 |
kubectl | kube-apiserverと接続するクライアント | https://github.com/kubernetes/kubectl | |
kube-apiserver | kubernetesリソースの読み書きを行うAPIサーバ | https://github.com/kubernetes/apiserver | |
kube-controller-manager | kubernetesリソースに対するコントローラ。代表的なものは、DeploymentリソースからReplicaSetリソースを作るコントローラなど | https://github.com/kubernetes/controller-manager | |
kube-sheduler | Podリソース監視して、起動するNode情報をPodリソースに書き込むコントローラ | https://github.com/kubernetes/kube-scheduler | |
kubelet | Podリソースの監視値からCRIランタイムに命令を送るコントローラ | https://github.com/kubernetes/kubelet |
表1の示したコンポートネントは、Go言語で開発されております。
なお、kube-apiserverを経由して、Kubernetesリソース制御するコントローラを開発する場合は主に二つの方法があります。一つはclient-goと呼ばれるGo言語のライブラリを使用してGo言語で開発すること。もう一つは、AnsibleのKubernetes制御プラグインを使用するAnsible PlayBookを作成し、そのPlayBookをAnsibleで実行することです。これらの動作について、図に表すと下記の図1のようになります。
図1 カスタムコントローラによるリソース制御
この上記図1は、kubeconfigと呼ばれるファイルが出てきます。これは、kube-apiserverにアクセスするための情報が書かれたファイルです。また、本図のカスタムコントローラはコンテナ化していない場合の動作になります。もし、コンテナ化による動作は、kube-apiserverへのアクセスするtoken情報がコンテナ内に含まれており、それを参照してkube-apiserverにアクセスするようになります。
Kubernetesリソースについて
Kubernetesのリソースは、kube-apiserverを介してetcdに登録される情報です。主にDeploymentやReplicaSetなど設定パラメータをまとめて、Kubernetesリソースと呼びます。Kubernetesがあらかじめ用意したKubernetesリソースは、ルールに沿って設定する必要があります。
また、Kubernetesリソースには、カスタムリソース定義と呼ばれる自由にカスタムリソースを設定できる機能があります。図2.のようにAAAAと呼ばれるKubernetesリソースは通常設定ができませんが、AAAAのルールを書いたカスタムリソース定義を設定することで、AAAAとよばれるカスタムリソースが設定できるようになります。
図2 カスタムリソース定義適用前後の違い
Kubernetes Operatorについて
Kubernetes Operatorは、Kubernetesの運営する方法や特定条件による制御をコード化しカスタムコントローラに組み込むことで、自動運用する仕組みことを示します。
本章はOperatorの構成やOperatorの活用、Operatorのツールについての説明を行います。
Operatorの構成について
Kubernetes Operator構成は主に、カスタムコントローラとカスタムリソースがから成り立っています。カスタムコントローラとカスタムリソースによるOperatorの動作を図に示すと図3の通りになります。
図3 カスタムリソースとカスタムコントローラのOperator動作図
上記図3内の、カスタムコントローラの動作の流れについて、図に表すと以下の図4の通りになります。
図4 OperatorのコントローラによるKubernetesリソースライフサイクル
Operatorの利用について
Operatorを利用する場合は、Kubernetesにカスタムリソースとカスタムコントローラをインストールする必要があります。導入方法や主な利用方法について、まとめた結果を表2に示します。
表2 カスタムリソースやカスタムコントローラの利用方法と導入方法について
名称 | 主な利用方法 | 導入方法 |
カスタムリソース | カスタムコントローラを開始するためのトリガーカスタムコントローラの設定値の保存場所コントローラのステータスを保存場所 | カスタムリソース定義とよばれるリソース情報をKubernetesクラスタに登録 |
カスタムコントローラ | Kubernetesリソースの構成管理特定リソースの定期監視制御プログラミングによる制御の自動化 | 実行プログラムの入ったコンテナをデプロイ実行プログラムをKubernetesクラスタにアクセスできるサーバにプログラムを導入し実行 |
Operatorのツールについて
最後に、Operatorの開発や導入についてのツールについて説明します。
Operatorの開発や導入についての『Opertor Framework』という概念と、Operatorの配布ストアのOperarHubがあります。
Opertor Frameworkには、開発キットとして『Operator SDK』,Kubernetesのインストーラとしての『Operator Lifecycle Manager』(通称OLM)などから構成されています。
OperatorHubは、作成したOperatorの登録サイトで登録するとOLMによるインストールに必要なカタログに登録されます。
Operator Frameworkという仕組み内のツールをまとめると以下表3の通りになります。
表3 Operator Framework内のツールについて
名称 | 機能 | 公式サイト |
Operator SDK | 開発用ツール | https://sdk.operatorframework.io/ |
Operator Lifecycle Manager | インストール管理ツール | https://olm.operatorframework.io/ |
OperatorHub | 配布ストア | https://operatorhub.io/ |
まとめ
Kuberntes OperatorはKubernetesに対して、作業を自動化するための概念です。それを実現するために、カスタムコントローラやカスタムリソースという機能がKubernetesに用意しています。次回では、Operator Framework内のツールを使用するための環境作りについて説明します。