HelmのイントロダクションでmariaDBをインストールしてみた。【kubernetes】

kubernetes

kubernetesを使っているとアプリケーションを立ち上げるためにはPodやServiceやsvcなどをyaml形式で記載する必要があり、とても煩わしく感じます。

そのような煩わしさを解消するために、アプリケーションに必要なyamlファイル一式を取得してくれるパッケージマネージャー「Helm」というものがあるらしいです。
ということで、今回はHelmについて公式ページのイントロダクション using helmをやってみたのでご紹介いたします。

Using Helm
Explains the basics of Helm.

※kubernetes, Helmのインストールは本記事では解説していませんのでご注意ください。

Helmとは

Helmとはkubernetesのパッケージマネージャーで、RedHat系Linuxの「yum install パッケージ名」のようにコマンドでアプリケーションをインストールすることができます。

基本用語

用語説明
リポジトリチャートが保管されている場所
(Helm チャートの公式リポジトリ stable やその他企業が公開しているリポジトリなどたくさんある。)
チャート
     
helmのパッケージのことでアプリケーションのデプロイに必要なyamlファイルが纏った設計図。
リリースhelm installによってデプロイされたパッケージ。

プログラミングでいうと「クラス」=「チャート」、「インスタンス」=「リリース」というイメージらしいです。私はこの説明が最もしっくりきました。

前提条件

  • kubernetesがインストールされていること。
  • Helmがインストールされていること。

kubernetesとhelmのバージョンは以下の通りです。
※本検証環境は自宅サーバ上にkubernetesをインストールして実施しています。クラウド環境ではないです。

# kubectl version
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.2", GitCommit:"52c56ce7a8272c798dbc29846288d7cd9fbae032", GitTreeState:"clean", BuildDate:"2020-04-16T11:56:40Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.2", GitCommit:"52c56ce7a8272c798dbc29846288d7cd9fbae032", GitTreeState:"clean", BuildDate:"2020-04-16T11:48:36Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
# helm version
version.BuildInfo{Version:"v3.2.1", GitCommit:"fe51cd1e31e6a202cba7dead9552a6d418ded79a", GitTreeState:"clean", GoVersion:"go1.13.10"}

リポジトリからチャートの検索方法

HelmではチャートをKubernetesにインストールし、インストールごとに新しいリリースを作成します。 また、新しいチャートを見つけるには、Helmチャートのリポジトリを検索します。

検索方法には以下の2つのタイプがあります。

公開されている複数のリポジトリから検索(hub)

hubを用いた検索では数十以上の異なるリポジトリからHelmのチャートを見つけることができます。

# helm search hub wordpress
URL                                                     CHART VERSION   APP VERSION     DESCRIPTION
\https://hub.helm.sh/charts/presslabs/wordpress-...      0.9.1           0.9.1           Presslabs WordPress Operator Helm Chart
\https://hub.helm.sh/charts/presslabs/wordpress-...      v0.9.1          v0.9.1          A Helm chart for deploying a WordPress site on ...
\https://hub.helm.sh/charts/bitnami/wordpress            9.3.11          5.4.2           Web publishing platform for building blogs and ...

上記は、Helm hub上に存在するすべてのworpressのチャートを検索しています。フィルターが設定されていない場合は使用可能なすべてのチャートを表示します。

ローカルのリポジトリから検索(repo)

helm search repoは(helm repo addを使用して)ローカルのHelmに追加したリポジトリを検索します。 この検索はローカルデータ上で行われ、パブリックネットワークへの接続は必要ありません。

helm search repoを使用すると、すでに追加したリポジトリ内でチャートの名前を見つけることができます。

# helm search repo wordpress
NAME                    CHART VERSION   APP VERSION     DESCRIPTION
stable/wordpress        9.0.3           5.3.2           DEPRECATED Web publishing platform for building...

インストールするパッケージが見つかったら、helm installを使用してインストールできます。次は実際にパッケージをインストールしていきます。

