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 Vagrantfilevagrant 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 usarconfig.vm.box_url
: dirección donde se puede encontrar este box. No necesario en el hub de Vagrantconfig.vm.box_check_update
: si TRUE, comprueba y actualiza el BOX cada vez que se hacevagrant 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áticaconfig.vm.network «private_network», type:«dhcp»
: las IPs la reparte el provisionerconfig.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)