こんにちは。KOUKIです。
とある企業でWebエンジニアをやっています。
最近はDevOpsが流行ってきており、Kubernetesなどのコンテナオーケストレーションツールが流行ってきてます(もう何年も前から!)。
私もKubernetesに触り始めており、その過程でHelmを知りました。
本記事では、初学者向け(というか私もそうなのですが)にわかりやすくHelmを解説していこうと思います。
Helmとは
Helmは、Kubernetes用のパッケージマネージャーです。
Linuxのyum, Pythonのpipなどをイメージしてもらえればわかりやすいと思います。
Kubernetsのリソース(ServiceやDeploymentなど)をチャートで管理し、クラスタ内へのinstall/uninstallなどの作業を簡素化させたり、バージョンの管理、共有、公開を簡単にしてくれるようです。ちなみにGo言語で実装されています(やったね!)。
言葉だけの説明だとイメージが沸きにくいと思うので、ハンズオン形式で説明していきたいと思います。
Helmのインストール
まずは、公式サイトを確認しながらHelmをローカルにインストールしましょう。
私は、Macなのでbrewでインストールします。
1 2 3 4 |
brew install helm $ helm version version.BuildInfo{Version:"v3.7.1", GitCommit:"1d11fcb5d3f3bf00dbe6fe31b8412839a96b3dc4", GitTreeState:"clean", GoVersion:"go1.17.2"} |
HelmのVersionは3です。
Minikubeの用意
Minikubeを使ってKubernetsクラスタを構築したいと思います。
私は、Macなのでbrewでインストールしてます。
1 |
brew install minikube |
以下の記事も参考にしてください。
Nginx Chart
繰り返しになりますが、Helmはチャート単位でリソースを管理します。
NginxのChartを通じて、作業のやり方を学んでいきましょう。
chart repositoryを追加する
NginxのChartをクラスターにインストールするためには、まずはレポジトリをインストールする必要があります。
その為に、Artifact HubからNginxで検索をかけて該当するリポジトリを探します。

リポジトリを確認できたら下記のコマンドで、ローカルにインストールします。
1 2 3 4 5 6 7 |
# リポジトリを追加 $ helm repo add bitnami https://charts.bitnami.com/bitnami # 追加を確認 $ helm repo list NAME URL bitnami https://charts.bitnami.com/bitnami |
Nginxをインストールする
nginxのリポジトリを追加できたので、helmを使ってnginxをインストールしましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# nginxを探す $ helm search repo nginx NAME CHART VERSION APP VERSION DESCRIPTION bitnami/nginx 9.5.13 1.21.4 Chart for the nginx server bitnami/nginx-ingress-controller 9.0.6 1.0.5 Chart for the nginx Ingress controller bitnami/kong 4.1.9 2.6.0 Kong is a scalable, open source API layer (aka ... # コンテキストの現在のNAMESPACEを確認 $ kubectl config get-contexts CURRENT NAME CLUSTER AUTHINFO NAMESPACE * minikube minikube minikube default # namespaceを作成 $ kubectl create ns web namespace/web created # web NAMESPACEに変更 $ kubectl config set-context --current --namespace=web Context "minikube" modified. # 変更確認 $ kubectl config get-contexts CURRENT NAME CLUSTER AUTHINFO NAMESPACE * minikube minikube minikube web # nginxのバージョン確認 $ helm search repo --versions "nginx server" NAME CHART VERSION APP VERSION DESCRIPTION bitnami/nginx 9.5.13 1.21.4 Chart for the nginx server # install $ helm install nginx01 bitnami/nginx NAME: nginx01 LAST DEPLOYED: Sat Nov 20 11:48:27 2021 NAMESPACE: web STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: CHART NAME: nginx CHART VERSION: 9.5.13 APP VERSION: 1.21.4 ... # 確認 $ kubectl get all -n web NAME READY STATUS RESTARTS AGE pod/nginx01-76dc6d5c5d-sz9sp 1/1 Running 0 46s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/nginx01 LoadBalancer 10.101.65.103 <pending> 80:30428/TCP 46s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/nginx01 1/1 1 1 46s NAME DESIRED CURRENT READY AGE replicaset.apps/nginx01-76dc6d5c5d 1 1 1 46s |
お分かりいただけたでしょうか。簡単にNginxをインストールすることができました。
途中でwebネームスペースを作成し、default -> webにデフォルトのネームスペースを移すコマンドなども実行してますが、めんどくさかったらそのままhelm installしてください(笑)。
下記のコマンドで、URLをGetしましょう。
1 2 |
$ minikube service -n web --url nginx01 http://192.168.59.101:30428 |
ブラウザから「http://192.168.59.101:30428/」にアクセスします。

