Summary
Comment exécuter minikube dans une machine virtuelle Ubuntu vm_VT-X/AMD-v
En tant que développeur, j’aime avoir un environnement reproductible. Mes clients fournissent souvent les spécifications techniques de leur environnement et j’aime les reproduire localement pour être au plus proche de leur environnement.
Pour pouvoir installer minikube sur une machine virtuelle, exécutant virtualbox, vous devez utiliser le bon pilote (aucun).
Dans ce tutoriel, je vais vous montrer comment installer et configurer minikube sur la machine virtuelle. Le système d’exploitation sera Ubuntu.
TL;DR
Pour installer minikube sur une machine virtuelle exécutant virtualbox, suivez ces étapes :
-
Installez minikube comme vous le feriez normalement. Consultez mon tutoriel ici
- Configurez minikube pour qu’il n’utilise aucun pilote. Le pilote none ne nécessite aucune virtualisation imbriquée.
- Installez docker-ce en suivant les instructions de votre système d’exploitation. (le mien est ubuntu)
- Activez docker et démarrez-le
- Démarrez minikube
Le problème auquel je faisais face
J’étais en train d’installer minikube dans une machine virtuelle virtualbox exécutant le système d’exploitation Ubuntu. J’ai activé VT-X/AMD-v pour la machine virtuelle.
Mais j’obtiens l’erreur suivante lorsque j’essaie de démarrer mon minikube.
# minikube start
Vous obtenez cette sortie :
Starting local Kubernetes cluster...
E0217 15:00:35.395801 3869 start.go:107] Error starting host: Error creating host: Error with pre-create check: "This computer doesn't have VT-X/AMD-v enabled. Enabling it in the BIOS is mandatory".
Retrying.
E0217 15:00:35.396019 3869 start.go:113] Error starting host: Error creating host: Error with pre-create check: "This computer doesn't have VT-X/AMD-v enabled. Enabling it in the BIOS is mandatory"
================================================================================
An error has occurred. Would you like to opt in to sending anonymized crash
information to minikube to help prevent future errors?
To opt out of these messages, run the command:
minikube config set WantReportErrorPrompt false
================================================================================
Please enter your response [Y/n]:
Ce qui se passe?
VirtualBox ne prend pas en charge VT-X/AMD-v dans la virtualisation imbriquée. Vous pouvez en savoir plus ici [^2]
Il existe donc peu d’approches pour résoudre ce problème :
- Exécutez directement minilube sur ma machine, pas de VM virtualbox.
- Utilisez un hyperviseur différent prenant en charge VT-X/AMD-v dans la virtualisation imbriquée (comme Xen, KVM ou VMware).
- Exécutez Minikube directement à l’aide de Docker et de l’option de pilote “none”
Les solutions
Il y a peu de solutions que je pourrais mettre en œuvre.
Installer directement minikube sur ma machine
Il existe des binaires compilés pour Windows, MacOs et Linux, donc j’aurais pu installer directement minikube sur mon hôte.
Avantages
- Facile à installer
Les inconvénients
- Aimé à mon ordinateur
- Besoin de réinstaller et de configurer si je change d’ordinateur ou si j’ai besoin de réinstaller le système d’exploitation.
- Je ne peux pas disposer d’un environnement de test comparable avant de déployer ma solution dans l’environnement du client.
Exécutez minikube avec le pilote none
La documentation de kubernetes indique :
Minikube prend également en charge une option –vm-driver=none qui exécute les composants Kubernetes sur l’hôte et non sur une VM. L’utilisation de ce pilote nécessite Docker et un environnement Linux, mais pas un hyperviseur [^1].
- Installez docker sur la machine virtuelle VirtualBox
- Configurez minikube pour utiliser le pilote
none
.
minikube config set vm-driver none
- Activer Docker sur la machine virtuelle
systemctl enable docker
Vous obtiendrez cette sortie.
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
- Exécutez le menu fixe
systemctl start docker
- Démarrer minikube
minikube start
Vous obtiendrez cette sortie.
Starting local Kubernetes v1.10.0 cluster...
Starting VM...
Getting VM IP address...
Moving files into cluster...
Downloading kubeadm v1.10.0
Downloading kubelet v1.10.0
Finished Downloading kubelet v1.10.0
Finished Downloading kubeadm v1.10.0
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
===================
WARNING: IT IS RECOMMENDED NOT TO RUN THE NONE DRIVER ON PERSONAL WORKSTATIONS
The 'none' driver will run an insecure kubernetes apiserver as root that may leave the host vulnerable to CSRF attacks
When using the none driver, the kubectl config and credentials generated will be root owned and will appear in the root home directory.
You will need to move the files to the appropriate location and then set the correct permissions. An example of this is below:
sudo mv /root/.kube $HOME/.kube # this will write over any previous configuration
sudo chown -R $USER $HOME/.kube
sudo chgrp -R $USER $HOME/.kube
sudo mv /root/.minikube $HOME/.minikube # this will write over any previous configuration
sudo chown -R $USER $HOME/.minikube
sudo chgrp -R $USER $HOME/.minikube
This can also be done automatically by setting the env var CHANGE_MINIKUBE_NONE_USER=true
Loading cached images from config file.
Utiliser un autre hyperviseur
VirtualBox est un hyperviseur que vous installez sur votre machine pour héberger les machines virtuelles. Comme il ne supporte pas VT-X/AMD-v en virtualisation imbriquée, vous pouvez utiliser les alternatives :
-Xen -KVM -VMware
- etc.
Conclusion
Vous pouvez installer minikube dans une VM. Mais pour le faire fonctionner, vous devez faire quelques ajustements. Mais il est possible de le réaliser.
L’exécuter à l’intérieur d’une VM vous permet d’automatiser votre workflow de développement. Vous pouvez même penser à des outils comme vagrant pour provisionner automatiquement votre machine virtuelle afin que vous disposiez d’un environnement reproductible.
Références
[^1]https://stackoverflow.com/a/52635546/5730444
[^2]https://www.virtualbox.org/ticket/4032