前回は、k8s構築ツールの1つとしてRancherを紹介しました。

今回はHelmについて紹介します。併せてYAML編集のためのツール(Visual Studio CodeのKubernetesプラグイン)も紹介していきます。

表:Kubernetesの3つのユースケース(第3回の再掲) 

Helm

「YAMLの壁」と呼ばれ、Kubernetesを構築する際に数々のyamlファイルを作成しなければならないことを指します。Webアプリケーションで言えば、StrutsやSpringフレームワークが流行した際に数々のxmlファイルを作成しなければならなかった「XML地獄」と状況が似ています。

HelmはKubernetesのパッケージマネージャです。パッケージマネージャと聞くと、MacのHomebrewやLinuxのapt・rpm・yumなどを連想する方もいらっしゃることでしょう。HelmにおけるパッケージとはKubernetesを構築する際必要なリソース群(PodやServiceなど)をChartとしてひとまとめにしたものです。

つまり、各種リソース群を個別にyamlファイルで構築するのではなく、ひとまとめにして構築できるようにします。

図:Helmの構成

早速、インストール方法を見てみましょう。Homebrewを使ってHelmクライアント(helmコマンド)をインストールします。インストールが終わったら、Helm Chartと呼ばれるパッケージのリポジトリをアップデートしておきます。

$brew install kubernetes-helm

~中略~

==> Downloading https://homebrew.bintray.com/bottles/kubernetes-helm-2.15.2.mojave.bottle.tar.gz
==> Downloading from
https://akamai.bintray.com/af/af96fbedc19ad56994180843cda30829ce14c83b556531b8089b9c5783531fe2?__gda__=ex
################################################ 100.0%
==> Pouring kubernetes-helm-2.15.2.mojave.bottle.tar.gz
==> Caveats
Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

zsh completions have been installed to:
  /usr/local/share/zsh/site-functions
==> Summary
  /usr/local/Cellar/kubernetes-helm/2.15.2: 51 files, 85.1MB
$helm repo update
Hang tight while we grab the latest from your chart repositories...
...Skip local chart repository
...Successfully got an update from the "rancher-server" chart repository
...Successfully got an update from the "bitnami" chart repository
...Successfully got an update from the "stable" chart repository
Update Complete.

HelmはTillerを介して各種リソースを構築します。helm initによりインストールします。

$helm init
$HELM_HOME has been configured at /Users/yujishono/.helm.

Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.

Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
To prevent this, run `helm init` with the --tiller-tls-verify flag.
For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation

リポジトリからインストールしたいHelm Chartを検索することができます。例えばJenkinsの場合以下の通りです。

$helm search jenkins
NAME            CHART VERSION   APP VERSION DESCRIPTION
bitnami/jenkins 3.4.9           2.190.2     The leading open source automation server
stable/jenkins  1.8.1           lts         Open source continuous integration server. It supports mu...

Jenkinsをインストールする際に、Helm Chartに与える設定値を記載するためのYAMLをダウンロードします。

$wget https://raw.githubusercontent.com/helm/charts/master/stable/jenkins/values.yaml

helmコマンドを使ってJenkinsをインストールします。RESOURCES以下を見ると、PodやDeploymentなど必要なk8sリソースが作成されていることがわかります。

helm install stable/jenkins
NAME:   quoting-rattlesnake
LAST DEPLOYED: Wed Nov  6 10:18:06 2019
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1/ConfigMap
NAME                               DATA  AGE
quoting-rattlesnake-jenkins        5     1s
quoting-rattlesnake-jenkins-tests  1     1s

==> v1/Deployment
NAME                         READY  UP-TO-DATE  AVAILABLE  AGE
quoting-rattlesnake-jenkins  0/1    1           0          1s

==> v1/PersistentVolumeClaim
NAME                         STATUS  VOLUME                                    CAPACITY  ACCESS MODES  STORAGECLASS  AGE
quoting-rattlesnake-jenkins  Bound   pvc-d1fbc912-975b-493c-8160-3623cab6012a  8Gi       RWO           standard      1s  Filesystem

==> v1/Pod(related)
NAME                                          READY  STATUS   RESTARTS  AGE
quoting-rattlesnake-jenkins-6f4c8db6c9-bkwtr  0/1    Pending  0         1s

==> v1/Role
NAME                                         AGE
quoting-rattlesnake-jenkins-schedule-agents  1s

==> v1/RoleBinding
NAME                                         AGE
quoting-rattlesnake-jenkins-schedule-agents  1s

==> v1/Secret
NAME                         TYPE    DATA  AGE
quoting-rattlesnake-jenkins  Opaque  2     1s

==> v1/Service
NAME                               TYPE          CLUSTER-IP      EXTERNAL-IP  PORT(S)         AGE
quoting-rattlesnake-jenkins        LoadBalancer  10.101.223.221  <pending>    8080:31465/TCP  1s
quoting-rattlesnake-jenkins-agent  ClusterIP     10.105.216.164  <none>       50000/TCP       1s

==> v1/ServiceAccount
NAME                         SECRETS  AGE
quoting-rattlesnake-jenkins  1        1s

Visual Studio Code Kubernetes Tools

これまでの連載では、YAMLファイルの編集はviを中心に紹介してきましたが、Visual Studio Codeの拡張機能として、Visual Studio Code Kubernetes Toolsを紹介します。 [Code]-[Services]-[Extensions]から開いた画面において、下図の通り[kubernetes]で検索しインストールします。

図:Visual Studio Code

以下の通り、[kind]や[image]といった予約語や、[hello1]や[helloworld]といった値がサジェストされますので、スペルミスなどが無くなり単純ミスによる手戻り防止につながります。

図:値のサジェスト

まとめ

今回は、k8sを簡単に使いこなす手段としてHelmを紹介しました。また、Visual Studio Code Kubernetes Toolsを使ったYAML編集方法も紹介しました。

次回は、KubesprayなどRancher/Helm以外の構築ツールを紹介していきます。

著者紹介


正野 勇嗣 (SHONO Yuji ) - NTTデータ 課長

2011年まで開発自動化技術のR&Dに従事。その後、開発プロジェクト支援やトラブルシューティング等に主戦場を移す。「ソースコード自動生成」に加えて、JenkinsやMaven等の「ビルド自動化」、JsTestDriverやSelenium等の「テスト自動化」を扱うようになり、多様化する開発自動化技術動向に興味。

最近は第四の自動化であるInfrastructure as Code等の「基盤自動化」の魅力に惹かれている。開発自動化技術に関する雑誌・記事執筆も行う。3児のパパ。