パッケージのインストール

インストールコマンド

新しいパッケージをインストールするには、helm installコマンドを使用します。しかし、 その前にインストールされているパッケージがないことをhelm listコマンドで確認しておきましょう。

# helm list
NAME    NAMESPACE       REVISION        UPDATED STATUS  CHART   APP VERSION

helm installコマンドでは2つの引数を取ります。ユーザが設定するリリース名とインストールするチャートの名前です。例えば、stableリポジトリのmariadbをインストールするコマンドは以下のようになります。

# helm install happy-panda stable/mariadb
WARNING: This chart is deprecated
NAME: happy-panda
LAST DEPLOYED: Sun Jun 14 15:10:34 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
This Helm chart is deprecated

...

To connect to your database:

  1. Run a pod that you can use as a client:

      kubectl run happy-panda-mariadb-client --rm --tty -i --restart='Never' --image  docker.io/bitnami/mariadb:10.

  2. To connect to master service (read/write):

      mysql -h happy-panda-mariadb.default.svc.cluster.local -uroot -p my_database

  3. To connect to slave service (read-only):

      mysql -h happy-panda-mariadb-slave.default.svc.cluster.local -uroot -p my_database

To upgrade this helm chart:

  1. Obtain the password as described on the 'Administrator credentials' section and set the 'rootUser.password' pa

      ROOT_PASSWORD=$(kubectl get secret --namespace default happy-panda-mariadb -o jsonpath="{.data.mariadb-root-p
      helm upgrade happy-panda stable/mariadb --set rootUser.password=$ROOT_PASSWORD

これで、mariadbのチャートがインストールされました。 チャートをインストールすると、新しいリリースオブジェクトが作成されることに注意してください。 上記のリリースはhappy-pandaという名前です。 (Helm側で名前を勝手に決めて生成してほしい場合は、リリース名を省略して–generate-nameを使用します。)

多くのチャートでは600Mを超えるサイズのDockerイメージが必要であり、kubernetesクラスタへのインストールに長い時間かかる場合があります。

それでは実際にmariadbのチャートがインストールされたことを確認してみましょう。

# helm list
NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
happy-panda     default         1               2020-06-14 15:10:34.9103335 +0900 JST   deployed        mariadb-7.3.14  10.3.22

リリース名がhappy-pandaのリストがあれば、インストールされています。

パッケージのアップグレードとロールバック

チャートの新しいバージョンがリリースされたとき、またはリリースの構成を変更したいときは、helm upgradeコマンドを使用します。

アップグレードでは、既存のリリースを取得し、提供された情報に従ってアップグレードします。 まずは現在のリリースの設定情報を取得してみましょう。

# helm get values happy-panda
USER-SUPPLIED VALUES:

DBのユーザー名とパスワードを記載したhappy-panda.yamlを作成します。

# vi happy-panda.yaml
db:
  user: test
  password: Passw0rd

上記の場合、happy-pandaリリースは同じチャートでアップグレードされます。以下のコマンドでアップグレードします。

# helm upgrade -f happy-panda.yaml happy-panda stable/mariadb

helm get valuesを使用して、新しい設定が有効になったかどうかを確認します。

# helm get values happy-panda
USER-SUPPLIED VALUES:
db:
  password: Passw0rd
  user: test

helm getコマンドは、クラスター内のリリースを確認するのに役立つツールです。 上記はhappy-panda.yamlからの新しい値がkubernetesクラスターにデプロイされたことを示しています。

試しにmariadbにログインしてみます。まずは、クラスタのIPアドレスを確認します。

# kubectl get service
NAME                          TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
happy-panda-mariadb           ClusterIP   10.0.118.190           3306/TCP   90s
happy-panda-mariadb-slave     ClusterIP   10.0.130.75            3306/TCP   90s

mysqlコマンドで以下のようにログインすることができれば、デプロイ成功です。
※パスワードはインストール時に指定した「Pass0rd」となります。

$ mysql -u test -h 10.0.118.190 -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 32
Server version: 10.3.22-MariaDB-log Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

また、リリース時に予定どおりに機能しない場合は、helm rollback [リリース名] [リビジョン]を使用して前のリリースに簡単にロールバックできます。

# helm rollback happy-panda 1
Rollback was a success! Happy Helming!
# helm get values happy-panda
USER-SUPPLIED VALUES:
db:
  password: Passw0rd
  user: test
master:
  persistence:
    annotations:
      volume.kubernetes\.io/storage-class: nfs
    storageClass: nfs
slave:
  persistence:
    annotations:
      volume.kubernetes\.io/storage-class: nfs
    storageClass: nfs

上記は、happy-pandaを最初のリリースバージョンにロールバックします。 リリースのバージョンは増分リビジョンです。 インストール、アップグレード、またはロールバックが発生する度に、リビジョン番号は1ずつ増加します。最初のリビジョン番号は常に1です。helm history [リリース名]を使用して、特定のリリースのリビジョン番号を確認できます。

パッケージのアンインストール

kubernetesクラスターからリリースをアンインストールするときは、helm uninstallコマンドを使用します。

# helm uninstall happy-panda
release "happy-panda" uninstalled

これにより、リリースがクラスターから削除されます。 helm listコマンドを使用すると、happy-pandaリリースがアンインストールされたことがわかります。

# helm list
NAME                    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION

Helmの以前のバージョンでは、リリースが削除されるとその削除の記録が残りました。 Helm バージョン3では、削除によりリリースの履歴も削除されます。 削除後もリリースの履歴を保持する場合は、helm uninstall –keep-historyを使用します。 helm list –uninstalledを使用すると、–keep-historyフラグを使用したアンインストール済みのリリースのみが表示されます。

helm list –allは失敗または削除された履歴を含む(ただし–keep-historyが指定されている場合)、Helmが保持しているすべてのリリース履歴を表示します。

# helm list --all
NAME                    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION

リリースはデフォルトで削除されるようになったため、アンインストールされたリソースをロールバックすることはできなくなりました。

リポジトリの追加・一覧表示

Helm バージョン3には、デフォルトのチャートリポジトリが存在しなくなりました。 helm repoコマンドは、リポジトリを追加、一覧表示、および削除するコマンドを提供します。

helm repo listを使用して、設定されているリポジトリを確認できます。

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

また、helm repo addを使用して新しいリポジトリを追加できます。

helm repo add dev https://example.com/dev-charts

まとめ

kubernetesのパッケージマネージャー「Helm」を公式ページのイントロダクションに沿って実施してみました。kubernetesで煩わしかったpod, service, svcなどのyamlファイルからはかなり解放されるのではないかと思いました。

次回はチャートのデフォルトオプション設定の見方やカスタマイズの仕方を記事にしたいと思います。

参考にさせていただいたURL

Using Helm
Explains the basics of Helm.
Helmの概要とChart(チャート)の作り方 - Qiita
記事の内容この記事では、 Helm Chart(チャート)を作るというゴールに向けて、以下のことを説明します。Helm自体の概説 (前半)Helmチャートの作り方 (後半)この記事の作成に至…
helmとは & helmの使い方 - Qiita
helmとは Helm(以降Helm)とはKubernetesのパッケージマネージャーです。HelmはKu…
Helmの使い方を3分で理解する - Qiita
Kubernetesクラスタに Helmを使ったセットアップが増えているように思います。そこで、Helmコマンドの基本的な使い方を整理しました。Helmの3大コンセプトHelmは、以下の3点を押…
helmを使ってKubernetesを楽にする - Qiita
1.helmとは。基本的な使い方helmとは:KubernetesでつらいYAML地獄を脱却するYAML生成ツールKubernetesのつらさKubernetesでは、PodやServiceと…

コメント

タイトルとURLをコピーしました