SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

KubernetesによるスケーラブルなWebアプリ環境の構築

Google Container EngineによるKubernetesクラスタの作成

KubernetesによるスケーラブルなWebアプリ環境の構築 第1回


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

 それでは、Webアプリケーションのデプロイについて解説します。Webアプリケーションをデプロイするためには以下の手順が必要です。

  1. Google Container Engine上にKubernetesのクラスタを作成
  2. WebアプリケーションのDeploymentのYAMLファイルを作成し、そのファイルをデプロイ
  3. PodとIngressを接続するためのService(NodePort)の作成
  4. Ingressの作成

 今回は1と2の手順を行いPodだけの構成で作ります。構成図は図5の通りです。

図5 今回の記事で作成する構成図
図5 今回の記事で作成する構成図

 WebアプリケーションのPodとクラスタ構成になっています。

準備

 以下の手順で準備を行います。既に完了済みの手順は飛ばしても構いません。

  1. Google cloudで使うGoogleアカウントのセットアップ
  2. 課金の有効化
  3. Container Engine APIの有効化
  4. 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-apiversion: v1labelsを指定
  • replicas2に指定
  • 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アプリケーションを外部に公開する手順について解説します。

参考Webページ

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
KubernetesによるスケーラブルなWebアプリ環境の構築連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 吉海 将太(ヨシカイ ショウタ)

 株式会社カブクのサーバーサイドエンジニアです。APIの開発(Python,GO,AppEngine)とKubernetesによるインフラ環境の構築を担当しています。好きな獣はチベットスナギツネです。 Twitter: @yoshikai_ Facebook WINGSプロジェクト について>有限会社 WINGSプロジェクト が運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での 登録メンバ は約50名で、現在も執筆メンバを 募集中 。興味のある方は、どしどし応募頂きたい。 著書 記事 多数。 RSS X: @WingsPro_info (公式)、 @WingsPro_info/wings (メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/10420 2018/01/22 00:12

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー