3.9 KiB
title | content_template |
---|---|
クラウドコントローラーマネージャーの開発 | templates/concept |
{{% capture overview %}}
{{< feature-state for_k8s_version="v1.11" state="beta" >}} 今後のリリースで、クラウドコントローラーマネージャーはKubernetesを任意のクラウドと統合するための良い方法となります。これによりクラウドプロバイダーはKubernetesのコアリリースサイクルから独立して機能を開発できるようになります。
{{< feature-state for_k8s_version="1.8" state="alpha" >}}
独自のクラウドコントローラーマネージャーを構築する方法を説明する前に、クラウドコントローラーマネージャーがKubernetesの内部でどのように機能するかに関する背景を知っておくと役立ちます。
クラウドコントローラーマネージャーはGoインターフェースを利用するkube-controller-manager
のコードで、任意のクラウドの実装をプラグインとして利用できるようになっています。スキャフォールディングと汎用のコントローラー実装の大部分はKubernetesのコアになりますが、クラウドプロバイダーのインターフェイスが満たされていれば提供されているクラウドプロバイダーのインターフェイスが実行されるようになります。
実装の詳細をもう少し掘り下げてみましょう。すべてのクラウドコントローラーマネージャーはKubernetesコアからパッケージをインポートします。唯一の違いは、各プロジェクトが利用可能なクラウドプロバイダーの情報(グローバル変数)が更新される場所であるcloudprovider.RegisterCloudProviderを呼び出すことによって独自のクラウドプロバイダーを登録する点です。
{{% /capture %}}
{{% capture body %}}
開発
Kubernetesには登録されていない独自クラウドプロバイダー
Kubernetesには登録されていない独自のクラウドプロバイダーのクラウドコントローラーマネージャーを構築するには、次の3つのステップに従ってください。
- cloudprovider.Interfaceを満たす go パッケージを実装します。
- Kubernetesのコアにあるcloud-controller-managerのmain.goをあなたのmain.goのテンプレートとして利用します。上で述べたように、唯一の違いはインポートされるクラウドパッケージのみです。
- クラウドパッケージを
main.go
にインポートし、パッケージに cloudprovider.RegisterCloudProvider を実行するためのinit
ブロックがあることを確認します。
既存の独自クラウドプロバイダーの実装例を利用すると役立つでしょう。独自クラウドプロバイダーの実装例のリストはこちらにあります。
Kubernetesに登録されているクラウドプロバイダー
Kubernetesに登録されているクラウドプロバイダーであれば、Daemonset を使ってあなたのクラスターで動かすことができます。詳細についてはKubernetesクラウドコントローラーマネージャードキュメントを参照してください。
{{% /capture %}}