Operator作成について 連載第2回目 Kubernetes Operatorについて

はじめに

 本記事は、Kubernetes Operatorについて説明します。Operatorの説明に入る前に、Kubernetesを構成するコントローラとリソースについて、説明をおこないその後で、Operatorについて説明いたします。

Kubernetesについて

 前回で、Kubernetesでコンテナが動作するための仕組みを説明しましたので、本記事はKubernetesを構成する主な機能であるコントローラとリソースについて説明します。

Kubernetesコントローラについて

 Kuberentesのコントローラは以下のコンポートネントで実現されており、主なKubernetesコンポートネントは表1に示したものが存在します。

表1 Kubernetesコンポーネントについて

名称主な機能ソースコード備考
kubectlkube-apiserverと接続するクライアントhttps://github.com/kubernetes/kubectl
kube-apiserverkubernetesリソースの読み書きを行うAPIサーバhttps://github.com/kubernetes/apiserver
kube-controller-managerkubernetesリソースに対するコントローラ。代表的なものは、DeploymentリソースからReplicaSetリソースを作るコントローラなどhttps://github.com/kubernetes/controller-manager
kube-shedulerPodリソース監視して、起動するNode情報をPodリソースに書き込むコントローラhttps://github.com/kubernetes/kube-scheduler
kubeletPodリソースの監視値から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内のツールを使用するための環境作りについて説明します。