2018年3月16日金曜日

kubernetes 上でコンテナのスケールアウトを試してみた

概要

前回 kubernetes 上に DockerHub で公開しているイメージからコンテナをデプロイしてみました
今回はデプロイしたコンテナをスケールアウトしてみたいと思います

環境

  • macOS 10.13.2
  • minikube 0.25.0
  • kubectl 1.9.2
  • VertualBox 5.1.30r118389

スケールアウト

scale コマンドを使います
スケールアウトするコンテナ数は replicas で指定します

  • kubectl scale deployments/request-dumper --replicas=4

kubectl get deployments でスケールアウトしているか確認してみましょう

NAME             DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
request-dumper   4         4         4            4           32m

こんな感じで数字の部分が 4 になっていれば OK です
kubectl get pods -o wide でコンテナの一覧を確認することができます

ロードバランシング

kubernetes はデフォルトでロードバランシングの機能があります

まず service を作成しましょう

  • kubectl expose deployment/request-dumper --type="NodePort" --port 4567

そしてホスト側でバインドしているポートを取得します

  • export NODE_PORT=$(kubectl get services/request-dumper -o go-template='{{(index .spec.ports 0).nodePort}}')

あとはこのポートにアクセスすれば勝手にバランシングしてくれます

  • curl $(minikube ip):$NODE_PORT

要するにいつものように service を定義すれば expose した deployment 配下にあるコンテナを自動でバランシングしてくれます

念のため kubectl logs -f [container_name] でログを確認しながらやるとちゃんとバランシングされていることがわかると思います

スケールダウン

最後にスケールダウンしてみましょう
と言ってもスケールアウトと同じです

  • kubectl scale deployments/request-dumper --replicas=2

これで kubectl get deployments/request-dumper で確認しましょう

NAME             DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
request-dumper   2         2         2            2           47m

こんな感じでコンテナ数がスケールダウンしているのがわかります
deployments でイベントを確認してもスケールダウンしているのがわかります

  • kubectl describe deployments/request-dumper
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  51m   deployment-controller  Scaled up replica set request-dumper-5d75b447 to 1
  Normal  ScalingReplicaSet  22m   deployment-controller  Scaled up replica set request-dumper-5d75b447 to 4
  Normal  ScalingReplicaSet  5m    deployment-controller  Scaled down replica set request-dumper-5d75b447 to 2

最後に

kubernetes 上でコンテナのスケールアウト/ダウンを試してみました
ロードバランシングがデフォルトで付いているのは嬉しい点かなと思います

docker swarm の場合は haproxy などを使ってバランシングするのが定石ですが kubenetes ではそれらが不要になります
また今回紹介したロードバランシング以外にも External Load Balancer という機能もあるようです

0 件のコメント:

コメントを投稿