こんにちは、こえじまです。
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に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が作成されていることを確認しておきましょう。
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をメモしておきます。
モニタリングを設定する
ナビゲーションメニューの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。
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の画面が表示されるはずです。(下の画像は上メニューのApplicationsをクリックした後の画面です)
sample-appリポジトリをpullする
sample-appをクローンするため、GCPに戻ります。
ナビゲーションメニューのSource Repositoriesをクリックし、sample-appを開きます。
画面右上にあるCloneをクリックすると、プルダウンが表示されるので、これをGoogle Cloud SDKに変更すると、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が完了するのを待ちましょう。
完了するとSpinnakerのPipelineが始まります。
Spinnakerの画面でApplication > sample > PIPELINESとクリックしていき、一番下のデプロイプロセス(3つ目)を確認します。
Execution Detailsをクリックし、Pipelineが完了するのを待ちましょう。
黄色のマークで手動承認(Continueをクリック)が必要になるため、忘れずに実施しましょう。
[aside type=”warning”]注意
別のPipelineが動いていると他のPipelineが始まりません。
他のPipelineが終わるのをじっくり待ちましょう。
[/aside]
これでタスク3が完了し、チャレンジラボは終わりです。
お疲れさまでした!
コメント