Kubernetes上でNode.jsアプリケーションとMongoDBをHelmを使ってデプロイする方法を、完全かつ包括的に解説します。この記事では、KubernetesとHelmの基本的な概念から、実際にNode.jsとMongoDBをHelmでデプロイする手順まで詳しく説明します。
必要な前提条件
この記事を進める前に、以下の環境が整っていることを確認してください。

-
Kubernetesクラスタ:Kubernetesクラスターがセットアップされていること。Minikubeなどを使用してローカルでKubernetesを実行することも可能です。
-
Helmのインストール:HelmはKubernetes向けのパッケージマネージャで、これを使うことでアプリケーションのデプロイが簡単になります。Helmがインストールされていることを確認します。
-
kubectlのインストール:Kubernetesクラスタに対して操作を行うためにkubectlがインストールされている必要があります。
ステップ 1: Helmのインストール
Helmがまだインストールされていない場合、公式サイトからインストールを行います。
bashcurl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
インストール後、helm version
でインストール確認を行います。
bashhelm version
ステップ 2: Kubernetesクラスタのセットアップ
次に、Kubernetesクラスタにアクセスできるように、kubectlを使ってクラスターを設定します。例えば、Minikubeを使用してローカルでKubernetesをセットアップする場合は以下のコマンドを実行します。
bashminikube start kubectl config use-context minikube
ステップ 3: MongoDBのHelmチャートを使用する
MongoDBをKubernetes上で稼働させるために、Helmチャートを使います。Helmチャートは、Kubernetesにアプリケーションを簡単にデプロイするための設定テンプレートです。
まず、MongoDBの公式チャートをHelmリポジトリに追加します。
bashhelm repo add bitnami https://charts.bitnami.com/bitnami helm repo update
次に、MongoDBをインストールします。
bashhelm install my-mongo bitnami/mongodb
インストールが完了したら、MongoDBのPodがKubernetesクラスタ内に作成され、動作していることを確認できます。
bashkubectl get pods
MongoDBが正常に稼働していることを確認したら、MongoDBのサービス情報を取得します。
bashkubectl get svc my-mongo
ステップ 4: Node.jsアプリケーションの準備
次に、Node.jsアプリケーションをKubernetesにデプロイします。まずは簡単なNode.jsアプリケーションを作成します。
-
Node.jsアプリケーションの作成
以下のように、app.js
ファイルを作成し、Node.jsサーバーを立ち上げます。
javascriptconst express = require('express');
const mongoose = require('mongoose');
const app = express();
const port = 3000;
mongoose.connect('mongodb://my-mongo:27017/mydb', {
useNewUrlParser: true,
useUnifiedTopology: true
});
app.get('/', (req, res) => {
res.send('Hello from Node.js connected to MongoDB');
});
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}`);
});
次に、package.json
を作成して必要なパッケージをインストールします。
json{
"name": "node-mongo-app",
"version": "1.0.0",
"main": "app.js",
"dependencies": {
"express": "^4.17.1",
"mongoose": "^5.10.9"
}
}
その後、npm install
コマンドを使って依存関係をインストールします。
bashnpm install
-
Dockerfileの作成
次に、Node.jsアプリケーションをDockerコンテナとしてデプロイするためのDockerfileを作成します。
DockerfileFROM node:14 WORKDIR /app COPY package*.json ./ RUN npm install COPY . . EXPOSE 3000 CMD ["node", "app.js"]
-
Dockerイメージのビルド
Dockerfileを元に、Node.jsアプリケーションのDockerイメージをビルドします。
bashdocker build -t node-mongo-app .
-
DockerイメージのKubernetesへのデプロイ
ビルドしたDockerイメージをKubernetesクラスタにデプロイするために、Kubernetesマニフェストを作成します。deployment.yaml
を以下のように作成します。
yamlapiVersion: apps/v1
kind: Deployment
metadata:
name: node-mongo-app
spec:
replicas: 1
selector:
matchLabels:
app: node-mongo-app
template:
metadata:
labels:
app: node-mongo-app
spec:
containers:
- name: node-mongo-app
image: node-mongo-app:latest
ports:
- containerPort: 3000
env:
- name: MONGODB_URI
value: "mongodb://my-mongo:27017/mydb"
---
apiVersion: v1
kind: Service
metadata:
name: node-mongo-app
spec:
selector:
app: node-mongo-app
ports:
- protocol: TCP
port: 3000
targetPort: 3000
type: LoadBalancer
これで、Node.jsアプリケーションがKubernetesクラスタ内にデプロイされ、MongoDBに接続できるようになります。
bashkubectl apply -f deployment.yaml
デプロイ後、サービスが正しく動作しているかを確認します。
bashkubectl get svc
Node.jsアプリケーションが正常にデプロイされ、MongoDBに接続されていることを確認できます。
ステップ 5: アプリケーションの確認
最後に、Node.jsアプリケーションが正常に動作しているか確認します。kubectl port-forward
コマンドを使って、ローカル環境からアプリケーションにアクセスできます。
bashkubectl port-forward svc/node-mongo-app 8080:3000
その後、ブラウザでhttp://localhost:8080
にアクセスし、「Hello from Node.js connected to MongoDB」というメッセージが表示されることを確認します。
結論
この記事では、Node.jsアプリケーションとMongoDBをHelmを使用してKubernetesにデプロイする手順を詳しく解説しました。Helmを使うことで、アプリケーションのデプロイが非常に簡単になり、Kubernetes上での管理が容易になります。この手法を使って、スケーラブルで管理可能なアプリケーションを迅速に立ち上げることができます。