Harvester HCIでおうちプライベートクラウド、とKubernetes

Harvester

おうちでポンポンVMを生やしたりくばねを生やしたりしたくないですか?私はやりたいです。
SUSEからHarvester HCIというツールが出ているので生やしてみました。サークルを実験台にして。
https://docs.harvesterhci.io/
この記事はv1.0.1を導入します。

できること

必要なもの

Harvesterの使い勝手

Harvester HCIからインストールします。
サークルのX570+5900Xでやってみたところ普通にドキュメントに沿ってインストールできました。ただおうちのX79じゃインストールしても起動しませんでした。なんででしょ。
インストール後のUIはこんな感じでした。
dashboard
resource
virtual machines
Harvesterは3台にするとHA構成になってくれるらしいので3台にすると良いと思います。LongHornのreplicasもデフォルトは3ですしね。
Terraform Providerも提供されています。これだけでもかなり便利に使えそうですね。

Rancherと連携

本当はちゃんとやるべきなんでしょうが面倒なのでdockerでRancherを動かします。データの永続化だけやっておきましょう。ドキュメント通りにインストールしました。
Harvester HCI自体がRKE2クラスタなのでそこで一緒にRancherも動けばいいのですが、ドキュメントには一切書かれてない感じなのでやるなということかもしれません。
> Run Rancher on a Separate Cluster> Don’t run other workloads or microservices in the Kubernetes cluster that Rancher is installed on.
https://rancher.com/docs/rancher/v2.6/en/best-practices/rancher-server/deployment-types/#run-rancher-on-a-separate-cluster
とのこと。
あとはドキュメントに沿ってカチカチやればRancherとHarvesterを連携できます。Harvester HCIのコンパネでできることは全部Rancherのコンパネからできるようになります。

クラスタ作成

では早速くばねクラスタを生やしてみます。
creating cluster
これを埋めるだけでHarvester上でVMが3つ立って、CloudInitを使って全自動でくばねノードが設定されていきます。すごすぎる。ベースイメージには普通のubuntu22のデイリービルドcloudimageを使っています。 https://cloud-images.ubuntu.com/jammy/20220423/

余談

HarvesterはKubeVirt+LongHorn+etc...をまとめてくれるのですが、中のKubeVirtを直に叩けます。
以下のようなマニフェストを書くとHarvester HCIの何かのコンポーネントがdefault/image-jm545というイメージをコピーしてdisk-DISKという40GiのPVCを作りKubeVirtにアタッチしてくれるみたいですね。
yaml
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
  namespace: default
  annotations:
    harvesterhci.io/volumeClaimTemplates: >-
      [{"metadata":{"name":"disk-DISK","annotations":{"harvesterhci.io/imageId":"default/image-jm545"}},"spec":{"accessModes":["ReadWriteMany"],"resources":{"requests":{"storage":"40Gi"}},"volumeMode":"Block","storageClassName":"longhorn-image-jm545"}}]
  labels:
    harvesterhci.io/creator: harvester
    harvesterhci.io/os: ubuntu
  name: VM_NAME
spec:
  template:
    spec:
      domain:
        devices:
          disks:
            - name: disk-0
              disk:
                bus: virtio
              bootOrder: 1
      volumes:
        - name: disk-0
          persistentVolumeClaim:
            claimName: disk-DISK

余談2

WindowsをインストールしてCrystalDiskMarkを走らせてみました。たしか2ノードでどちらもNVMe(KIOXIA PLUS G2)です。
longhorn speedtest
公称はリード3400MB/sなので63%ぐらいの力は出ているのでしょうか。分散ストレージの上で動いているにしてはまあまあ出ているかなと思います。条件がNVMeなこと以外全然違うので参考程度ですが、一度だけ試したkubevirt on rook/cephよりwriteが1桁高速な気がします。cephほど厳密に書き込みをやってないんでしょうかね。

余談3

おうちのインフラを全てこれに乗せたいなと思ったのですが全部SSDはお金が足りないのでHDDと混在できるこれを待っています。
https://github.com/harvester/harvester/issues/1820