[Qwiklabs]クラウドアーキテクチャ: チャレンジラボ

スポンサーリンク
GCP
当サイトではアフィリエイト広告を利用しています

こんにちは、こえじまです。

GCPのProfessional Cloud Architect受験に向け、Qwiklabsのハンズオンを勉強中です。

今回はクラウドアーキテクチャ: チャレンジラボ(GSP314)の解説をします。

スポンサーリンク

シナリオ(抜粋)

あなたはJooli Inc.のクラウドアーキテクトとして、インフラを設計することになりました。

kraken(イカの怪物?)チームの開発環境セットアップ支援を求められています。

krakenチームはKubernetesでアプリケーションをホスト予定で、ソースコードはCloud Source Repositoriesに保存され、Spinnakerを使用してビルドします。

本プロジェクトでの注意点は以下の4点です。

  • 特に指示がない限り、us-east1リージョンのus-east1-bゾーンに作成すること
  • kraken-XXXXのVPCを使用すること
  • 命名はkraken-XXXXとすること
  • 特に指示がない限り、インスタンスはn1-standard-1とすること

ではやっていきましょう。

タスク1: 本番環境を作成する

ラボを開始ボタンを押すとQwiklabsによるデプロイが開始されますが、タスク1と2はデプロイの一部が終われば取り組むことが出来ます。

最初のタスクはDeployment Managerを使ったVPC(ネットワーク)およびサブネットワーク、ファイアウォールのデプロイです。

参考ラボ:
GSP060: Deployment Manager – 完全な本番環境
GSP021: Kubernetes を使った Cloud のオーケストレーション

kraken-jumphostが作成されるのを待つ

ナビゲーションメニューのDeployment Managerを開き、kraken-jumphostが作成されていることを確認しましょう。

kraken-jumphostを確認

この作成が終わらないと次のステップに進めません。

kraken-jumphostにSSHし、Deploymentを編集

kraken-jumphostが作成されたのを確認したら、ナビゲーションメニューのCompute Engine > VM Instancesを選択し、VM一覧を開きます。

kraken-jumphostのSSHボタンをクリックしSSHログインします。

# dmフォルダに移動
cd /work/dm
vi ./prod-network.yaml

末尾のregion: SET_REGIONを以下に書き換えます。

region: us-east1
zone: us-east1-b

変更できたら保存します。

[aside]ポイント
zoneは指定しなくても大丈夫かもしれませんが、複数のZoneにインスタンスが作成されたら嫌なので、明示的に指定しています。
[/aside]

Deploymentの作成

kraken-jumphost上で、以下を実行してVPC(ネットワーク)とサブネットワーク、ファイアウォールを作成。

gcloud deployment-manager deployments create kraken-vpc --config=prod-network.yaml
# kraken-vpcは任意の名前でも大丈夫です。

ナビゲーションメニューのVPC network > VPC networksでkraken-prod-vpc、kraken-prod-subnetが作成されていることを確認しておきましょう。

VPCを確認

kraken-prodクラスタの作成

kraken-prodクラスタを作成します。

ノードが2つだけと指定されているので–num-nodesオプションで2台と指定しましょう。

また、指定しないとdefault VPCに作成してしまうので、–networkと–subnetworkオプションで明示的に指定しましょう。

gcloud container clusters create kraken-prod --num-nodes=2 --network=kraken-prod-vpc --subnetwork=kraken-prod-subnet --zone=us-east1-b

[aside type=”warning”]注意
zoneの指定をus-east1としてしまうと、各Zoneに2台ずつノードが立てられてしまいます。
リソースが過剰に使用されたと見なされ、アカウントがブロックされてしまうので注意しましょう。(私はブロックされてしまったので、解除申請をしなければなりませんでした。。)
[/aside]

サービスのデプロイ

kubectlでサービスをデプロイしていきます。

cd ../k8s/

# Deploymentの作成
kubectl create -f ./deployment-prod-backend.yaml
kubectl create -f ./deployment-prod-frontend.yaml

