LoginSignup
0
0

More than 1 year has passed since last update.

コンテナ化されたアプリを Google Kubernetes Engine(GKE)クラスタにデプロイする

Last updated at Posted at 2021-08-27

これは何

コンテナ化されたアプリを Google Kubernetes Engine(GKE)クラスタにデプロイするということをやってみたので、メモというか、記録というかまとめです。

はじめに

GKE はコンテナ化されたアプリケーションで動作します。これらは、Docker などを使用してプラットフォームに依存しない分離されたユーザー空間インスタンスにパッケージ化されたアプリケーションです。

Artifact Registry API と Google Kubernetes Engine API を有効にする

スクリーンショット 2021-08-27 11.36.30.png

スクリーンショット 2021-08-27 11.37.59.png

Cloud Shell を起動する

スクリーンショット 2021-08-27 11.40.25.png

gcloud ツールのデフォルトの設定を構成する

gcloud ツールを使用してデフォルト設定(デフォルトのプロジェクト、コンピューティング ゾーン、コンピューティング リージョン)を構成します。

Cloud Shell で次の操作を行います。

デフォルト プロジェクトを設定します。

gcloud config set project PROJECT_ID
PROJECT_ID を実際のプロジェクト ID に置き換えます。

デフォルト ゾーンを設定します。

gcloud config set compute/zone COMPUTE_ZONE
COMPUTE_ZONE は、実際のコンピューティング ゾーン(us-west1-a など)で置き換えます。
例:gcloud config set compute/zone asia-northeast1-a

デフォルト リージョンを設定します。

gcloud config set compute/region COMPUTE_REGION
COMPUTE_REGION は、実際のコンピューティング リージョン(us-west1 など)で置き換えます。
例:gcloud config set compute/region asia-northeast1

GKE クラスタを作成する

クラスタは、少なくとも 1 つのクラスタのコントロール プレーン マシンと、ノードと呼ばれる複数のワーカーマシンで構成されます。ノードは Compute Engine 仮想マシン(VM)インスタンスであり、自身をクラスタの一部にするために必要な Kubernetes プロセスを実行します。アプリケーションをクラスタにデプロイすると、そのアプリケーションがこれらのノードで実行されます。

GKE でクラスタを作成するには、運用モード(Standard または Autopilot)を選択する必要があります。Standard モードを使用すると、クラスタはゾーンクラスタ(今回はこれ)になります。Autopilot モードを使用すると、クラスタはリージョン クラスタになります。

sample-cluster という名前の 1 ノードの Standard クラスタを作成します。

gcloud container clusters create sample-cluster --num-nodes=1

エラーが出ました。

ERROR: (gcloud.container.clusters.create) ResponseError: code=400, 
message=IP aliases cannot be used with a legacy network.

スクリーンショット 2021-08-27 12.15.33.png

エイリアスIPとりあえず回避。
--no-enable-ip-aliasをつけたら良さそう。

gcloud container clusters create sample-cluster(任意の名前) --num-nodes=1 --no-enable-ip-alias

クラスタの作成が完了したら、そのクラスタとやり取りするために必要な認証情報を取得します。

gcloud container clusters get-credentials sample-cluster

このコマンドにより、作成したクラスタを使用するように kubectl が構成されます。

アプリケーションをクラスタにデプロイする

作成したクラスタに、コンテナ化されたアプリケーションをデプロイします。ここでは、Google Cloudがサンプルとして用意してくれている hello-app というウェブ アプリケーションをデプロイします。

GKE では、クラスタ リソースの作成と管理に Kubernetes オブジェクトを使用します。Kubernetes には、ウェブサーバーのようなステートレス アプリケーションをデプロイするための Deployment オブジェクトが用意されています。インターネットからアプリケーションにアクセスする際のルールと負荷分散を定義するには、Service オブジェクトを使用します。

Deployment を作成する

クラスタで hello-app を実行するには、次のコマンドを実行してアプリケーションをデプロイする必要があります。

kubectl create deployment hello-server \
    --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
Kubernetes コマンド 
kubectl create deployment

で、hello-server という名前の Deployment が作成されます。Deployment の Pod が hello-app コンテナ イメージを実行します。

コマンド

--image にはデプロイするコンテナ イメージを指定します。
上のコマンドでは、Artifact Registry リポジトリ
us-docker.pkg.dev/google-samples/containers/gke/hello-app からサンプル イメージが取得されます。
:1.0 には、pull するイメージのバージョンを指定します。バージョンを指定しない場合は、デフォルトタグ latest のイメージが使用されます。

Deployment を公開する

アプリケーションをデプロイしたら、ユーザーがアクセスできるように、そのアプリケーションをインターネットに公開する必要があります。
アプリケーションを公開するには、Service を作成します。Service は、アプリケーションと外部トラフィックに公開する Kubernetes リソースです。

アプリケーションを公開するには、次の kubectl expose コマンドを実行します。

kubectl expose deployment hello-server --type LoadBalancer --port 80 --target-port 8080
--type LoadBalancer フラグを渡すことで、コンテナに Compute Engine ロードバランサが作成されます。
--port フラグを指定すると、インターネット用に公開ポート 80 が初期化されます。
--target-port フラグを使用すると、アプリケーションのポート 8080 にトラフィックがルーティングされます。

**アプリケーションを検査して表示する**

実行中の Pod を検査するには、kubectl get pods を使用します。

kubectl get pods
クラスタで 1 つの hello-server Pod が実行されているはずです。

hello-server Service を検査するには、kubectl get service を使用します。

kubectl get service hello-server
このコマンドの出力で、EXTERNAL-IP 列から Service の外部 IP アドレスをコピーします。

注: Service の外部 IP アドレスが取得されるまで数分かかる場合があります。アプリケーションの外部 IP が の場合、kubectl get を再度実行します。
外部 IP アドレスと公開ポートを指定して、ウェブブラウザでアプリケーションを表示します。

http://EXTERNAL_IP
をブラウザで表示します。
これで、コンテナ化されたウェブ アプリケーションが GKE にデプロイされました。

スクリーンショット 2021-08-27 12.39.36.png

リソースの削除

ここで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次の手順を行います。

kubectl delete を実行して、アプリケーションの Service を削除します。

kubectl delete service hello-server
このコマンドにより、Deployment の公開時に作成した Compute Engine ロードバランサが削除されます。

gcloud container clusters delete を実行して、クラスタを削除します。

gcloud container clusters delete sample-cluster(任意の名前)
注: デフォルトのゾーンまたはリージョンを設定しなかった場合、
クラスタのリージョン(--region=COMPUTE_REGION)フラグまたはゾーン(--zone=COMPUTE_ZONE)フラグを gcloud ツールに渡します。

参考

https://cloud.google.com/kubernetes-engine/docs/quickstart?hl=ja#standard
https://kubernetes.io/
https://cloud.google.com/kubernetes-engine/docs/concepts/kubernetes-engine-overview?hl=ja#workloads

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0