皆さん、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