
Installer KubeVirt se fait en deux temps : on déploie d'abord son opérateur, puis on crée la ressource KubeVirt qui déclenche l'installation des composants. Ce guide couvre le cas le plus courant en apprentissage : un cluster de lab (ici k3d) sur une machine sans /dev/kvm, grâce à l'émulation logicielle. Public : débutant à intermédiaire sur Kubernetes. Version : v1.8.
Vous allez déployer l'opérateur, activer l'émulation, vérifier que KubeVirt est prêt, installer virtctl, et valider le tout avec une VM qui démarre réellement.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Déployer l'opérateur KubeVirt et les composants.
- Activer l'émulation logicielle pour un lab sans
/dev/kvm. - Vérifier l'installation et installer
virtctl. - Valider avec une première VM.
Prérequis
Section intitulée « Prérequis »- Un cluster Kubernetes de lab. Ici k3d ; minikube ou kind conviennent aussi.
kubectlconfiguré sur ce cluster.- Accès sortant pour tirer les images depuis
quay.ioet GitHub.
Créer le cluster de lab
Section intitulée « Créer le cluster de lab »Un cluster k3d jetable suffit. KubeVirt a besoin de pods privilégiés, ce que k3d autorise par défaut.
k3d cluster create kubevirt-lab --waitkubectl config use-context k3d-kubevirt-labInstaller KubeVirt
Section intitulée « Installer KubeVirt »-
Déployer l'opérateur. On épingle la dernière version stable, exposée par le projet.
Fenêtre de terminal VER=$(curl -sL https://storage.googleapis.com/kubevirt-prow/release/kubevirt/kubevirt/stable.txt)echo "$VER" # v1.8.4kubectl apply -f "https://github.com/kubevirt/kubevirt/releases/download/${VER}/kubevirt-operator.yaml"kubectl -n kubevirt rollout status deploy/virt-operator --timeout=120s# deployment "virt-operator" successfully rolled out -
Activer KubeVirt avec l'émulation. La ressource
KubeVirtpilote l'installation ; le champuseEmulationbascule en mode logiciel.kubevirt-cr.yaml apiVersion: kubevirt.io/v1kind: KubeVirtmetadata:name: kubevirtnamespace: kubevirtspec:configuration:developerConfiguration:useEmulation: true # lab sans /dev/kvm : QEMU en mode TCGFenêtre de terminal kubectl apply -f kubevirt-cr.yamlkubectl -n kubevirt wait kv kubevirt --for=condition=Available --timeout=360s# kubevirt.kubevirt.io/kubevirt condition metLe déploiement tire plusieurs images ; comptez quelques minutes au premier lancement.
-
Vérifier l'état. La phase passe à
Deployedet les composants tournent.Fenêtre de terminal kubectl get kubevirt -n kubevirt# NAME AGE PHASE# kubevirt 2m52s Deployedkubectl get pods -n kubevirt# virt-api-... 1/1 Running# virt-controller-... 1/1 Running (x2)# virt-handler-... 1/1 Running (DaemonSet, 1 par nœud)# virt-operator-... 1/1 Running (x2)Chaque composant a un rôle :
virt-api(API agrégée),virt-controller(cycle de vie des VM),virt-handler(agent par nœud qui pilote libvirt),virt-operator(installe et met à jour l'ensemble).
Installer virtctl
Section intitulée « Installer virtctl »virtctl est la CLI compagnon pour piloter les VM (console, VNC, start/stop, migration). On installe le binaire de la même version.
curl -sL -o virtctl \ "https://github.com/kubevirt/kubevirt/releases/download/${VER}/virtctl-${VER}-linux-amd64"chmod +x virtctl && sudo mv virtctl /usr/local/bin/
virtctl version --client# Client Version: ... GitVersion:"v1.8.4" ...Elle s'installe aussi en plugin kubectl via krew (kubectl krew install virt), auquel cas on l'appelle avec kubectl virt ....
Valider avec une première VM
Section intitulée « Valider avec une première VM »Le vrai test : une VM qui démarre. On utilise une image cirros minuscule, empaquetée en containerDisk (un disque livré dans une image de conteneur).
apiVersion: kubevirt.io/v1kind: VirtualMachinemetadata: name: testvmspec: runStrategy: Always template: spec: domain: devices: disks: - name: containerdisk disk: bus: virtio resources: requests: memory: 128Mi volumes: - name: containerdisk containerDisk: image: quay.io/kubevirt/cirros-container-disk-demokubectl apply -f testvm.yamlkubectl get vm,vmi# virtualmachine.../testvm Running True# virtualmachineinstance.../testvm Running 10.42.0.17 ... TrueLa VM atteint l'état Running et le VMI (l'instance en cours) reçoit une adresse IP dans le réseau de pods. En émulation, le boot est lent mais bien réel. Nettoyage : kubectl delete vm testvm.
Dépannage
Section intitulée « Dépannage »- La VMI reste en
Scheduling/Pending: souvent l'émulation n'est pas activée alors que/dev/kvmest absent. VérifiezuseEmulation: truedans la CR, puiskubectl describe vmi testvm. virt-handlerenCrashLoopBackOff: le cluster n'autorise pas les pods privilégiés. Sur k3d/k3s c'est bon par défaut ; sur un cluster durci, il faut l'autoriser pour le namespacekubevirt.- Images non tirées :
quay.ioinaccessible. Vérifiez la sortie réseau du cluster. - Boot très lent : normal en TCG. Pour des perfs réelles, un nœud avec
/dev/kvmet sansuseEmulation.
À retenir
Section intitulée « À retenir »- KubeVirt s'installe en deux temps : opérateur puis ressource KubeVirt.
- L'émulation logicielle (
useEmulation: true) permet un lab sans virtualisation matérielle. kubectl get kubevirtdoit afficher Deployed et les podsvirt-*Running.virtctlest la CLI indispensable pour piloter les VM.- Une VM containerDisk cirros valide l'installation de bout en bout.