本連載では、AWSが提供するマネージドKubernetesサービスの「EKS」を用いてアプリケーションを公開する方法を紹介。第2回目はEKSで構築したクラスタにアプリケーションをデプロイする方法について。
Webアプリケーション開発に携わっている人々は、「デプロイ」を外部公開の意味で解釈することが多いと思います。Kubernetesにおけるデプロイはデフォルトで内部(非公開領域)公開になるため、外部公開するには設定を変更する必要があります。
本稿では、「Amazon Elastic Kubernetes Service」(以後、EKS)で構築したKubernetesクラスタにアプリケーションをデプロイし、外部からアクセスできる状態にする方法を紹介します。デプロイする方法を解説する前に、デプロイに関わる「Manifest file」「Pod」「Deployment」「Service」を解説します。
本稿は、数回に分けAWS EKSを使用しKubernetesの基本的な使用方法を理解することを目標にしています。Kubernetesのバージョンは、執筆時点でのAWSのドキュメント「eksctlの開始方法」の記載に合わせ1.14としています。Kubernetesが日々バージョンアップされており、各コマンドの挙動や仕様も細かく変化しているためです。
PodやServiceなどの情報をKubernetesへ反映するには、それらの仕様、設定をYAML形式で記載しkubectlコマンドを使用して反映します。このYAMLファイルをManifest file(マニフェストファイル)と呼びます。
Kubernetesでアプリケーションを動作させるには、アプリケーションをコンテナイメージ化し、Kubernetesにコンテナイメージをデプロイする必要があります。Kubernetes側は、Podという論理ホスト空間を作成してコンテナイメージを配置し、Podに対して固有のIPアドレスを振ります。少々乱暴な表現ですが、Pod一つ一つが、ネットワークカードを備えたコンピュータというイメージを持つと理解しやすいかもしれません。
Kubernetesは、Podを制御する際にその制御の基準となる状態を「Deployment」というオブジェクトで管理しています。マニフェストファイルで、本来あるべき状態を記述しておくことで、Deploymentコントローラーがあるべき状態に更新します(宣言的設定)。
KubernetesにコンテナイメージをデプロイするとPodが配置されますが、このままではPodに対して内部外部を問わずアクセスできません。そこで、デプロイしたPodに対してアクセスする方法を決める必要があります。これをServiceと呼びます。
Webアプリケーションを公開するには、スクリプト言語なら実行環境、コンパイル言語ならコンパイラやVM(仮想マシン)などの環境が必要です。これらを準備できていれば、Webサーバなどでアプリケーションにアクセスするルーティングを設定して完了です。これは、Kubernetesでも同じです。ここまでの作業をまとめると、以下の2ステップになるといえます。
(1)アプリケーションと実行可能な環境の用意
(2)外部(インターネット)からアプリケーションへのルーティング
Kubernetesの場合、(1)の次にPodという形でアプリケーションを配置するステップが追加されます。(2)の部分は、マニフェストファイルを編集してServiceを設定すれば実現できます。
今回デプロイに用いるアプリケーションとして、Dockerレジストリで公開されているNginxのコンテナを利用します。
実際は、開発したアプリケーションとアプリケーションが動作するミドルウェア(データベース《DB》/サーバなど)や実行環境をコンテナイメージとして作成し、Docker Hubのようなレジストリに登録する必要があります。
Copyright © ITmedia, Inc. All Rights Reserved.