Nginxをアンインストールする
Nginxのアンインストールも簡単です。
1 2 3 4 5 6 |
# uninstall $ helm uninstall nginx01 release "nginx01" uninstalled $ kubectl get all -n web No resources found in web namespace. |
Nginxコンテナにログインする
今度はバージョン指定で、nginxをインストールします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ helm install nginx02 --version 9.3.5 -n default bitnami/nginx $ kubectl get all -n default NAME READY STATUS RESTARTS AGE pod/nginx02-57696bd848-5g6pp 0/1 Running 0 26s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 28h service/nginx02 LoadBalancer 10.103.150.181 <pending> 80:31099/TCP 27s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/nginx02 0/1 1 0 27s NAME DESIRED CURRENT READY AGE replicaset.apps/nginx02-57696bd848 1 1 0 27s |
このnginxにログインしてみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# nginxのNAMEを調べる $ kubectl get pods -n default NAME READY STATUS RESTARTS AGE nginx02-57696bd848-5g6pp 1/1 Running 0 # nginxにログイン $ kubectl -n default exec -it nginx02-57696bd848-5g6pp bash kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead. # versionを確認 I have no name!@nginx02-57696bd848-5g6pp:/app$ nginx -v nginx version: nginx/1.21.0 # nginixから抜ける exit |
Helm Chartのカスタマイズ
以下のコマンドで、NginxのServiceやPortが確認できます。
1 2 3 |
$ kubectl get svc -n default NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx02 LoadBalancer 10.103.150.181 <pending> 80:31099/TCP 5m1s |
LoadBalancerと80番ポートを使ってますね。
この値は、Traffic Exposure parametersによって定義されています。
Name | Description | Value |
---|---|---|
service.type | Service type | LoadBalancer |
service.port | Service HTTP port | 80 |
実は、カスタマイズ(値の上書き)が可能です。
1 |
touch values.yaml |
1 2 3 |
# values.yaml service: type: NodePort |
上記では、サービスをNodePortに変更しています。「serviceタグのtype」なので、yamlにそのように記載しています。
コマンドからも指定することが可能です。
1 2 3 |
# --valueでファイルを指定 # --setで直接値の上書きが可能 $ helm install nginx03 --values values.yaml --set service.port=8080 bitnami/nginx |
1 2 3 4 |
$ kubectl get svc -n default NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx02 LoadBalancer 10.103.150.181 <pending> 80:31099/TCP 12m nginx03 NodePort 10.105.213.163 <none> 8080:30587/TCP 80ss |
nginx03のServiceとPortに注目してください!
リスト表示
Helmでいくつもインストールしていると訳分からなくなりますよね。
そんな時は、リストで表示してみましょう。
1 2 3 4 |
$ helm list --all-namespaces NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION nginx02 default 1 2021-11-21 10:02:09.72942 +0900 JST deployed nginx-9.3.5 1.21.0 nginx03 default 1 2021-11-21 10:13:43.759587 +0900 JST deployed nginx-9.5.13 1.21.4 |
現在、nginx02とnginx03がインストールされていることがわかります。
Nginxのアップグレード
実は、アップグレードもできます。
1 2 3 4 5 6 |
$ helm upgrade nginx03 --set service.type=LoadBalancer --set service.port=80 bitnami/nginx $ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx02 LoadBalancer 10.103.150.181 <pending> 80:31099/TCP 19m nginx03 LoadBalancer 10.105.213.163 <pending> 80:30587/TCP 7m43s |
OKですね。
Clearn up
最後に、Clean UPして終わりにしましょう。
1 2 3 |
$ helm uninstall nginx02 nginx03 -n default release "nginx02" uninstalled release "nginx03" uninstalled |
次回
次回も引き続き、Helmの検証やテスト方法を学びましょう。
コメントを残す
コメントを投稿するにはログインしてください。