ひょんなことで。。。「ひょんなことで」って言葉はどこからきた?調べてみたらアブラムシから来ているらしい。へぇー。(https://www.fujiseishin-jh.ed.jp/field_diary/2013/01/5175/ )
「竹の花が咲くと竹が枯れる」のを知ったくらいびっくりしたよw
もとい。
ひょんなことで、kubevirtを試すことに。kubevirtのクラスタリソースを確認したいだけなので、簡単に立ててみた。
閑話休題
環境
Ubuntu Server 20.04.5 amd64 / Docker / Kind 0.16
VMで建てたが、VMでKVMが動かせるようにNestの設定をしている。
DockerやKindのインストール方法は割愛。後でK3sでも試してみたが動作した。
Kubevirtなので、KVMがいる。
cat /proc/cpuinfo | grep vmx
apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils ; apt clean ; apt update
reboot
KVMの環境確認
kvm-ok
lsmod | grep kvm
virt-host-validate qemu
クラスタは以下のコマンドで立てた。
kind create cluster --name demo --image kindest/node:v1.23.12 --wait 600s
Kubevirtを以下のページを参考にして、kubevirtをインストール
https://kubevirt.io/quickstart_kind/
export VERSION=$(curl -s https://api.github.com/repos/kubevirt/kubevirt/releases | grep tag_name | grep -v -- '-rc' | sort -r | head -1 | awk -F': ' '{print $2}' | sed 's/,//' | xargs)
echo $VERSION
kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/${VERSION}/kubevirt-operator.yaml
kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/${VERSION}/kubevirt-cr.yaml
kubectl -n kubevirt wait kv kubevirt --for condition=Available
しかし、一向にインストールができない。
pod/virt-handlerがCrashLoopBackOffになってしまう。
さらに kubectl get kubevirts -n kubevirt を実行すると、ずっとDeployingのままで、一向にDeployedにならない。
また kubectl api-resources を実行すると
error: unable to retrieve the complete list of server APIs: subresources.kubevirt.io/v1: the server is currently unable to handle the request, subresources.kubevirt.io/v1alpha3: the server is currently unable to handle the request
と表示されてしまう。
解決方法
vi /etc/apparmor.d/usr.sbin.libvirtd
/usr/libexec/qemu-kvm PUx, を追加する。
その後、apparmerをリロード
systemctl reload apparmor.service
治った。
解決の際に参考にしたページ
https://github.com/kubevirt/kubevirt/issues/7771#issuecomment-1131213000
https://github.com/kubevirt/kubevirt/issues/4303#issuecomment-830365183
どうやら、Ubuntu 20.04特有の問題だった様子。再度やったときは、Kubevirtの構築前にこれをやれば、問題なく進んだ。
これで以下のコマンドが通り、クライアントがインストールできる。
kubectl get kubevirt.kubevirt.io/kubevirt -n kubevirt -o=jsonpath="{.status.phase}"
kubectl -n kubevirt get pod,daemonsets,deployments.apps
VERSION=$(kubectl get kubevirt.kubevirt.io/kubevirt -n kubevirt -o=jsonpath="{.status.observedKubeVirtVersion}")
ARCH=$(uname -s | tr A-Z a-z)-$(uname -m | sed 's/x86_64/amd64/') || windows-amd64.exe
echo ${ARCH}
curl -L -o virtctl https://github.com/kubevirt/kubevirt/releases/download/${VERSION}/virtctl-${VERSION}-${ARCH}
chmod +x virtctl
sudo install virtctl /usr/local/bin
動作確認
以下のページで動作確認ができる。
https://kubevirt.io/labs/kubernetes/lab1
kubectl apply -f https://kubevirt.io/labs/manifests/vm.yaml
cirrosが動いた。cirrosを触ったのは、OpenStack以来だw
と言うわけで動作確認完了。