2022年6月15日
Continuous Delivery
簡単なNode.jsアプリケーションを使って、ローカルイメージを利用してminikube上にアプリケーションを 構築し、デプロイする方法をご紹介します。
このチュートリアルでは、簡単なNode.jsアプリケーションを用意し、ローカルイメージを利用してminikube上でアプリケーションをビルド、デプロイする方法を説明します。
Minikubeは、私たちのアプリケーションをテストするために、たった1つのノードでシンプルなクラスターを実行するための軽量なKubernetesのアプローチです。Minikubeは、Linux、macOS、Windowsシステムで利用可能です。
チュートリアル
簡単なアプリケーションコードを格納するための新しいディレクトリーを作成します。このリポジトリーをクローンしてください。
リポジトリーをクロー ンしたら、'npm install' で必要な依存関係をインストールします。
これで、アプリケーションとDockerfileはローカルでビルドする準備が整いました。次のステップでは、Minikube上でイメージをビルドします。そのため、以下のコマンドでminikubeを起動する必要があります。
minikube start
ターミナルに以下のような出力が表示されるはずです。
これにより、必要なマシンとリソースが起動します。
次に、MinikubeがローカルのDockerイメージにアクセスできるようにしましょう。
ルートフォルダーに、イメージをビルドするための手順を指定したDockerfileが表示されているはずです。
FROM node:14-alpine AS development
ENV NODE_ENV development
# Add a work directory
WORKDIR /app
# Cache and Install dependencies
COPY package.json .
RUN npm install
# Copy app files
COPY . .
# Expose port
EXPOSE 3002
# Start the app
CMD [ "node", "app.js" ]
さらに、コンテキストからファイルを除外してビルドを高速化するための.dockerignoreファイルがあります。このファイルでは、node_modulesを含めただけです。
ルートディレクトリーにYAMLファイル(deployment.yaml)がありますが、これがKubernetes上でWebサーバーを動作させるためのデプロイメント設定になります。このファイルを開くと、以下のように表示されるはずです。
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-deployment
labels:
app: node-app
spec:
replicas: 2
selector:
matchLabels:
app: node-app
template:
metadata:
labels:
app: node-app
spec:
containers:
- name: app-deployment
image: pavansa/mumbai-app:latest
resources:
requests:
cpu: "100m"
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3002
ImagePullPolicyがNeverになっているのは、イメージレジストリー(DockerHubなど)からイメージを引っ張ってこないからです。これをAlwaysに指定すると、レジストリーからイメージを検索して、最終的にプルする ことになります。
以下のコマンドでデプロイメントを作成します。
kubectl apply -f deployment.yaml
ターミナルには以下のように出力されるはずです。
deployment.apps/nodeapp created
minikubeはローカルのDockerイメージにアクセスすることができません。つまり、minikubeにイメージをロードする時が来たのです。
以下のコマンドで、直接minikube上にイメージを構築してみましょう。
minikube image build -t mynode/app .
[Syntax: minikube image build -t <image name> .]
以下のような出力が表示されるはずです。
次のコマンドで検証してみましょう。
kubectl logs deployment.apps/nodeapp
上記のコマンドを実行すると、以下のようなアプリケーション実行中のメッセージが表示されます。
Server is up on localhost:3002
ブラウザーで確認すると、次のようなメッセージが表示されているはずです。
また、Docker Desktop Dashboardにアクセスすることでも確認できます。コンテナが起動しているのが確認できるはずです。
おめでとうございます。アプリケーションをコンテナ化し、minikubeクラスターにプッシュしました。
minikubeは、少人数のチームで学習や実験をしている限りは効果的ですが、プロジェクトが小規模ではなく、相当数の開発者が作業している場合はどうでしょうか。それなら、Harness CDの力を借りて、アプリケーションをデプロイすることができます。Harness CDはKubernetesのデプロイを容易にし、パイプラインを一目で見渡せるようにします。
Harnessの無料トライアルに登録し、TryNextGenタブを選択すると、シームレスな体験ができます。新しいプロジェクトを作成し、Continuous Deliveryモジュールを選択します。新しいパイプラインの作成を開始し、パイプラインに必要な全ての詳細を追加してください。
注:Harnessが力を発揮するには、Kubernetesクラスター上でデリゲートと呼ばれるものが動作している必要があります。デリゲートをセットアップするための簡単なチュートリアルがありますので、ご安心ください。
これで完了です。パイプラインが正常に実行されると、指定したKubernetesクラスタにアプリケーションがデプロイされているのが確認できるはずです。これは、kubectlコマンドのkubectl get podsで確認することができます。
お読みいただきどうもありがとうございました。Harness CDの無料体験のお申し込みをお待ちしています。
この記事はHarness社のウェブサイトで公開されているものをDigital Stacksが日本語に訳したものです。無断複製を禁じます。原文はこちらです。