Aller au contenu principal

Multiple disques pour VM KVM et Vagrant

· 3 minutes de lecture
Stéphane ROBERT
Consultant DevOps

Dans un mes précédents billets, je vous proposais de vous monter un environnement de dev Linux sous Windows utilisant vagrant et libvirt/kvm. Et après une introduction à l'utilisation de vagrant je vous propose ici de provisionner des disques supplémentaires et de les intégrer à vos VM via ansible.

J'utilise packer pour construire mes box vagrant intégrant tous les outils que j'utilise pour mettre au point mes rôles et playbooks Ansible entre autre. Mais par souci de place, je les ai provisionné avec seulement 5Go de disque. Mais parfois je dois construire des machines intégrant plusieurs applications ou utilisant des belles bases de données. Alors je vous propose de vous montrer comment ajouter facilement du disque à vos box vagrant.

Voici le fichier Vagrantfile ajoutant deux disques à ma box ol8.

Vagrant.configure("2") do |config|

  config.vm.box = "ol8"

  config.vm.provider "libvirt" do |hv|
    hv.cpus = "5"
    hv.memory = "6656"
    hv.storage :file, :size => "20G"
    hv.storage :file, :size => "10G"
  end
  config.vm.synced_folder '.', '/vagrant', disabled: true
  config.vm.define "host1" do |host1|
    host1.vm.network :forwarded_port, guest: 80, host: 8080
    host1.vm.network :private_network, ip: "192.168.3.10"
    host1.vm.hostname = "host1"
    host1.vm.provision "ansible" do |a|
      a.verbose = "v"
      a.playbook = "provision-playbook.yml"
    end
  end
end

Dans un premier temps il faut ajouter dans la partie provider libvirt ajouter la création de deux disques :

  config.vm.provider "libvirt" do |hv|
    hv.cpus = "5"
    hv.memory = "6656"
    hv.storage :file, :size => "20G"
    hv.storage :file, :size => "10G"
  end

Ensuite il suffit soit d'ajouter ces disques à vos volumes logiques soit créer des partitions. Je le fais avec Ansible en installant les collections de la communauté.

ansible-galaxy collection install -f community.general:==2.0.0

Ici je demande d'installer la version 2.0.0 en forçant l'installation, car parfois il refuse de mettre à jour la collection.

Ensuite dans votre playbook pour ajouter un disque à un volume logique existant. Il faut dans un premier temps créer la partition en le flagant lvm, puis l'assigner au volume groupe, au volume logique et pour finir par étendre la partition ici au format xfs.

  - name: create vdc1
    parted:
      device: /dev/vdc
      number: 1
      state: present
      flags: [ lvm ]

  - name: add sdc1 to volume group
    lvg:
      vg: ol_ol8
      pvs:
        - /dev/vdc1
        - /dev/vda2
      pesize: 13.88G

  - name: add sdc1
    lvol:
      vg: ol_ol8
      lv: root
      size: 13G

  - name: grow xfs
    filesystem:
      dev: /dev/mapper/ol_ol8-root
      fstype: xfs
      resizefs: yes

Une autre possibilité est de ne pas utiliser des volumes logiques, mais de formater des partitions classiques et de les monter. Ce qui donne dans le playbook ceci, je coupe le disque vdb en partition égale et je les monte sur deux filesystem (/opt /data) :

  - name: partition 1
    parted:
      device: /dev/vdb
      number: 1
      state: present
      part_start: 0%
      part_end: 50%

  - name: partition 2
    parted:
      device: /dev/vdb
      number: 2
      state: present
      part_start: 50%
      part_end: 100%

  - name: Create a ext4 filesystem on /dev/sdb1
    filesystem:
      fstype: ext4
      dev: /dev/vdb1

  - name: Create a ext4 filesystem on /dev/sdb1
    filesystem:
      fstype: ext4
      dev: /dev/vdb2

  - name: mount /opt
    mount:
      path: /opt
      src: /dev/vdb1
      fstype: ext4
      state: mounted

  - name: mount /data
    mount:
      path: /data
      src: /dev/vdb2
      fstype: ext4
      state: mounted

Voilà ça vous évitera de chercher. À bientôt.