# Podsが作成されていることを確認
kubectl get pods

# Serviceの作成
kubectl create -f ./service-prod-backend.yaml
kubectl create -f ./service-prod-frontend.yaml

# Serviceが作成されていることを確認
kubectl get services

get podsでSTATUSが全てRUNNINGになれば、タスク1は完了です。

タスク2: 管理用インスタンスを設定する

管理用にkraken-adminインスタンスを作成し、CPU使用率をモニタリングします。

参考ラボ:
GSP060: Deployment Manager – 完全な本番環境

インスタンスの作成

今回はGUIで行います。

ナビゲーションメニューのCompute Engine > VM Instancesを選択し、画面上部のCREATE INSTANCEをクリックします。

以下4点に注意してインスタンスを作成しましょう。

  • 名前をkraken-adminとする
  • Zoneはus-east1-bにする(デフォルト)
  • Machine typeはn1-standard-1(デフォルト)
  • kraken-mgmt-subnetとkraken-prod-subnetにネットワークインターフェースを作成する

[aside]ポイント
ネットワークインターフェース設定が必要なので画面下部の「Management, security, disks, networking, sole tenancy」をクリックして、メニューを開きます。
[/aside]

ネットワークインターフェース設定

作成出来たら、VM一覧画面でkraken-adminをクリックし、インスタンスIDをメモしておきます。

インスタンスID

モニタリングを設定する

ナビゲーションメニューのMonitoring > Alertingを選択し、画面上部のCreate Policyをクリックします。

ADD CONDITIONをクリックし、Condition設定画面を開きます。

TargetのFind resource type and metricに以下を入力すると、2つ出てくるので、そのうちagentが入っていない方を選択します。

compute.googleapis.com/instance/cpu/utilization

[aside]ポイント
CPU Utilizationで検索して、GCE Instanceのものを選んでも大丈夫です。
[/aside]

以下の通り設定されているのを確認します。

  • Resource type: GCE VM Instance
  • Metric: CPU utilization

Filterはinstance_idとし、先程メモしたkraken-adminのインスタンスIDと一致させるようにします。

[aside type=”warning”]注意
Filterにおいて、name=kraken-adminと選択してもAlertは出来るのですが、チャレンジラボとしてはクリアになりません。(これで小一時間ハマりました。)
instance_idで指定するようにしましょう。
[/aside]

最下部のConfigurationは以下の通り設定します。

  • Condition triggers if: Any time series violates
  • Condition: is above
  • Threshold: 50 %
  • For: 1 minute

設定が終わるとこんな感じです。

右側にグラフが表示されてたら多分OK。

Aleringの設定値

ADDをクリックし、元の画面に戻ります。

ADD NOTIFICATION CHANNELをクリックし、EMAILを選択します。

適当なメールアドレス(GCPにログインしたメールアドレスで良いでしょう)を入力し、SAVEをクリックしても元の画面に戻ります。

[aside]補足
判定項目にメールアドレス登録は入っていないようなので、Notification Channelは何も設定しなくてもクリアできます。
[/aside]

SAVEをクリックしたら、タスク2は完了です。

タスク3: Spinnaker のデプロイを確認する

タスク3はデプロイが全て完了するまで取り組むことが出来ません。

デプロイが完了して無ければ、完了するまで待ちましょう。

参考ラボ:
GSP114: Spinnaker と Kubernetes Engine を使用した継続的デリバリー パイプライン

Cloud ShellからSpinnakerへのポートフォワード

Cloud ShellからSpinnakerにポートフォワードを行います。

今回はSpinnakerが事前にデプロイされているので、デプロイは必要なく、ポートフォワードからで大丈夫です。

まず、kubectlで扱うクラスタを設定しましょう。

