DevOps Sesión 9 (2022-03-09) Vagrant
Documentación relacionada
- 3-Topic 703 Machine Deployment/1-Material Curso Vagrant/
Vagrant
- ./2-Uso básico de vagrant.pdf
- ./Clase Resumen Vagrant.txt
- ./Herramientas Devops entornos de desarrollo en local, para programadores con Docker y Vagrant .pdf
- montar entornos en local (pensado para desarrollo)
- hypervisores (providers): VirtualBox (100%), VMWare, Parallels, Hyperv, cloud…
- box: máquina virtual que me puedo descargar (para uno a varios providers, no intercambiable)
primeros comandos
- vagrant init: crea fichero Vagrantfile
- vagrant up:- descarga box
- crea VM en provider
- natea red
- crea llaves públicas-privadas
- ssh en puerto 2222 (o superior si hay más máquinas)
 
- vagrant ssh- vagrant port
 
- vagrant status
- vagrant halt
- vagrant destroy -f- rm -rf .vagrant: directorio de trabajo
 
- vagrant global-status
vagrant box
- vagrant box list
- vagrant box remove …
- vagrant box outdated:- actualiza versiones de las boxes del escenario
- --global: de todos los escenarios
 
- vagrant reload: halt + up- no aplica cambios de provisioning
 
- vagrant provision: halt + up + cambios
package
- VBoxManage list vms
- vagrant package –base «…» –output maquina-vitual.box
- subir a repositorio local
provisionamiento
- pág 149 (Herramientas Devops entornos de desarrollo en local, para programadores con Docker y Vagrant .pdf)
- se aplica con:- vagrant provision
- vagrant reload --provision
 
- métodos:- inline:... config.vm.provision "shell", inline: <<-SHELL yum install httpd* mariadb* php php-mysql mod_ssl -y systemctl restart httpd systemctl enable httpd mkdir /codigo systemctl stop firewalld systemctl disable firewalld systemctl restart mariadb systemctl enable mariadb cd /var/www/html wget https://github.com/vrana/adminer/releases/download/v4.3.1/adminer-4.3.1-mysql.php mv adminer-4.3.1-mysql.php adminer.php SHELL ... 
- script
- puppet/ansible/chef
 
network
- pag 136 (Herramientas Devops entornos de desarrollo en local, para programadores con Docker y Vagrant .pdf)
- reenvio de puertos- sencillo de configurar, suficiente en la mayoría de casos, solo expone los puertos especificados
- ojo si los puertos ya están en uso en el host
- no se pueden usar puertos por debajo del 1024 (a menos que vagrant se ejecute como root - no recomendado)
 
- private network- redes para compartir con el anfitrion
- podemos añadir todas las VMs que queramos
- más complejo de configurar
- atención al direccionamiento estático
- Vagrant podría ser que no configurase los interfaces en el anfitrion (depende del SO)
 
- public network (modo bridge)- acceso a la red de la VM como si fuese una máquina física
- la opción más potente para acceder desde el exterior
 
carpetas compartidas
- pag 124 (Herramientas Devops entornos de desarrollo en local, para programadores con Docker y Vagrant .pdf)
- compartir datos entre el anfitrion y la máquina virtual
- config.vm.synced_folder- config.vm.synced_folder «.», «/vagrant», disabled: true: deshabilita la carpeta compartida /vagrant
- mount options:- fmode = file mode
- dmode = directory mode
 
 
- NFS, CIFS
provider
- aplicar cambios en la máquina virtual
- check_guest_additions
- customize
- memory
- cpus
- linked_clone
- default_nic_type
- name
snapshots
- vagrant snapshot
- vagrant snapshot save <nombre>
- vagrant snapshot restore <nombre>
- vagrant snapshot list
- vagrant snapshot delete <nombre>
- vagrant snapshot push
- vagrant snapshot pop
Vagrantfile
- ruby
- config.vm.box: box a usar
- config.vm.box_url: dirección donde se puede encontrar este box. No necesario en el hub de Vagrant
- config.vm.box_check_update: si TRUE, comprueba y actualiza el BOX cada vez que se hace- vagrant up
- config.vm.hostname: nombre de la máquina
provider
- config.vm.provider "virtualbox" do |vb| vb.gui = true vb.name = "nombre-maquina-virtual" vb.memory = "1024" end 
provision
- pag 149
- config.vm.provision "shell", inline <<-SHELL comando comando SHELL 
- config.vm.provision «shell», path:«miscript.sh»
- config.vm.provision "ansible_local" do |ansible| ansible.playbook = "playbook_centos_install_docker.yaml" end 
network
- config.vm.network «forwarded_port», guest: 80, host: 8080
- config.vm.network «forwarded_port», guest: 80, host: 8080, host_ip: «127.0.0.1»
- config.vm.network «private_network», ip: 192.168.1.1: ip estática
- config.vm.network «private_network», type:«dhcp»: las IPs la reparte el provisioner
- config.vm.network «public_network»
- config.vm.network «public_network», ip: «192.168.1.1»
- config.vm.network «public_network», use_dhcp_assigned_default_route: true
synced_folder
- config.vm.synced_folder «host_folder», «vm_folder»
- config.vm.synced_folder "sql", "/sql", owner: "root", group: "root", mount_options: ["dmode=700,fmode=644"] 
Extra
- Dashboard k8s (mejor que portainer)- 2-Despliegue de Aplicaciones Kubernetes/kubernetes-Helm3-API-Metrics-Server
 
- Ingress/LoadBalancer- 2-Despliegue de Aplicaciones Kubernetes/Laboratorio ingress kubernetes con Traefick.txt
- 2-Despliegue de Aplicaciones Kubernetes/1-Laboratorios Kubernetes 2020.pdf pag 197
 
- RBAC- documentación oficial (no docs)