helmについて調べてみる
現職ではぼちぼちkubernetesに触れているが、なんとなくhelmは避けてきた。
以下のようなkubernetesにおけるパッケージマネージャと言われている点に不安があったからだ。 ある程度kubernetesについて理解してから使うならまだしも、あまり理解しないまま、helmを使って設定部分を隠蔽化してしまうことに不安があったのだと思う。 thinkit.co.jp
最近はkubernetesにも慣れてきて前述した不安も薄れてきたので、食わず嫌いをやめて少し調べてみる。
helmとはパッケージマネージャである、とはどういうことなのか調べてみた。
Linux OSではAPT
,Yum
,DNF
などパッケージマネージャを使って、ソフトウェアのインストールを行うことができる。
これらのツールは目的のソフトウェアが依存している他のソフトウェアのインストールも自動で行い、手動での依存関係の解決無しに目的のソフトウェアのインストールを簡単に行えるようにしてくれている。
この考え方をkubernetesに適用した結果できたのがhelmとのこと。 helmを使うことで、kubernetesクラスターに必要とするソフトウェアが稼働するPodおよび、Serviceなどのkubernetesリソースを作成することが簡単にできるらしい。 Linuxのパッケージマネージャと同様にレポジトリが存在し、そこからChartと呼ばれるパッケージ(前述した、ソフトウェアが稼働するPodおよび、Serviceなどのkubernetesリソースをまとめたもの)をインストールする。
Chartが依存するChartを指定でき、Linuxのパッケージマネージャと同様に依存性を解決してくれる。
Chart内のkubernetes設定用のyamlはGo templatesで記載できる。
apiVersion: v1 kind: ReplicationController metadata: name: deis-database namespace: deis labels: app.kubernetes.io/managed-by: deis spec: replicas: 1 selector: app.kubernetes.io/name: deis-database template: metadata: labels: app.kubernetes.io/name: deis-database spec: serviceAccount: deis-database containers: - name: deis-database image: {{ .Values.imageRegistry }}/postgres:{{ .Values.dockerTag }} imagePullPolicy: {{ .Values.pullPolicy }} ports: - containerPort: 5432 env: - name: DATABASE_STORAGE value: {{ default "minio" .Values.storage }}
カスタマイズをhelm install
実行時に変数を記載したファイルを渡すことで行える。
- values.yaml
imageRegistry: "quay.io/deis" dockerTag: "latest" pullPolicy: "Always" storage: "s3"
helm install --values=values.yaml
まとめ
なんとなくわかった気がする。 確かに便利だけど、インフラに基軸を置くものとしては、やっぱり多くの設定部分が隠蔽されてしまうのがなんとも気持ち悪い感じがしてしまう。 全部管理下に置いておきたい的な意味で。 アプリケーションエンジニアがサクッと動かす用途には適していそうだと感じた。