簡単に VM を複製? KubeVirt の ReplicaSet を試してみた
前回に続いて KubeVirt について書きます。
ちなみに KubeVirt ってなに?って人はこちらの前半を読んでみてください。 簡単にいうと、Kubernetes で VM 動かしちゃおうぜっていうものです。
VirtualMachineInstanceReplicaSet リソースを試してみたいです。なんて記載をしていたので今回試してみました。
はじめに
ReplicaSet 使えると何が嬉しいの?ってとこですが、 Pod を指定した数だけ作ってくれます
もちろん指定した数(=レプリカ)を維持する動きをしますので、Node 障害により Pod が停止すれば、別の Node で Pod を起動してくれたりします。
正直なところ、 StatefulSet が使いたい
ですね・・・。VM なので Persistent Volume を使うことになると思いますが、レプリカ増やしても PVC/PV を VM ごとに準備するのが難しいです。ReplicaSet だと全 Pod が 同一の PV をアタッチすることになるので、NFS のような複数環境からマウントして利用することが前提のものであれば良いのですが、今回のような VM を立ち上げる環境だと不向きかなと思います。
とはいえ、今後に期待というところで今回は ReplicaSet を見てみます。
ReplicaSet で Kubevirt を起動
以下のような yaml になります。 VirtualMachineInstanceReplicaSet リソースを利用して VM を立ち上げます。 CRD などはすでに入っている前提です。まだだよって人は 前回記事 を参照して VM を立ち上げるテストまで進めてください。
apiVersion: kubevirt.io/v1alpha3 kind: VirtualMachineInstanceReplicaSet metadata: name: testreplicaset spec: replicas: 2 selector: matchLabels: myvmi: myvmi template: metadata: name: test labels: myvmi: myvmi spec: domain: devices: disks: - disk: name: containerdisk resources: requests: memory: 64M volumes: - name: containerdisk containerDisk: image: kubevirt/cirros-registry-disk-demo
apply して vm を見るのですが、以下のコマンドで ReplicaSet を確認します。
$ k get vmirs NAME DESIRED CURRENT READY AGE testreplicaset 2 2 2 3m
VM が二台立ち上がっていることがわかります。
$ k get vmi NAME AGE PHASE IP NODENAME test2mwd4 3m Running 10.112.2.14 pde-yamamoto-yoshiaki-ake-default-s-nxuhsug test2mzhj 3m Running 10.112.2.13 pde-yamamoto-yoshiaki-ake-default-s-nxuhsug
replicas を 1 に変更すると以下のように VM が1台に変わります。 基本的な動作ですがしっかり動いているようです。
$ k get vmirs NAME DESIRED CURRENT READY AGE testreplicaset 1 1 1 8m $ k get vmi NAME AGE PHASE IP NODENAME test2mwd4 8m Succeeded 10.112.2.14 pde-yamamoto-yoshiaki-ake-default-s-nxuhsug testtgqc6 1m Running 10.112.2.15 pde-yamamoto-yoshiaki-ake-default-s-nxuhsug
$ k get vmi NAME AGE PHASE IP NODENAME testtgqc6 1m Running 10.112.2.15 pde-yamamoto-yoshiaki-ake-default-s-nxuhsug
念のため、 replicas を 3 に変更した時の挙動も確認します。
$ k get vmi NAME AGE PHASE IP NODENAME test4cb9d 2s Scheduling test95s4w 2s Scheduling testtgqc6 2m Running 10.112.2.15 pde-yamamoto-yoshiaki-ake-default-s-nxuhsug $ k get vmirs NAME DESIRED CURRENT READY AGE testreplicaset 3 3 1 9m
HorizontalPodAutoscaler の VirtualMachineInstanceReplicaSet 対応を確認
せっかくなので HPA(HorizontalPodAutoscaler) も確認してみます。 これは Pod をスケールアウト/インするためのリソースです。CPU 50% を基準に Pod の数を調整してくれるよう設定しています。
autoscaling/v2beta1 でないとうまく動作せず、このようにしています。おそらくこちらの問題のせいかと思うので検証したら記事をアップデートしておきます。 Replicas は検証のため 1 に戻しています。
apiVersion: autoscaling/v2beta1 kind: HorizontalPodAutoscaler metadata: name: myhpa spec: scaleTargetRef: kind: VirtualMachineInstanceReplicaSet name: testreplicaset apiVersion: kubevirt.io/v1alpha3 minReplicas: 3 maxReplicas: 6 metrics: - type: Resource resource: name: cpu targetAverageUtilization: 50
apply すると minReplicas が 3
なので3つの Pod が作られた状態になります。
$ k get vmi NAME AGE PHASE IP NODENAME testjs9dd 11m Running 10.111.2.36 pde-yamamoto-yoshiaki-ake-default-s-nxuhsug tests4nq5 11m Running 10.111.2.37 pde-yamamoto-yoshiaki-ake-default-s-nxuhsug testw6rfs 11m Running 10.111.0.18 pde-yamamoto-yoshiaki-ake-default-s-nrvublx $ k get vmirs NAME DESIRED CURRENT READY AGE testreplicaset 3 3 3 11m $ k get pod NAME READY STATUS RESTARTS AGE virt-launcher-testjs9dd-gl4kg 2/2 Running 0 11m virt-launcher-tests4nq5-8lb5n 2/2 Running 0 11m virt-launcher-testw6rfs-db5pm 2/2 Running 0 11m
負荷かけてみます。そうすると maxReplicas である 6
台の Pod が作成されます。
$ k apply -f hpa.yaml horizontalpodautoscaler.autoscaling/myhpa configured $ k get pod NAME READY STATUS RESTARTS AGE virt-launcher-test64n6z-ch5cz 0/1 Running 0 8s virt-launcher-test64nz9-twz89 1/1 Running 0 48s virt-launcher-test69hfr-dnfg2 1/1 Running 0 48s virt-launcher-testbpsp9-xlqdn 1/1 Running 0 116s virt-launcher-testkxrvr-ckndd 0/1 Running 0 8s
まとめ
StatefulSet がやっぱり使いたいなと思いますね。これで満足できるケースってもうコンテナ化した方が早いような。
Kubernetes完全ガイド (impress top gear)
- 作者: 青山真也
- 出版社/メーカー: インプレス
- 発売日: 2018/09/21
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
Kubernetes実践ガイド クラウドネイティブアプリケーションを支える技術 (impress top gear)
- 作者: 北山晋吾,早川博
- 出版社/メーカー: インプレス
- 発売日: 2019/07/12
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。