Helmを利用する方法を簡単に調べたので、そのまとめです。
環境
- Kubernetes(minikube) v1.17.0
- Helm v3.1.1
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
というホスティングサイトがあります。
色んな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でのインストール方法は、公式ドキュメントを参考に。
Helmを利用してKubernetesオブジェクトをデプロイする
試しにredisのpodをデプロイしてみます。
リポジトリの追加
公式にて、stable
と incubator
の2つのリポジトリ(chart集)が公開されています。stableに定義されるchartの条件は以下。
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