Helmを利用する方法

Helmを利用する方法を簡単に調べたので、そのまとめです。

環境

Helmとは

Helm とは、KubernetesにおけるPackage Managerです。KubernetesのPackageて何だよ、という話ですが、Kubernetesで作成するObjectのマニフェストファイルと、それをHelmで利用するための管理ファイルにより構成されたテンプレートと言えます。具体的には、以下のRedis向けのPackageの中身を見ることで、イメージできるようになると思います。

GitHub - helm/charts/stable/redis-ha

template ディレクトリの中を見ると、Kubernetes ClusterにRedisをデプロイするための、各Object向けのマニフェストファイルが用意されています。つまりHelmとは、これら事前に用意されたマニフェストファイルを利用して、Kubernetes上にミドルウェアなりKubernetesのControllerとなる機能をデプロイするための仕組み、と理解しています。

ChartとHelm Hub

上記でPackageと呼んでいる、管理ファイルとマニフェストファイル群のテンプレートのことを、Helmでは Chart と呼ばれています。また、Docker HubやAnsible Galaxyのように、作成されたChartをシェアする仕組みとして、 Helm Hub というホスティングサイトがあります。

Helm Hub

色んなChartが存在し、これを利用すればマニフェストファイル作成の手間を省略することができます。このあたりは、他のIaCツールと同じ感じですね。

Helm Clientのインストール

Helmを利用するには、Kubernetes Clusterを管理する端末(kubectlを実行する端末)に、Helm Clientをインストールする必要があります。

以下は、Windowsでインストールする方法。Chocolatey経由でインストールできます。

> choco install kubernetes-helm
> helm version
version.BuildInfo{Version:"v3.1.1", GitCommit:"afe70585407b420d0097d07b21c47dc511525ac8", GitTreeState:"clean", GoVersion:"go1.13.8"}

他OSでのインストール方法は、公式ドキュメントを参考に。

Installing Helm

Helmを利用してKubernetesオブジェクトをデプロイする

試しにredisのpodをデプロイしてみます。

リポジトリの追加

公式にて、stableincubator の2つのリポジトリ(chart集)が公開されています。stableに定義されるchartの条件は以下。

Technical Requirements

stableのリポジトリをローカルに追加します。

> helm repo add stable https://kubernetes-charts.storage.googleapis.com
"stable" has been added to your repositories

How Do I Enable the Stable Repository for Helm 3?

確認。

> helm repo list
NAME    URL
stable  https://kubernetes-charts.storage.googleapis.com

デプロイ

リポジトリ内に登録されているredisのchartをデプロイします。

検索。

> helm search repo redis
NAME                                    CHART VERSION   APP VERSION     DESCRIPTION
stable/prometheus-redis-exporter        3.2.3           1.3.4           Prometheus exporter for Redis metrics
stable/redis                            10.5.7          5.0.7           DEPRECATED Open source, advanced key-value stor...
stable/redis-ha                         4.4.1           5.0.6           Highly available Kubernetes implementation of R...
stable/sensu                            0.2.3           0.28            Sensu monitoring framework backed by the Redis ...

redis-ha のchartを、minikube環境にデプロイします。

> helm install redis stable/redis-ha
NAME: redis
LAST DEPLOYED: Wed Mar 11 23:14:02 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
Redis can be accessed via port 6379 and Sentinel can be accessed via port 26379 on the following DNS name from within your cluster:
redis-redis-ha.default.svc.cluster.local

To connect to your Redis server:
1. Run a Redis pod that you can use as a client:

   kubectl exec -it redis-redis-ha-server-0 sh -n default

2. Connect using the Redis CLI:

  redis-cli -h redis-redis-ha.default.svc.cluster.local

環境がminikubeだからか、Pendingになっているpodがありますが、helmを使ったデプロイ方法はこんな感じです。

> kubectl get pods
NAME                      READY   STATUS    RESTARTS   AGE
redis-redis-ha-server-0   2/2     Running   0          43m
redis-redis-ha-server-1   0/2     Pending   0          43m