README ¶
はじめに
これは、 Kubernetes 入門 #1 で scale1のデモを行った際のアプリケーション、 およびkubernetesのマニフェストファイルを含んでいます。
デモ内容
スケールアウト、そしてローリングアップデートをデモしました。
アプリケーションの起動
git clone→applyして起動する。
$ git clone https://github.com/h-r-k-matsumoto/go-app-foo.git
Cloning into 'go-app-foo'...
remote: Enumerating objects: 84, done.
remote: Counting objects: 100% (84/84), done.
remote: Compressing objects: 100% (62/62), done.
remote: Total 84 (delta 31), reused 58 (delta 20), pack-reused 0
Unpacking objects: 100% (84/84), done.
$ kubectl apply -f go-app-foo/kubernetes
configmap "go-app-config" created
service "go-app-foo" created
deployment.apps "go-app-foo" created
$
スケールしてスループットをあげてみる
まずpodが2つ起動している状態。
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
go-app-foo-79f989c65c-cq96b 1/1 Running 0 3m
go-app-foo-79f989c65c-d2k9f 1/1 Running 0 3m
$
abにて、スループット確認、秒間17.59リクエストを処理できる。
$ ab -n 500 -c 50 http://localhost:30000/hello
...
Requests per second: 17.59 [#/sec] (mean)
...
podを10こにスケールアウトする。
$ kubectl scale deploy go-app-foo --replicas=10
$ kubectl get po
NAME READY STATUS RESTARTS AGE
go-app-foo-79f989c65c-4664z 1/1 Running 0 21s
go-app-foo-79f989c65c-6mrnd 1/1 Running 0 21s
go-app-foo-79f989c65c-cq96b 1/1 Running 0 7m
go-app-foo-79f989c65c-d2k9f 1/1 Running 0 7m
go-app-foo-79f989c65c-drp6b 1/1 Running 0 21s
go-app-foo-79f989c65c-dt9ls 1/1 Running 0 21s
go-app-foo-79f989c65c-qndvz 1/1 Running 0 21s
go-app-foo-79f989c65c-shxcp 1/1 Running 0 21s
go-app-foo-79f989c65c-tmc8l 1/1 Running 0 21s
go-app-foo-79f989c65c-wlb2q 1/1 Running 0 21s
$
abにて、スループット確認、秒間63.02リクエストを処理できる。
$ ab -n 500 -c 50 http://localhost:30000/hello
...
Requests per second: 63.02 [#/sec] (mean)
...
ローリングアップデートしてみる。
一旦pod数を2に戻す
$ kubectl scale deploy go-app-foo --replicas=2
deployment.extensions "go-app-foo" scaled
$
podの状態監視用のterminalを起動して下記にて監視。
$ watch -n 1 "kubectl get pod"
このREADMEでは、下記で監視した結果を書いておきます。(watchだと画像が無いとわからないので)
$ kubect get pod -w
podの定義を変更します。
$ vi go-app-foo/kubernetes/030-deployments.yaml
limits:
cpu: 300m
memory: 200Mi
上記を下記のように変更
limits:
cpu: 100m
memory: 100Mi
そして反映。
$ kubectl apply -f go-app-foo/kubernetes
configmap "go-app-config" unchanged
service "go-app-foo" unchanged
deployment.apps "go-app-foo" configured
$
下記のように、1つ起動→1つ停止とローリングしながら更新されていきます。
~ $ kubectl get pod -w
NAME READY STATUS RESTARTS AGE
go-app-foo-79f989c65c-cq96b 1/1 Running 0 17m
go-app-foo-79f989c65c-d2k9f 1/1 Running 0 17m
go-app-foo-6d56f798f5-jcgpc 0/1 Pending 0 0s
go-app-foo-6d56f798f5-jcgpc 0/1 Pending 0 0s
go-app-foo-6d56f798f5-jcgpc 0/1 ContainerCreating 0 0s
go-app-foo-6d56f798f5-jcgpc 0/1 Running 0 3s
go-app-foo-6d56f798f5-jcgpc 1/1 Running 0 7s
go-app-foo-79f989c65c-cq96b 1/1 Terminating 0 20m
go-app-foo-6d56f798f5-nb8xp 0/1 Pending 0 0s
go-app-foo-6d56f798f5-nb8xp 0/1 Pending 0 0s
go-app-foo-6d56f798f5-nb8xp 0/1 ContainerCreating 0 0s
go-app-foo-79f989c65c-cq96b 0/1 Terminating 0 20m
go-app-foo-79f989c65c-cq96b 0/1 Terminating 0 20m
go-app-foo-79f989c65c-cq96b 0/1 Terminating 0 20m
go-app-foo-6d56f798f5-nb8xp 0/1 Running 0 3s
go-app-foo-6d56f798f5-nb8xp 1/1 Running 0 10s
go-app-foo-79f989c65c-d2k9f 1/1 Terminating 0 20m
go-app-foo-79f989c65c-d2k9f 0/1 Terminating 0 20m
go-app-foo-79f989c65c-d2k9f 0/1 Terminating 0 20m
go-app-foo-79f989c65c-d2k9f 0/1 Terminating 0 20m
最後に
下記コマンドで全て削除できます。
$ kubectl delete -f go-app-foo/kubernetes
configmap "go-app-config" deleted
service "go-app-foo" deleted
deployment.apps "go-app-foo" deleted
$
$ kubectl apply -f go-app-foo/kubernete $ kubectl apply -f go-app-foo/kubernetes
Click to show internal directories.
Click to hide internal directories.