プログラミング

KubernetesでNode.jsとMongoDBのデプロイ

Kubernetes上でNode.jsアプリケーションとMongoDBをHelmを使ってデプロイする方法を、完全かつ包括的に解説します。この記事では、KubernetesとHelmの基本的な概念から、実際にNode.jsとMongoDBをHelmでデプロイする手順まで詳しく説明します。

必要な前提条件

この記事を進める前に、以下の環境が整っていることを確認してください。

  1. Kubernetesクラスタ:Kubernetesクラスターがセットアップされていること。Minikubeなどを使用してローカルでKubernetesを実行することも可能です。

  2. Helmのインストール:HelmはKubernetes向けのパッケージマネージャで、これを使うことでアプリケーションのデプロイが簡単になります。Helmがインストールされていることを確認します。

  3. kubectlのインストール:Kubernetesクラスタに対して操作を行うためにkubectlがインストールされている必要があります。

ステップ 1: Helmのインストール

Helmがまだインストールされていない場合、公式サイトからインストールを行います。

bash
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

インストール後、helm versionでインストール確認を行います。

bash
helm version

ステップ 2: Kubernetesクラスタのセットアップ

次に、Kubernetesクラスタにアクセスできるように、kubectlを使ってクラスターを設定します。例えば、Minikubeを使用してローカルでKubernetesをセットアップする場合は以下のコマンドを実行します。

bash
minikube start kubectl config use-context minikube

ステップ 3: MongoDBのHelmチャートを使用する

MongoDBをKubernetes上で稼働させるために、Helmチャートを使います。Helmチャートは、Kubernetesにアプリケーションを簡単にデプロイするための設定テンプレートです。

まず、MongoDBの公式チャートをHelmリポジトリに追加します。

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

次に、MongoDBをインストールします。

bash
helm install my-mongo bitnami/mongodb

インストールが完了したら、MongoDBのPodがKubernetesクラスタ内に作成され、動作していることを確認できます。

bash
kubectl get pods

MongoDBが正常に稼働していることを確認したら、MongoDBのサービス情報を取得します。

bash
kubectl get svc my-mongo

ステップ 4: Node.jsアプリケーションの準備

次に、Node.jsアプリケーションをKubernetesにデプロイします。まずは簡単なNode.jsアプリケーションを作成します。

  1. Node.jsアプリケーションの作成

以下のように、app.jsファイルを作成し、Node.jsサーバーを立ち上げます。

javascript
const 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コマンドを使って依存関係をインストールします。

bash
npm install
  1. Dockerfileの作成

次に、Node.jsアプリケーションをDockerコンテナとしてデプロイするためのDockerfileを作成します。

Dockerfile
FROM node:14 WORKDIR /app COPY package*.json ./ RUN npm install COPY . . EXPOSE 3000 CMD ["node", "app.js"]
  1. Dockerイメージのビルド

Dockerfileを元に、Node.jsアプリケーションのDockerイメージをビルドします。

bash
docker build -t node-mongo-app .
  1. DockerイメージのKubernetesへのデプロイ

ビルドしたDockerイメージをKubernetesクラスタにデプロイするために、Kubernetesマニフェストを作成します。deployment.yamlを以下のように作成します。

yaml
apiVersion: 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に接続できるようになります。

bash
kubectl apply -f deployment.yaml

デプロイ後、サービスが正しく動作しているかを確認します。

bash
kubectl get svc

Node.jsアプリケーションが正常にデプロイされ、MongoDBに接続されていることを確認できます。

ステップ 5: アプリケーションの確認

最後に、Node.jsアプリケーションが正常に動作しているか確認します。kubectl port-forwardコマンドを使って、ローカル環境からアプリケーションにアクセスできます。

bash
kubectl 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上での管理が容易になります。この手法を使って、スケーラブルで管理可能なアプリケーションを迅速に立ち上げることができます。

Back to top button