GCEの既存インスタンスからインスタンステンプレートを作りマネージドインスタンスグループを作る


既存インスタンスからインスタンステンプレートを作りマネージドインスタンスグループを作てみた備忘録です。

既存インスタンスを作るところ

(参考)
https://qiita.com/smallpalace/items/bc07c00d1583dbe53a79

mypj=komitest-XXXXXX
myregion=asia-northeast1
mynode1=test-web1   
gcloud compute --project "$mypj" ssh --zone "${myregion}-b" "$mynode1"

vi /etc/sysconfig/selinux
Disabledに更新

# yum install git ansible

ちょっとansibleでbaseを入れてから停止してディスクからイメージを作成するなど
(sshまわりの設定してdefaultプロジェクトをcloneして初期設定をしてシャットダウンした)

ディスクからイメージを作成

gcloud compute --project=komitest-XXXXXX images create image-1 --family=test --source-disk=test-web1 --source-disk-zone=asia-northeast1-b

イメージからテンプレートを作成

vCPU1(3.5GB)
gcloud beta compute --project=komitest-XXXXXX instance-templates create instance-template-1 \
 --machine-type=n1-standard-1 --network=projects/komitest-XXXXXX/global/networks/default \
 --network-tier=PREMIUM --maintenance-policy=MIGRATE --service-account=xxxxxxxxxxxx-compute@developer.gserviceaccount.com \
 --scopes=https://www.googleapis.com/auth/pubsub,https://www.googleapis.com/auth/source.read_only,https://www.googleapis.com/auth/sqlservice.admin,https://www.googleapis.com/auth/compute,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/trace.append,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/devstorage.full_control,https://www.googleapis.com/auth/userinfo.email  \
 --tags=http-server,https-server --image=image-1 --image-project=komitest-XXXXXX \
 --boot-disk-size=10GB --boot-disk-type=pd-ssd --boot-disk-device-name=instance-template-1

micro
gcloud beta compute --project=komitest-XXXXXX instance-templates create instance-template-1 --machine-type=f1-micro --network=projects/komitest-XXXXXX/global/networks/default --network-tier=PREMIUM --maintenance-policy=MIGRATE --service-account=xxxxxxxxxxxx-compute@developer.gserviceaccount.com --scopes=https://www.googleapis.com/auth/pubsub,https://www.googleapis.com/auth/source.read_only,https://www.googleapis.com/auth/sqlservice.admin,https://www.googleapis.com/auth/compute,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/trace.append,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/devstorage.full_control,https://www.googleapis.com/auth/userinfo.email --tags=http-server,https-server --image=image-1 --image-project=komitest-XXXXXX --boot-disk-size=10GB --boot-disk-type=pd-standard --boot-disk-device-name=instance-template-1

使いそうなAPIエンドポイントを--scopeで有効化してるっぽい。pubsub,sourcerepository,conputeengine,cloudsql,storageなどを一応選んでおいた。

gcloud compute instance-templates list
NAME                 MACHINE_TYPE  PREEMPTIBLE  CREATION_TIMESTAMP
instance-template-1  f1-micro                   2018-08-08T22:36:34.079-07:00

テンプレートからインスタンスグループを作成

gcloud compute --project "komitest-XXXXXX" instance-groups managed create "instance-group-1" \
 --base-instance-name "instance-group-1" --template "instance-template-1" --size "1" --zone "asia-northeast1-b"

オートスケーリングポリシー作成

gcloud compute --project "komitest-XXXXXX" instance-groups managed set-autoscaling "instance-group-1" \
 --zone "asia-northeast1-b" --cool-down-period "60" --max-num-replicas "3" --min-num-replicas "1" --target-cpu-utilization "0.6"

これをlbのバックエンドにすると勝手にスケールされると思われる。
指標はCPUだけではなく他に3種類ほどありStackdriverなども選べるようだった。(CPU60%だと最大1でも気軽にいつの間にかさし変わる動きをしてた。)

つくったインスタンスグループの画面にいくと、グループを編集、ローリング更新、ローリング再起動などのボタンが出ていて便利そうかなと思いました。

たとえばテンプレート設定のときにSSDとかインスタンスのスペックとか選べるので、別のテンプレつくるか更新してグループ編集してからスケールアップのためにローリング更新とかそういうのにも使うっぽいですね。

ローリング更新画面はテンプレート差し替えるとかカナリアリリースのためにテンプレート追加するとか、一度に入れ替えるインスタンス数とか指定できる感じで、たしかにkubernetesの思想を転用してみたみたいな感じでした。(テンプレートのファミリーを指定しとくとその中で最新のやつが勝手にテンプレートとして使われるが設定は要gcloudコマンドな模様)
https://cloudplatform-jp.googleblog.com/2017/09/meet-Compute-Engines-new-managed-instance-group-updater.html
https://qiita.com/sinmetal/items/2c880e88924403e2b13c

なんかインスタンスグループ作ってオートスケール有効にすると作った瞬間に指定したテンプレートのVMが再小数で作られるっぽいです。
起動しているVMが増えてた。これ監視Stackdriver今の感じで追随してくれるか確認いりそう。

起動時の処理が必要な場合、cloud_init的なスタートスクリプトがある模様
https://cloud.google.com/compute/docs/startupscript
https://qiita.com/web_se/items/ed014a8ecf338db5c6f9

あと、マネージドインスタンスグループを削除すると中身のインスタンスも一緒に消えるので、必要なら外すかスナップショットとってから消すとよさそうです。
オートスケーリング縮退削除でログ消える問題についてはStackDriverに飛ばしとくとよさそうです。
https://qiita.com/munaita_/items/e59765d1861e690e6c4c
外部IPがエフェメラルになる(静的IPじゃない)のはオートスケーリングだと固定は難しそう。
運用中に更新する場合はテンプレート作り直す別インスタンス複製して作業することになるのかなと。
https://cloud.google.com/compute/docs/autoscaler/?hl=ja&_ga=2.109017284.-779814870.1500864087#autoscaling_options
https://cloud.google.com/compute/docs/instance-groups/apply-sizing-recommendations-managed-instance-groups?hl=JA