Help us understand the problem. What is going on with this article?

helmを使ってKubernetesを楽にする

1.helmとは。基本的な使い方

helmとは:KubernetesでつらいYAML地獄を脱却するYAML生成ツール

  • Kubernetesのつらさ

Kubernetesでは、PodやServiceといった基本的なコンテナの設定をYAML形式で記述します。
何度も何度もYAMLを書いていると、下記のような決まり文句の書き出し数行を書くのもつらくなってきます。

okimari.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.7.9
    ports:
    - containerPort: 80

helmがやってくれるのは、「nginxがほしい」と願えば上記のYAMLを生成してくれることだと思っています。

helmの基本的なコンセプト:設計図Chartとそこから作られるRelease

YAMLの生成は、Chart(チャート)とRelease(リリース)で実現されます。

  • Chartは、Kubernetesでよく作られるPodやServiceなどのYAMLファイルのひな型を固めて圧縮したもの。
  • Releaseは、Chartに基づいてコピー生成されたPodやServiceなどのYAMLファイル。

nginxのチャートはたいてい有志が開発してくれていますので、我々は後述するhelm installコマンドを実行すれば、新しいリリースを作成してくれて、ついでにKubernetesにデプロイしてくれます。
生成したYAMLファイル自体に目を通すこともなく、Kubernetes上にnginxが構築されるわけです。
これがYAML地獄からの脱却です。

helmの仕掛け

基本的にはコマンドとサーバで処理を行っています。
コマンドはKubernetesで必要な処理をサーバに伝えて実行します。
利用する我々は、コマンドの使い方を覚えればいいだけです。

image.png

(注:このアーキテクチャはv2まで。v3からはtillerはなくなり、端末側でのレンダリングとなりました)

これだけで使える:helm installとReleaseの名前

チャートからリリースを作成するコマンドが、helm installです。

v2版.sh
helm install <nginxチャート名> -n <リリース名>
v3版.sh
helm install <リリース名> <nginxチャート名> # 結構私自身影響ありました・・・スクリプト書き直しが ;o

同じチャートから複数のリリースを作った場合にちゃんと区別するために、リリースには名前が付けられます。何も指定しなければ勝手に英単語2つをくっつけた名前が設定されます。(が、これはあとあとで厄介ですので、リリース名はつけるのがおすすめ)

その他のhelmのコマンド

  • インストール
コマンド 機能
helm init tillerサーバのインストール (v2まで)
  • リリース系
コマンド 機能
helm install チャートからリリースを作成する
helm upgrade チャート更新があったら、作成済みリリースに更新を適用する
helm delete(del) リリースを削除する
helm list(ls) リリースをリストアップする
helm get [values, manifest] リリースの情報を表示する
  • チャート系
コマンド 機能
helm repository(repo) [list, add, delete] チャートのレポジトリを追加、削除する
helm create 自作チャートのひな型を作成する
helm dependency(dep) チャート内の依存関係を解決する
helm search チャートを検索する

helmをインストールして実際に使ってみよう!

helmコマンドのバイナリをダウンロードし、helm initを実行することでコマンド・サーバの両方がインストールされます。
helmコマンドは下記サイトの各バージョンの「Installation and Upgrading」からダウンロードできます。自分のOSに合わせたバイナリをダウンロードします。
helm/release

Linuxであれば、このバイナリを下記パスに移動するだけで使えるようになります。

mv linux-amd64/helm /usr/local/bin/helm

最後にサーバをインストールします。

helm init

すでにインストール済みのサーバをアップデートするには、下記を実行します。

helm init --upgrade

少し古いバージョンだとKubernetes: パッケージマネージャHelmがたいへん詳しいです。

自作Chartの作り方

  • 次回!
Hiroyuki_OSAKI
Certified engineer (CKA/CKAD), Sr. researcher(@Hitachi / Hitachi America) K8s/Helm/OPA/GraphQL/Python/Rails/Node.js/golang/Android/Scratch ここに記載の内容はあくまで個人的見解であり会社を代表するものではありません。
hitachi-services-computing
様々なサービスやOSSを活用して新しいサービスを創生・開発・運用するための技術を研究開発しています
https://www.hitachi.co.jp/rd/index.html
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away