Webアプリケーションのデプロイ
それでは、Webアプリケーションのデプロイについて解説します。Webアプリケーションをデプロイするためには以下の手順が必要です。
- Google Container Engine上にKubernetesのクラスタを作成
- WebアプリケーションのDeploymentのYAMLファイルを作成し、そのファイルをデプロイ
- PodとIngressを接続するためのService(NodePort)の作成
- Ingressの作成
今回は1と2の手順を行いPodだけの構成で作ります。構成図は図5の通りです。
WebアプリケーションのPodとクラスタ構成になっています。
準備
以下の手順で準備を行います。既に完了済みの手順は飛ばしても構いません。
- Google cloudで使うGoogleアカウントのセットアップ
- 課金の有効化
- Container Engine APIの有効化
- gcloudコマンドのインストールとkubectlのインストール
詳しくは公式ページをご覧ください。
gcloudのインストールの手順まで完了したら、以下のコマンドを実行してkubectlをインストールします。
$gcloud components update kubectl
インストール後、kubectl versionコマンドを実行してkubectlのインストールが正常に完了したか確認してください。
$kubectl version
Client Version: version.Info{Major:"1", Minor:"7", GitVersion:"v1.7.3",...
Server Version: version.Info{Major:"1", Minor:"7", GitVersion:"v1.7.3",...
Google Container Engine上にKubernetesのクラスタを構築
クラスタの作成には「Cloud Platform Console」から行う方法と、「gcloudコマンドライン ツール」を使った方法があります。今回はgcloud コマンドライン ツールを使った方法を説明します。
作成するクラスタの名前にはtest-clusterを設定し、ゾーンをasia-northeast1-aにします。ノードのオートスケーリングの設定も行うため、--enable-autoscalingオプションを追加して--min-nodesと--max-nodesを指定しましょう。
min-nodesは最小のノード数で、max-nodesは最大のノード数です。minとmaxの範囲でノード数が負荷に応じてスケーリングするようになります。--enable-autoscalingオプションはgcloud alphaコマンドでなければ使えません。そのため、こちらのコマンドを使います。
$ gcloud alpha container clusters create test-cluster --zone asia-northeast1-a
--cluster-version=1.7.3 --enable-autoscaling --min-nodes=1 --max-nodes=3
Creating cluster test-cluster...done.
Created [https://container.googleapis.com/v1/projects/{my-project}/zones/asia-northeast1-a/clusters/test-cluster].
kubeconfig entry generated for test-cluster.
NAME ZONE MACHINE_TYPE NUM_NODES STATUS
test-cluster asia-northeast1-a n1-standard-1 3 RUNNING
--machine-typeを指定していないため、デフォルトのマシンタイプのn1-standard-1で構成されたノードが作られます。
WebアプリケーションのPodをDeploymentを使ってデプロイ
次に、Deploymentをデプロイします。今回は公式のNginxのimageを指定してPodを作成するDeploymentを定義します。NginxはオープンソースのWebサーバーのアプリケーションです。
KubernetesはYAML(Ain't a Markup Language)形式で設定ファイルを定義することができます。
それでは、Deploymentの設定ファイルを作成していきましょう。エディタを開き、次の内容をコピーして「my-api.yaml」というファイル名で保存してください。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: my-api
spec:
replicas: 2 # 複製数
template:
metadata:
labels: # labelに下記の値を設定
app: my-api
version: v1
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
このDeploymentでは以下を設定しています。
- メタ情報に
app: my-api、version: v1のlabelsを指定 replicasを2に指定imageに公式のNginxのimage(nginx)を指定- クラスタ内に公開するportに
80を指定
この作成したDeploymentの設定ファイルを元に、クラスタ上にDeploymentを作成します。
作成にはkubectlコマンドを使います。-fのオプションで「my-api.yaml」を指定します。
$ kubectl create -f my-api.yaml deployment "my-api" created
kubectl getコマンドを使ってDeploymentとPodが作成されたかを確認してみましょう。
まずは、Deploymentの方から確認します。getコマンドにdeployを指定するとDeploymentが確認できます。
$ kubectl get deploy NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE my-api 2 2 2 2 35s
次に、getコマンドでPodを確認しましょう。getコマンドにpodを指定してください。
$ kubectl get pod NAME READY STATUS RESTARTS AGE my-api-964424937-57kj0 1/1 Running 0 59s my-api-964424937-bz81x 1/1 Running 0 59s
Deploymentのreplicasで設定した数のPodが動いていることが確認ができるはずです。
最後に
以上でWebアプリケーションのデプロイが完了しました。次回は、Webアプリケーションを外部に公開する手順について解説します。
