Helm 3.0でkubernetesに簡単導入


Kubernetesにアプリを簡単に入れられるHelmがv3へメジャーアップデートされ、Tillerがなくなることで操作性が変化したので試す。

今回はElasticsearchとKibanaを入れる。環境はWindowsのDocker desktop付属のkubernetesを使用。

1. Helmのインストール

1.1 Helmのインストール

Windowsの場合はChocolateyを使用する。Chocolateyのインストール方法は下記参照。

https://chocolatey.org/install

Chocolateyのインストール後はコマンドプロンプトやPowerShell等のコンソールからHelmをインストール。

> choco install -y kubernetes-helm

1.2 Chart(必要なアプリケーションの集合)を検索

Helmでは必要なアプリケーション(コンテナ)の集まりをChartと呼ぶ。
search repo コマンドで目的のChartに関して検索可能。

> helm search repo Chart名

2. HelmでElasticsearchをインストール

2.1 ElasticsearchのChartを検索

今回のターゲットとなるElasticsearchをhelmにて検索。

# ElasticsearchのChart検索
> helm search repo Elasticsearch

一番上のbitnami/elasticsearchを今回はインストールする。
表示されたURLをブラウザに入力する。

2.2 レポジトリの登録とChartのインストール

表示された下記コマンドを入力。

# レポジトリの登録(Chartのインストールに必要)
> helm repo add bitnami https://charts.bitnami.com
> helm repo add stable https://kubernetes-charts.storage.googleapis.com
# Elasticsearch Chartのインストール(設定なし)
> helm install elasticsearch bitnami/elasticsearch

elasticsearchという名前でbitnami/elasticsearchがインストールされる。
設定を変えるため、一旦アンインストール。

helm delete elasticsearch

3. Chartの設定変更(Kibanaのインストール)

Chart(アプリケーションの集合)の設定をファイルに出力する。

helm inspect values bitnami/elasticsearch > config.yml

config.yml中の14行目、global中kibanaEnabledのfalseをtrueに変更
これでElasticsearchと同時にKibanaがインストールされる。

  kibanaEnabled: true

変更した設定を反映しつつElasticsearch Chartのインストールを実施。この変更によりKibanaも同時にインストールされる。

> helm install elasticsearch bitnami/elasticsearch -f config.yml

コマンドプロンプトやPowerShell等のコンソールから、下記を入力して
Kibanaのサービスをローカルにポートフォワードする。

> kubectl port-forward svc/elasticsearch-kibana 80:80

ブラウザでlocalhost:80と入力してKibanaを開く。
デモデータを入れると下記のダッシュボードが閲覧可能。

KibanaとElasticsearchを個別にコンテナとしてインストールすると、コンテナ上のKibanaからElasticsearchを認識させるのがDNSの関係でしんどい。Helmを使えば、各種コンテナがパッケージ化されているため楽に処理できる。

Ingressを使って、Elasticsearchをlocalhostで公開し、Kibanaは80以外のポートを使ってポートフォワードで使用するのが最適解だろうか。
Elasticsearchは階層で認識する方式なので、ingressと相性が悪い。Ingressで80以外のポートを指定できれば便利なのだが……。

ElasticsearchとKibanaのOSS版だけでは外部データの取り込みが難しいので、EmbulkかFluentdの追加に関して追記するかも。
(一般的なCSV取り込みは有償版Kibanaの機能)

以上