マイナビニュースマイナビ

k8s構築ツールの選択肢「Helm」

【連載】

Kubernetes入門

【第12回】k8s構築ツールの選択肢「Helm」

[2020/02/25 09:00]正野 勇嗣 ブックマーク ブックマーク

前回は、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児のパパ。

※ 本記事は掲載時点の情報であり、最新のものとは異なる場合がございます。予めご了承ください。

一覧はこちら

連載目次

もっと知りたい!こちらもオススメ

「フロントローディング」は、製品開発をどう変えるか

「フロントローディング」は、製品開発をどう変えるか

仮想的に施策評価が行うCAEが開発工程で導入されたことで、「解析」に要する期間やコストは大幅に圧縮された。しかし、多大なコストと期間を生じさせる「設計変更」の数を減らさなければ、開発プロセスは劇的には変わらない。ここでは、開発設計の初期にあたる基本設計段階からCAEを用いた解析を行う「フロントローディング」を取り上げ、開発プロセスの改善策を提示する。

関連リンク

この記事に興味を持ったら"いいね!"を Click
Facebook で TECH+ の人気記事をお届けします
注目の特集/連載
[解説動画] Googleアナリティクス分析&活用講座 - Webサイト改善の正しい考え方
Google Workspaceをビジネスで活用する
ニューノーマル時代のオウンドメディア戦略
ミッションステートメント
教えてカナコさん! これならわかるAI入門
AWSではじめる機械学習 ~サービスを知り、実装を学ぶ~
Kubernetes入門
SAFeでつくる「DXに強い組織」~企業の課題を解決する13のアプローチ~
AWSで作るマイクロサービス
マイナビニュース スペシャルセミナー 講演レポート/当日講演資料 まとめ
セキュリティアワード特設ページ

一覧はこちら

今注目のIT用語の意味を事典でチェック!

一覧はこちら

会員登録(無料)

ページの先頭に戻る