1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【IBM Cloud】Helm チャートを使用してアプリケーションをデプロイしてみた

Last updated at Posted at 2023-01-31

はじめに

今回はIBM Cloud上のKuberenetes環境でHelmを使ってアプリケーションをデプロイする流れを整理します。
Kubernetesを使用したことがない方や、これから勉強される初心者の方向けの基礎的な内容です。
全体的な流れを記述するとともに、問題なくアプリケーションがデプロイされたことを確認することが目的です。

前提条件

・今回の内容にはIBM Cloudのアカウント(無料利用可能)が前提となっています。
・この記事でのコマンドは全てMacOS向けとなっています。

Helmについて

ㅇㅇㅇ.png

Helmは公式HPにも記載されているとおり、「Kubernetesパッケージ管理」をサポートするツールです。
Kubernetesでのアプリケーション・リソースをパッケージングし、それを「Chart(チャート)」という一つのパッケージとしてKuberenetesクラスターに配布するツールとなります。

Kubernetes環境の構築

今回Kubernetes環境はIBM CloudのKubernetesソリューションである、「IBM Cloud Kubernetes Service(IKS)」のクラシック環境を使用します。

IBM Cloudコンソールのナビゲーション・メニューでKubernetesクラスターをクリックします。
スクリーンショット 2023-01-27 14.21.22.png

右上のクラスターの作成をクリックします。
スクリーンショット 2023-01-27 14.21.40.png

今回はクラシック環境で、東京リージョンでの最小限構成で作成しました。
FireShot Capture 066 - クラスターの作成 - IBM Cloud - cloud.ibm.com.png
スクリーンショット 2023-01-27 16.27.20.png

無料枠も利用可能ですので、もし無料で試してみたい方は、料金プランを無料に変更し、適切なクラスター名を設定して環境を作成してください。
FireShot Capture 065 - クラスターの作成 - IBM Cloud - cloud.ibm.com.png

クラスターの一覧で作成したクラスターに入ると、以下の画面が表示されます。
なお、クラスター作成時には多少の時間がかかる可能性があります。Statusが「正常」になっていることを確認してください。
(もしErrorなどが発生した場合には、IBM Cloud Docsを参照ください。)
スクリーンショット 2023-01-27 14.32.12.png
スクリーンショット 2023-01-27 14.33.20.png

なお、コンソールではなくコマンドでもKubernetes環境を立ち上げる方法については、過去の記事を参考にしてください。

これでKuberenetes環境の立ち上げは完了です。

アプリケーションデプロイの流れ

Helmのインストール

まず、Helmがインストールされていない場合には、手順に従って自分のPCなどの開発環境にHelmをインストールします。
Helmはv3.0.2以上であることを確認します。(2024/12/18現在、v3.16.4です。)

インストールが完了したら、コマンドにてHelmのバージョンを確認します。

Helmのバージョン確認
helm version
Helmのバージョン確認結果
version.BuildInfo{Version:"v3.16.4", GitCommit:"472c5736ab01133de504a826bd9ee12cbe4e7904", GitTreeState:"clean", GoVersion:"go1.18.10"}

IBM Cloudにログイン

IBM Cloudにログインします。ログインはCLIを使用したワンタイム・パスコードを利用すると便利です。
右上のプロフィールアイコンをクリックし、CLIとAPIにログインをクリックしますと、以下のログインCLIが表示されます。
IBM Cloud CLIをコピーしコマンド入力にてログインを行います。
スクリーンショット 2023-01-27 14.52.45.png
スクリーンショット 2023-01-27 14.52.54.png

Kubernetesクラスター指定

今回アプリケーションをデプロイするクラスターを指定します。
Kubernetesの環境を設定するには、exportコマンドが必要です。exportコマンドは、ibmcloud ks cluster configコマンドを入力して取得します。
なお、クラスターIDはクラスター画面に表示されています。

