3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【k8s】Kubernetes Helmでnginxを起動してみよう!

Posted at

概要

k8sを使用した開発なり運用なりしていると、yamlファイルをとにかく
書きまくります!

podのyaml書いて、ServiceやDeploymentも同様に・・・。
もう少し簡単にk8sを使い倒すためのツールとして、Helmというものがあります。

Helmとは?

Kubernetes(以下k8s)のパッケージマネージャーで、
k8sリソースを簡単にデプロイ・管理できるツールを指します!

k8sリソース例

  • pod
  • Deployment
  • Service
  • ConfigMap
    etc

Helmの構成

さてHelmを使用するにあたり、登場人物が多いので軽く記載しておきます!

  • context: 操作対象のk8sクラスタを設定します(今回はdocker-desktopを使用)
  • tiller: helmコマンドから命令を受け取り、k8sクラスタにデプロイします
  • Chart: k8sアプリのパッケージ
  • Helm Repository: ざっくり言うと、Chartを保存する場所を指します

今回はBitnamiが提供する、NginxのHelm Cahrtを使用します!

ハンズオン

今回はk8sにnginxをデプロイし、PCのローカルで起動することをゴールにします!
Helmのインストールから実施していきます。

前提

  • 今回はDocker Desktopを使用します
  • 筆者はMac PCを使用します
  • Windowsの方もDocker Desktopは使用できますので、下記記事を参考に構築いただけますと!

余談ですが、この記事によると以前みたいに
WSL2のセットアップが不要なんですね・・・!

Docker Desktopをインストール

まず公式からインストールをお願いします!

k8sを有効化

お馴染みですが、デフォルト設定ではk8sは有効になってないので
Docker Desktopの設定からk8sの有効化をお願いします!

手順

  1. Docker Desktopを開く
  2. Settings(設定) > Kubernetes
  3. 「Enable Kubernetes」 にチェックを入れる
  4. 「Apply & Restart」 を押す

スクリーンショット 2025-03-09 1.06.18.png

kubectlのインストール

まだインストールしていない方は、Homebrewを使用して
準備をお願いします!

Homebrewはこちら

kubectlのインストール

$ brew install kubectl
$ kubectl version

kubectlのインストール後、コンテキスト設定

$ kubectl config get-contexts
CURRENT   NAME                  CLUSTER               AUTHINFO              NAMESPACE
*         docker-desktop        docker-desktop        docker-desktop

CURRENTがdocker-desktopになっていなかった場合、
docker-desktopに切り替えましょう!

$ kubectl config use-context docker-desktop
Switched to context "docker-desktop".

Helmのインストール

ようやくHelmの設定になります。
まずはインストールしましょう!

$ brew install kubernetes-helm
$ helm version

インストールしたらまずはアップデート

$ helm repo update

HelmでNginxをデプロイしよう!

まずは公式リポジトリ(Bitnami)を入れましょう!

$ helm repo add bitnami https://charts.bitnami.com/bitnami
$ helm repo update

一応リポジトリを更新しておきます。。

$ helm repo update

ちなみに登録可能なリポジトリを一覧化できます!

$ helm repo list
NAME                	URL
prometheus-community	https://prometheus-community.github.io/helm-charts
bitnami             	https://charts.bitnami.com/bitnami

Chartを検索!

次に利用可能なChartを検索します!

$ helm search repo nginx
NAME                                          	CHART VERSION	APP VERSION	DESCRIPTION
bitnami/nginx                                 	19.0.1       	1.27.4     	NGINX Open Source is a web server that can be a...
bitnami/nginx-ingress-controller              	11.6.11      	1.12.0     	NGINX Ingress Controller is an Ingress controll...
bitnami/nginx-intel                           	2.1.15       	0.4.9      	DEPRECATED NGINX Open Source for Intel is a lig...
prometheus-community/prometheus-nginx-exporter	1.0.1        	1.4.1      	A Helm chart for NGINX Prometheus Exporter

bitnamiのリポジトリを加えたことで、
nginxのChartが使えるみたいですね!

Chartをインストール!

$ helm install my-nginx bitnami/nginx

こんな感じでnginxのChartをk8sにインストールできます!
my-nginxの箇所は任意の名前にご変更ください!

これでNginxをk8sにデプロイできました!
ここからはPCで起動していきましょう!

Nginxを起動しよう!

まずはデプロイが正しくされたか確認しましょう!
(STATUSがRunningになるまで時間がかかるかもしれません)

$ kubectl get pods
NAME                        READY   STATUS    RESTARTS   AGE
my-nginx-5b5586f6df-ddh7v   1/1     Running   0          44m
$ kubectl get svc
NAME         TYPE           CLUSTER-IP   EXTERNAL-IP   PORT(S)                      AGE
my-nginx     ClusterIP   10.97.0.86   localhost     80:30657/TCP,443:32451/TCP   45m

svc(サービス)の情報を確認し、
EXTERNAL-IPlocalhostがあればOK!

ローカルでNginxにアクセス!

ではアクセスしましょう!
svc/my-nginxはサービス名です

$ kubectl port-forward svc/my-nginx 8080:80

これで、http://localhost:8080 にアクセスすれば、
Nginxのページが見えるはず!

スクリーンショット 2025-03-09 1.25.47.png

port-forwardとは?

ちなみにport-forwardしないとk8sのServiceには
アクセスできません!

そのためのport-forwardです!

なぜアクセスできないのか?

結論
デフォルトでは、k8sのService(ClusterIP)は
クラスタ内部でしかアクセスできないから!

Service情報を確認!

もう一度k8sにデプロイされたServiceを見てみましょう。

$ kubectl get svc
NAME         TYPE           CLUSTER-IP   EXTERNAL-IP   PORT(S)                      AGE
my-nginx     ClusterIP   10.97.0.86   localhost     80:30657/TCP,443:32451/TCP   45m

TYPEがClusterIPになっているのがお分かりでしょうか?
http://localhost:8080 へのアクセスはローカルPCから実施しています。

しかしClusterIPとして作成されたServiceに対しては、
k8sの同じクラスタからしかアクセス出来ません。

整理しよう!

  • デフォルトでは、Service は ClusterIP として作成される
  • ClusterIP の場合、クラスタ内部のPodやServiceからしかアクセスできない
  • 外部(ローカルPCやインターネット)からは直接アクセスできない!

port-forwardの役割

kubectl port-forward を使うと、ローカルPCのポート(例:8080)と
k8s内のPod・Serviceのポート(例:80)を トンネリング できる。

今回のケース↓

$ kubectl port-forward svc/my-nginx 8080:80

これでローカルPCの8080ポートを、クラスタ内部の
my-nginx Serviceに接続できます!

port-forwardなしで外部からアクセスする方法も
ありますが、ここでは割愛します。

下記記事がとても参考になりそうなので、
貼っておきます!

お片付け

デプロイされたNginxやk8sリソースを削除しましょう。

Helmリソース削除

$ helm uninstall my-nginx
  • my-nginx は、インストール時に指定したリリース名
  • 上記コマンドで、Helmによってインストールされたリソース(Pod、Serviceなど)が全て削除されます

Helmリポジトリの削除

Helmリポジトリを削除するには、helm repo remove コマンドを使います。

helm repo remove <リポジトリ名>

例:Bitnamiリポジトリを削除したい場合

helm repo remove bitnami

これで、Helmリポジトリが削除されます!

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?