Pour les prochains cours; installation de K8s, NFS, les volumes et Ingress Controllers, nous aurons besoin de trois machines virtuelles de type Ubuntu serveur 20.04.
Il est possible de ‘scripter‘, avec Vagrant, la création, la configuration et l’installation de machines virtuelles, incluant les packages supplémentaires comme par exemple, ‘apt install docker‘.
En procédant ainsi, nous n’aurons pas à créer et à installer manuellement les VM.
En pré-requis, il faut installer un hyperviseur de virtualisation. Dans le cas qui nous intéresse, nous utiliserons Virtualbox.
Je vous demande d’installer Vagrant, et à partir d’un fichier Vagrantfile, fournit avec ce document, de créer les trois VM nécessaires pour la suite de nos apprentissages.
Si jamais, pour une raison technique, vous n’arrivez pas à démarrer les trois VM avec Vagrant, alors vous devrez installer manuellement trois serveurs Ubuntu dans VirtualBox.
Dans ce cas, je vous demande de communiquer avec moi, via Teams, pour recevoir du support technique.
Note: Vagrant est disponible pour Windows, MacOS et Linux.
# -*- mode: ruby -*- # vi: set ft=ruby : # ========================================================================= # Nom du fichier: Vagrantfile # Auteur: Alain Boudreault # Date: 2021.04.07 # ------------------------------------------------------------------------- # M-A-J: 2021.04.15 - Ajout du routage des paquets IP et du DNS local # ------------------------------------------------------------------------- # Démarrage: vagrant up # Lister les VM: vagrant global-status # Login via vagrant: vagrant ssh nomDeLaMachine # Pour passer en mode root: sudo -s # Pour permettre ssh: sudo passwd vagrant # # Login direct: ssh vagrant@ip (password=vagrant) # Arrêt des VM: vagrant halt # Suppression des VM: vagrant destroy # ========================================================================= # https://raw.githubusercontent.com/ve2cuy/4204d4/main/module06/Vagrantfile # --------------- # Voici un exemple K8s complet: https://github.com/ansilh/k8s-vagrant # ========================================================================= Vagrant.configure("2") do |config| # master server config.vm.define "k8s-master" do |kmaster| kmaster.vm.synced_folder '.', '/vagrant', disabled: true kmaster.vm.box = "ubuntu/focal64" kmaster.vm.hostname = "k8s-master" # Installer docker sur la VM kmaster.vm.provision "docker" kmaster.vm.box_url = "ubuntu/focal64" kmaster.vm.network :private_network, ip: "192.168.56.101" kmaster.vm.provider :virtualbox do |v| v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"] v.customize ["modifyvm", :id, "--natdnsproxy1", "on"] v.customize ["modifyvm", :id, "--memory", 2048] v.customize ["modifyvm", :id, "--name", "k8s-master"] v.customize ["modifyvm", :id, "--cpus", "2"] end # Activation du ssh hors vagrant: config.vm.provision "shell", inline: <<-SHELL sed -i 's/ChallengeResponseAuthentication no/ChallengeResponseAuthentication yes/g' /etc/ssh/sshd_config service ssh restart # Activer le routage des paquets IP entre les réseaux echo "[SCRIPT][INFO] Activer le routage des paquets IP entre les réseaux:" sysctl -w net.ipv4.ip_forward=1 sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf echo "[SCRIPT][INFO] Activer la résolution DNS pour les applications locales" systemctl enable systemd-resolved.service systemctl start systemd-resolved.service SHELL end # Création des noeuds ouvriers: numberSrv=2 (1..numberSrv).each do |i| config.vm.define "k8s-node#{i}" do |knode| knode.vm.synced_folder '.', '/vagrant', disabled: true knode.vm.box = "ubuntu/focal64" knode.vm.hostname = "k8s-node#{i}" # Installer docker sur la VM knode.vm.provision "docker" knode.vm.network "private_network", ip: "192.168.56.10#{i+1}" knode.vm.provider "virtualbox" do |v| v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"] v.customize ["modifyvm", :id, "--natdnsproxy1", "on"] v.name = "k8s-node#{i}" v.memory = 1024 v.cpus = 1 end # Activation du ssh hors vagrant: config.vm.provision "shell", inline: <<-SHELL sed -i 's/ChallengeResponseAuthentication no/ChallengeResponseAuthentication yes/g' /etc/ssh/sshd_config service ssh restart # Activer le routage des paquets IP entre les réseaux echo "[SCRIPT][INFO] Activer le routage des paquets IP entre les réseaux:" sysctl -w net.ipv4.ip_forward=1 sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf echo "[SCRIPT][INFO] Activer la résolution DNS pour les applications locales" systemctl enable systemd-resolved.service systemctl start systemd-resolved.service SHELL end end end
NOTE: Il est possible d’obtenir la version la plus récente de ce Vagrantfile ainsi:
wget https://raw.githubusercontent.com/ve2cuy/4204d4/main/module06/Vagrantfile # Ou curl https://raw.githubusercontent.com/ve2cuy/4204d4/main/module06/Vagrantfile > Vagrantfile
À partir, absolument, du dossier abritant le fichier ‘Vagrantfile’;
$ vagrant up
Si cette opération affiche un message d’erreur, il faut m’en aviser.
NOTE IMPORTANTE: L’opération précédente ne va fonctionner que si Vagrant est installé dans votre OS et peut durer de nombreuses minutes.
Suite à quoi, il devrait y avoir TROIS (3) VM Ubuntu en marche sur votre ordinateur.
Il est possible de vérifier avec la commande suivante:
alain@k8s:~$ vagrant status Current machine states: k8s-master running (virtualbox) k8s-node1 running (virtualbox) k8s-node2 running (virtualbox)
Pour tester une VM, il suffit d’y ouvrir une session ssh avec la commande:
$ vagrant ssh k8s-master
NOTE: À partir d’un même réseau IP, il est aussi possible de se connecter directement à une VM Vagrant:
monPC $ ssh vagrant@192.168.56.101 # mot de passe: vagrant # Pour ce faire, il faut avoir avec une carte d'interface réseau dans la même classe IP que la CIR de la VM.
Pour arrêter les VM, sans les effacer;
vagrant halt # Si la VM ne répond pas alors vagrant halt --force
vagrant destroy
NOTE: Cette opération est irréversible. Toutes les modifications apportées aux VM seront perdues.
vagrant up
Pensez à faire un arrêt des VM Vagrant car elles consomment des ressources de votre ordinateur. Voir 3.2.
ATTENTION: Toutes les commandes du cli de Vagrant doivent être exécutées à partir du dossier qui contient le fichier ‘Vagrantfile‘.