おうちクラスタにKubeVirtをデプロイする

おうちクラスタにKubeVirtをデプロイした時の話を書いておきます。

実際に変更したコミットは以下にあるので参考にしてください。

github.com

マニフェストを用意する

公式のInstalling KubeVirt on Kubernetesを元に必要なファイルを書いていきます。 まずは以下のコマンドをkustomization.yamlに書き換えてArgo CDでデプロイできるようにします。

# Point at latest release
$ export RELEASE=$(curl https://storage.googleapis.com/kubevirt-prow/release/kubevirt/kubevirt/stable.txt)
# Deploy the KubeVirt operator
$ kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/${RELEASE}/kubevirt-operator.yaml
# Create the KubeVirt CR (instance deployment request) which triggers the actual installation
$ kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/${RELEASE}/kubevirt-cr.yaml
# wait until all KubeVirt components are up
$ kubectl -n kubevirt wait kv kubevirt --for condition=Available

↓ kustomization.yamlに書き換える

---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: kubevirt
resources:
  - https://github.com/kubevirt/kubevirt/releases/download/v1.1.0/kubevirt-operator.yaml
  - https://github.com/kubevirt/kubevirt/releases/download/v1.1.0/kubevirt-cr.yaml

クラスタにデプロイする

おうちクラスタではArgo CDを使ってマニフェストを反映しています。 なので、Argo CD Applicationを作成してデプロイします。

---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: kubevirt
  finalizers:
    - resources-finalizer.argocd.argoproj.io
spec:
  project: default
  sources:
    - path: manifests/kubevirt/base
      repoURL: https://github.com/corrupt952/home
  destination:
    server: "https://kubernetes.default.svc"
    namespace: kubevirt
  syncPolicy:
    syncOptions:
      - CreateNamespace=true
    automated:
      prune: true
      selfHeal: true

後はデフォルトブランチにプッシュすれば、弊宅では反映されます。

これで諸々の作業は完了です。 krew経由でvirtctlをインストールしておくと楽なのでオススメしておきます。

余談

弊宅のクラスタネットワークはサブネットが異なるため、ただのsshだけでは接続ができないのでvirtctlを使ってsshをしています。

kubectl virt ssh cirros@testvm

似たようなネットワーク構成の人がいれば参考にまでにどうぞ