クラスター環境指定
ibmcloud ks cluster config --cluster <cluster-id>
クラスター環境指定の結果
<cluster-id> のコンテキストを現在の kubeconfig ファイルに追加しました。
これで、クラスターに対して「kubectl」コマンドを実行できます。 例えば、「kubectl get nodes」を実行します。
クラスターに初めてアクセスする場合、RBAC の同期中に「kubectl」コマンドが数秒間失敗することがあります。

スクリーンショット 2023-01-27 15.05.19.png

Helmを使用してデプロイするアプリケーションのクローン

今回Helmチャートを使用してデプロイするアプリケーションは「JpetStore」アプリケーションです。
「JpetStore」は簡潔なECサイト機能を含んでいるサンプルアプリケーションです。

Gitコマンドを使って、JpetStoreリポジトリをクローンします。

JpetStoreリポジトリをクローン
git clone https://github.com/ibm-cloud-labs/jpetstore-kubernetes-compact.git --depth 1

「JpetStore」アプリケーションをデプロイします。
なお、デプロイはjpetstore-kubernetes-compact/helmディレクトリで操作します。

JpetStoreアプリケーションのデプロイ
cd ../helm
helm install jpetstore ./modernpets/
JpetStoreアプリケーションのデプロイ結果
NAME: jpetstore
LAST DEPLOYED: Fri Jan 27 15:57:43 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Get Cluster Public IP Adress:
$ ibmcloud ks workers mycluster

デプロイの確認を行います。

デプロイの確認
helm list
デプロイの確認結果
NAME     	NAMESPACE	REVISION	UPDATED                             	STATUS  	CHART           	APP VERSION
jpetstore	default  	1       	2023-01-26 19:03:06.402354 +0900 JST	deployed	modernpets-0.1.5	1.0    

デプロイされたPodsも確認します。

デプロイのPods確認
kubectl get pods
デプロイのPods確認結果(例)
NAME                                                 READY   STATUS    RESTARTS   AGE
jpetstore-modernpets-jpetstoredb-54644d98f5-lgwfr    1/1     Running   0          117s
jpetstore-modernpets-jpetstoreweb-68f5bd5d79-6bhnt   1/1     Running   0          117s
jpetstore-modernpets-jpetstoreweb-68f5bd5d79-lzbjl   1/1     Running   0          117s

上記出力から、Webコンテナ(jpetstoreweb)のPodsが2つ,DBコンテナ(jpetstoredb)のPodsが1つがデプロイされていることが分かります。

DeploymentやServiceについても確認します。

DeploymentとServiceの確認
kubectl  get all
DeploymentとServiceの確認結果
NAME                                                 READY   STATUS    RESTARTS   AGE
jpetstore-modernpets-jpetstoredb-54644d98f5-lgwfr    1/1     Running   0          117s
jpetstore-modernpets-jpetstoreweb-68f5bd5d79-6bhnt   1/1     Running   0          117s
jpetstore-modernpets-jpetstoreweb-68f5bd5d79-lzbjl   1/1     Running   0          117s
sungyunmoon@SungyunnoMacBook-Pro helm % kubectl  get all
NAME                                                     READY   STATUS    RESTARTS   AGE
pod/jpetstore-modernpets-jpetstoredb-54644d98f5-lgwfr    1/1     Running   0          2m33s
pod/jpetstore-modernpets-jpetstoreweb-68f5bd5d79-6bhnt   1/1     Running   0          2m33s
pod/jpetstore-modernpets-jpetstoreweb-68f5bd5d79-lzbjl   1/1     Running   0          2m33s

NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
service/db           ClusterIP   172.21.198.176   <none>        3306/TCP       2m33s
service/kubernetes   ClusterIP   172.21.0.1       <none>        443/TCP        15m
service/web          NodePort    172.21.67.242    <none>        80:31000/TCP   2m33s

NAME                                                READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/jpetstore-modernpets-jpetstoredb    1/1     1            1           2m33s
deployment.apps/jpetstore-modernpets-jpetstoreweb   2/2     2            2           2m33s

