TechLunch

The free lunch is over.

Kubevirt: VMを管理するためのKubernetesアドオン

コンテナと同じようにVMKubernetesで管理するためのアドオンであるKubevirtについて、Kubernetsブログで紹介されていたので、試してみました。

Kubevirtは、Custom Resource Definitions (CRDs)などを利用して, Kubernetesを拡張しており、Podと同じようにVMを管理することができます。

準備

techlunch.hatenablog.com

Minikubeをインストールしてる前提となるので、上の記事などを参考にインストールします。 私の環境は、VirtualBoxを利用しており、nested virtualizationが使えないため、次のコマンドでエミュレーションを有効化します。

$ kubectl create configmap -n kube-system kubevirt-config --from-literal debug.allowEmulation=true

KubeVirt関連コンポーネントをPodとして実行します。

$ export VERSION=v0.7.0-alpha.2
$ kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/$VERSION/kubevirt.yaml

次のコマンドでPodが立ち上がっていることが確認できます。

$ kubectl get pods --namespace=kube-system
NAME                                    READY     STATUS    RESTARTS   AGE
...
virt-api-7797f95869-9pvg7               1/1       Running   0          11m
virt-api-7797f95869-lhqn7               1/1       Running   0          11m
virt-controller-69cc6b4897-jnvl7        1/1       Running   0          11m
virt-controller-69cc6b4897-zq2qx        1/1       Running   0          11m
virt-handler-fjttr                      1/1       Running   0          11m

VMのデプロイ

次のコマンドを見ればわかる通り、Podと同じようにKubernetesの一リソースとして管理が可能です。

# VM作成
$ kubectl apply -f https://raw.githubusercontent.com/kubevirt/demo/master/manifests/vm.yaml

# 確認
$ kubectl get vms
NAME      CREATED AT
testvm    1m
$ kubectl get vms -o yaml
...

また、本記事では割愛しますが、virtctlをインストールすることで、Kubernetesで作成したVMにアクセスしたりすることが可能です。これは、Podとして作成したコンテナにDockerコマンドを利用してアクセスするのと同じように使うことができます。

今回はKubevirtをほんの少し触った程度で終わります。しかし、今後Kubernetesの導入を考えていく上でレガシーなVM資産との共存を考えていく必要が出てくることを考慮し、別の記事で詳細に触れたいと思っています。