share facebook facebook facebook twitter twitter menu hatena pocket slack

2021.07.21 WED

Google Cloud GKEを使ってみた

Shimpei Chiba

WRITTEN BY Shimpei Chiba

皆さん、Google Kubernetes Engineはお使いでしょうか?
今回は、それぞれにウェブサーバーが含まれた複数のコンテナを含む Google Kubernetes Engine クラスタを作成します。
また、クラスタの手前にロードバランサを配置してコンテンツを参照させます。

全体像

①Kubernetes Engine を使用して Kubernetes クラスタをプロビジョニングする。

②kubectl を使用して Docker コンテナをデプロイおよび管理する。

①Kubernetes Engine を使用して Kubernetes クラスタをプロビジョニングする。

まず、必要な API が有効であることを確認しましょう。

GCP Console のナビゲーション メニュー(ナビゲーション メニュー)で、[API とサービス] をクリックします。

有効になっている API のリストを下にスクロールして、次の API が両方とも有効になっていることを確認します。

Kubernetes Engine API
Container Registry API

API がない場合は、上部にある [API とサービスを有効化] をクリックします。
上記の API を名前で検索し、現在のプロジェクトでそれぞれを有効にします。

②kubectl を使用して Docker コンテナをデプロイおよび管理する。

Kubernetes Engine クラスタを開始する

GCP Console の右上のツールバーにある「Cloud Shell をアクティブにする」ボタンをクリックします。

[続行] をクリックします。

ゾーンを MY_ZONE という環境変数に配置します。Cloud Shell プロンプトで、次のコマンドを入力します。
今回は、私はus-central1-aで設定しています。任意のゾーンで実行してください。

$ export MY_ZONE=us-central1-a

Kubernetes Engine で管理されている Kubernetes クラスタを起動します。
このクラスタに (例) webfrontend という任意の名前を付けて、2 つのノードを実行するように構成します。

$ gcloud container clusters create webfrontend --zone $MY_ZONE --num-nodes 2

Kubernetes Engine によって仮想マシンがプロビジョニングされるため、クラスタの作成には数分かかります。

クラスタが作成されたら、kubectl version コマンドを使用して、インストール済みの Kubernetes のバージョンを確認します。

$ kubectl version

GCP Console で実行中のノードを表示します。
ナビゲーション メニュー(ナビゲーション メニュー)で、[Compute Engine] > [VM インスタンス] をクリックします。

Kubernetes クラスタを使用する準備が整いました。

コンテナを実行してデプロイする

Cloud Shell プロンプトで、nginx コンテナの単一インスタンスを起動します。

$ kubectl create deploy nginx --image=nginx:1.17.10

Kubernetes では、すべてのコンテナはポッドで実行されます。
kubectl create コマンドを使用すると、Kubernetes で、nginx コンテナを含む単一のポッドで構成された Deployment が作成されます。Kubernetes の Deployment は、ポッドが実行されているノード間で障害が発生した場合でも、指定した数のポッドを稼動状態に保ちます。このコマンドでは、デフォルトの数(1)の Pod が起動されました。

nginx コンテナを実行している Pod を表示します。

$ kubectl get pods

nginx コンテナをインターネットに公開します。

$ kubectl expose deployment nginx --port 80 --type LoadBalancer

Kubernetes によって、サービスと、パブリック IP アドレスが関連付けられた外部ロードバランサが作成されました。
この IP アドレスは、サービスの存続期間中は変更されません。そのパブリック IP アドレスへのネットワーク トラフィックは、サービスの背後にあるポッド(今回の場合は nginx ポッド)にルーティングされます。

新しいサービスを表示します。

$ kubectl get services

表示された外部 IP アドレスを使用して、nginx コンテナをリモートでテストしてアクセスすることができます。

Service の External-IP フィールドに入力されるまでに数秒かかる場合がありますので、少し待ちましょう。
このフィールドに入力されるまで何回か kubectl get services コマンドを再実行します。

新しいウェブブラウザ タブを開き、クラスタの外部 IP アドレスをアドレスバーに貼り付けます。
Nginx ブラウザのデフォルトのホームページが表示されます。

サービスで実行するポッドの数をスケールアップします。

$ kubectl scale deployment nginx --replicas 3

Deployment のスケールアップは、利用が拡大しているアプリケーションで使用できるリソースを増やす場合に役立ちます。

Kubernetes でポッドの数が更新されたことを確認します。

$ kubectl get pods

外部 IP アドレスが変更されていないことを確認します。

$ kubectl get services

クラスタの外部 IP アドレスを表示したウェブブラウザ タブに戻ります。
ページを更新して、nginx ウェブサーバーが応答していることを確認します。

これで、Kubernetes Engine で Kubernetes クラスタを構成、アプリケーションを含む複数の Pod をこのクラスタに配置し、アプリケーションの公開とスケーリングができました。

いかがだったでしょうか。
なんとな〜く雰囲気を掴めたかと思います。これを機にGoogle Cloudを更に使ってみませんか?楽しいですよ!w

元記事はこちら

https://qiita.com/namely_/items/65da8050a464333ccf98

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。