NAME                                                           DESIRED   CURRENT   READY   AGE
replicaset.apps/jpetstore-modernpets-jpetstoredb-54644d98f5    1         1         1       2m33s
replicaset.apps/jpetstore-modernpets-jpetstoreweb-68f5bd5d79   2         2         2       2m33s

ブラウザーでのアプリケーションの確認

アプリケーションのデプロイが完了すると、次はブラウザーでの状態を確認します。現在「Jpetstore」アプリケーションは、Kubernetesクラスター上で動作していて、インターネットに公開されている状態です。
確認のために、ワーカーノードのパブリックIPアドレス(Public IP)とノードポートを取得します。

パブリックIPアドレスの取得
ibmcloud ks worker ls --cluster <cluster-id>
パブリックIPアドレスの取得結果
OK
ID                                                       パブリック IP    プライベート IP   フレーバー          状態     状況    ゾーン   バージョン   
kube-cf9n2nnt0ven2m0lmlqg-moonmyclust-default-0000019d   169.56.0.231     10.132.238.120    u3c.2x4.encrypted   normal   Ready   tok02    1.25.5_1528   
kube-cf9n2nnt0ven2m0lmlqg-moonmyclust-default-00000280   165.192.80.43    10.193.189.3      u3c.2x4.encrypted   normal   Ready   tok05    1.25.5_1528   
kube-cf9n2nnt0ven2m0lmlqg-moonmyclust-default-0000033b   128.168.82.163   10.192.64.52      u3c.2x4.encrypted   normal   Ready   tok04    1.25.5_1528 
ノードポートの取得
kubectl get service
ノードポートの取得の結果
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
db           ClusterIP   172.21.198.176   <none>        3306/TCP       13m
kubernetes   ClusterIP   172.21.0.1       <none>        443/TCP        26m
web          NodePort    172.21.67.242    <none>        80:31000/TCP   13m

ブラウザでPublic IP:NodePortを開きます。
今回の場合のPublic IP:NodePortは以下の通りです。

  • Public IP: 169.56.0.231 (3つとも可能ですが、今回は1行目のIPアドレスを使用します。)
  • NodePort: 31000

つまり、「169.56.0.231:31000」 にアクセスするとアプリケーションが開きます。画面は以下のようになります。
スクリーンショット 2023-01-27 16.15.36.png

カテゴリーをクリックして情報を確認したり、右上の検索欄なども使えるので、一度いじりながら確認してみてください。

Kubernetesダッシュボードの確認

最初に立ち上げたKubernetesに入り、ダッシュボードを確認してみます。
右上のKubernetesダッシュボードをクリックしアクセスします。
スクリーンショット 2023-01-27 14.33.20.png

ダッシュボードに入りますと、先ほどデプロイしたアプリケーションの情報が記載されていることがわかります。
ワークロードのStatusやCPUとメモリーの使用量など、クラスター情報が見やすくなっているので確認してみてください。
スクリーンショット 2023-01-27 16.18.51.png
スクリーンショット 2023-01-27 16.19.01.png

最後に

今回はIBM Cloud上にKubernetesクラスターを立ち上げ、Helmを利用したサンプルアプリケーションのデプロイを実施しました。
前回の記事ではサンプルアプリケーションとしてguestbookを使用してデプロイしたことがありますが、Helmを使用することによってより簡単にデプロイができちゃうことがわかりました。
ただ、Kubernetesダッシュボードの操作法などはまだまだ勉強が必要であるため、今後も引き続きスキルを身につけ、記事を投稿していきたいと思います。

注意点

  1. このアカウントではディスカウントが適用されているため、表示価格が通常の定価と異なる場合があります。
  2. 料金はドル-円為替レートに基づいて課金されるため、同じサービスでも料金の変動があります。
  3. Qiita記事作成にあたり、環境の時間軸の前後やインスタンス名の違いなどがあります。

参考

【IBM Cloud】 IBM Open Labs上のKubernetesでアプリをデプロイしてみた
IBM Cloud Docs - IBM Cloud Kubernetes Service
Helm HP

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?