LoginSignup
6
0

More than 1 year has passed since last update.

docker swarmとk8sのreplicasを試しました

Last updated at Posted at 2022-12-15

この記事は MicroAd Advent Calendar 2022 の16日目の記事です。

概要

コンテナオーケストレーションツールのdocker swarmモードとkubernetes(k8s)ですが、サービスの負荷を分散のため、コンテナのレプリカ(replicas)機能を提供しています。
仕事で両方を使う機会があったので比べてみました。

詳細

docker swarmモードでのレプリカ設定

設定値をdocker composeファイルに定義すれば、docker単体と同様にデプロイすることが可能です。
docker swarmモードの場合、デプロイコマンドは docker stack deploy になります。
以下はレプリカ3つを設定した例です。

...
services:
  xxx-service:
    image: xxx:1.0.0
    ...
    deploy:
      replicas: 3  # レプリカ数
...

ちなみに、現時点 docker swarmモードではレプリカのオートスケーリング機能を提供していません。
レプリカ数の変更はマニュアルで再デプロイする必要があります。

[www@test-server ~]$ docker stack services test
ID                  NAME                            MODE                REPLICAS            IMAGE              PORTS
13a7gaf3dtio        test_xxx-service                replicated          3/3                 xxx:1.0.0

デプロイ後、コンテナのレプリカ3つが作られたことを確認しました。

[参考]

k8sでのレプリカ設定

k8sのDeploymentファイルの中に設定しています。
以下はレプリカ数3つの例です。設定項目は docker composeとは似ていますね。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: xxx-deployment
  namespace: test
...
spec:
  replicas: 3 # レプリカ数
  ...

さらに、k8sの場合は負荷面の計測指標に応じるpodのレプリカのオートスケーリング機能も提供しています。
以下の例では、レプリカ数が最小1つ、最大12で設定して、CPU使用率によってpodのレプリカのオートスケーリングが適用されます。

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
...
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: xxx-deployment
  minReplicas: 1 # 最小レプリカ数
  maxReplicas: 12 # 最大レプリカ数
  targetCPUUtilizationPercentage: 80  # CPU利用率の期待値

デプロイ直後、podのレプリカは3つが作られまして、その後負荷に応じて8つまでscala outしたことを確認しました。

[www@test-server ~]$ kubectl get pod  --namespace test
NAME                              READY   STATUS    RESTARTS   AGE
xxx-deployment-5cd8d7cb86-ckqc4   1/1     Running   0          89m
xxx-deployment-5cd8d7cb86-l9wrw   1/1     Running   0          87m
xxx-deployment-5cd8d7cb86-lddth   1/1     Running   0          89m
xxx-deployment-5cd8d7cb86-ll7s4   1/1     Running   0          94m
xxx-deployment-5cd8d7cb86-rtm4b   1/1     Running   0          94m
xxx-deployment-5cd8d7cb86-szgd7   1/1     Running   0          89m
xxx-deployment-5cd8d7cb86-v4kw5   1/1     Running   0          87m
xxx-deployment-5cd8d7cb86-wjjpb   1/1     Running   0          94m

ちなみに、オートスケーリングの計算アルゴリズムは以下となります。

desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]

[参考]

まとめ

コンテナ(or pod)のレプリカ レプリカのマニュアルスケーリング レプリカのオートスケーリング
docker swarmモード ⭕️ ⭕️
kubernetes ⭕️ ⭕️ ⭕️

以上、docker swarmとk8sのレプリカ(replicas)機能の比較結果でした。

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0