# spinnakerのクラスタ名を確認
$ gcloud container clusters list
NAME                LOCATION    MASTER_VERSION  MASTER_IP      MACHINE_TYPE   NODE_VERSION    NUM_NODESSTATUS
kraken-prod         us-east1-b  1.14.10-gke.36  35.229.41.158  n1-standard-1  1.14.10-gke.36  2RUNNING
spinnaker-tutorial  us-east1-b  1.14.10-gke.36  35.231.213.57  n1-standard-4  1.14.10-gke.36  2RUNNING

# spinnakerをkubectlに設定
gcloud config set compute/zone us-east1-b
gcloud container clusters get-credentials spinnaker-tutorial

[aside]注意
デフォルトではkubectlで扱うクラスタは設定されていません。
kubectlで扱うクラスタを設定するには、以下のどちらかが必要です。
・gcloud container clusters createでクラスタを作ったShellで操作を行う
・上記のようにget-credentialsで扱うクラスタを指定する
[/aside]

[aside]注意
Spinnaker起動中にCloud Shellを終了すると、Spinnakerにアクセス出来なくなります。(切断されるのは大丈夫です。)
ラボが終了するまで、Cloud Shellは開きっぱなしにしておきましょう。
[/aside]

設定できたらポートフォワードを行います。

# SpinnakerのPodsの名称を取得
export DECK_POD=$(kubectl get pods --namespace default -l "cluster=spin-deck" -o jsonpath="{.items[0].metadata.name}")

# ポートフォワードを行う
kubectl port-forward --namespace default $DECK_POD 8080:9000 >> /dev/null &

Cloud Shellの最上部でブラウザにひし形が入っているアイコンをクリックし、Preview on port 8080をクリックします。

Spinnakerを開く

Spinnakerの画面が表示されるはずです。(下の画像は上メニューのApplicationsをクリックした後の画面です)

SpinnakerのUI

sample-appリポジトリをpullする

sample-appをクローンするため、GCPに戻ります。

ナビゲーションメニューのSource Repositoriesをクリックし、sample-appを開きます。

画面右上にあるCloneをクリックすると、プルダウンが表示されるので、これをGoogle Cloud SDKに変更すると、gcloudのコマンドが出てきます。

gcloudコマンドを確認

右のコピーボタンをクリックし、コピーしたものをCloud Shellで走らせます。

このリポジトリを変更せよとのことなので、事前にgitの初期設定を行います。

# sample-appのクローン
gcloud source repos clone sample-app --project=qwiklabs-gcp-01-eac5bb3fcddf

# gitの初期設定
cd ./sample-app
git config --global user.email "$(gcloud config get-value core/account)"
git config --global user.name "[USERNAME]"

Pushして、パイプラインを実行させる

GSP114: Spinnaker と Kubernetes Engine を使用した継続的デリバリー パイプラインで実施したようにオレンジ色を青色に変えてpushしましょう。

# オレンジを青に変更
sed -i 's/orange/blue/g' cmd/gke-info/common-service.go

# リポジトリにpush
git commit -am "Change color to blue"
git tag v1.0.1
git push --tags

Pipelineを完了させる

上記のPushを行うと、Cloud Buildが実行されます。

ナビゲーションメニューのCloud Build > Dashboardを選択し、トリガーされたBuildが完了するのを待ちましょう。

Cloud Buildの完了待ち

完了するとSpinnakerのPipelineが始まります。

Spinnakerの画面でApplication > sample > PIPELINESとクリックしていき、一番下のデプロイプロセス(3つ目)を確認します。

Execution Detailsをクリックし、Pipelineが完了するのを待ちましょう。

黄色のマークで手動承認(Continueをクリック)が必要になるため、忘れずに実施しましょう。

手動承認

[aside type=”warning”]注意
別のPipelineが動いていると他のPipelineが始まりません。
他のPipelineが終わるのをじっくり待ちましょう。
[/aside]

これでタスク3が完了し、チャレンジラボは終わりです。

タスク完了!

お疲れさまでした!

コメント

タイトルとURLをコピーしました