Google Compute Engine(GCE)で、Dockerコンテナでオートスケールさせたい!
Docker imageはインスタンス立ち上がる度にレジストリからpullしたい!
GKE(k8s)使えばいいのだろうけど、もうちょっと手軽にやりたい!
Container-Optimized Google Compute Engine Images
使ってやってみます(^^)
準備
- google cloud SDKインストール。gcloud auth loginしておく
- 動かしたいdocker imageをレジストリにpushしておく - 本記事ではgoogle container registry使用
マニフェストファイルを作成
apiVersion: v1
kind: Pod
metadata:
name: your-containers
spec:
containers:
- name: your-container
image: us.gcr.io/your-gcp−project/your-image-name
imagePullPolicy: Always
上記マニフェストファイルはKubernetesのPod定義仕様に沿っています。
http://kubernetes.io/docs/api-reference/v1/definitions/#_v1_pod
外向けにport開く場合は別途指定する必要あります。
ドキュメントに書かれてる例↓
apiVersion: v1
kind: Pod
metadata:
name: simple-echo
spec:
containers:
- name: simple-echo
image: gcr.io/google-containers/busybox
command: ['nc', '-p', '8080', '-l', '-l', '-e', 'echo', 'hello world!']
imagePullPolicy: Always
ports:
- containerPort: 8080
hostPort: 8080
インスタンステンプレート作成
[Container-Optimized Google Compute Engine Images]
Container-Optimized Imageは2016/3/10時点でOpen previewでWEBコンソールから選択できないので、gcloudコマンドを使用します。
$ gcloud compute --project "your-project-id" instance-templates \
create "your-instance-template" --machine-type "n1-standard-2" \
--network "default" --metadata-from-file google-container-manifest=containers.yaml \
--no-restart-on-failure --maintenance-policy "TERMINATE" --preemptible \
--image container-vm --boot-disk-size "20" --boot-disk-type "pd-standard" \
--boot-disk-device-name "any-disk-name"
ミソは--imageに"container-vm"を指定すること。
あと、上記例ではpreemptibleインスタンスを使用してます。
インスタンステンプレートまで作ってしまえば、あとはコンソールから通常の手順でインスタンスグループを作成出来ます。
参考までにgcloudコマンドを記しておきます。
インスタンスグループ作成
$ gcloud compute --project "your-project-id" instance-groups managed \
create "your-instance-group" --zone "asia-east1-b" --base-instance-name \
"your-instance-group" --template "your-instance-template" --size "1"
オートスケール設定
最小インスタンス数1, 最大インスタンス数20で設定
$ gcloud compute --project "your-project-id" instance-groups managed \
set-autoscaling "your-instance-group" --zone "asia-east1-b" \
--cool-down-period "60" --max-num-replicas "20" --min-num-replicas "1" \
--target-cpu-utilization "0.6"
あと・・
外向けにport公開するサ−バー群の場合はロードバランサ準備する必要ありますが、本記事では割愛しますm(_ _)m
蛇足
https://cloudplatform.googleblog.com/2016/03/Google-Compute-Engine-boosts-high-availability-controls.html
近いうちにregion指定でインスタンスグループ作れる様になりますね(まだAlpha)。タノシミ(^^)