= 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...
* [[https://www.vagrantup.com/docs/providers/basic_usage]]
* box: máquina virtual que me puedo descargar (para uno a varios providers, no intercambiable)
* [[https://app.vagrantup.com/boxes/search]]
=== 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)
* [[https://www.vagrantup.com/docs/provisioning]]
* 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
* [[https://www.vagrantup.com/docs/providers/virtualbox/configuration]]
* **check_guest_additions**
* **customize**
* **memory**
* **cpus**
* **linked_clone**
* **default_nic_type**
* **name**
=== snapshots
* ''vagrant snapshot''
* ''vagrant snapshot save ''
* ''vagrant snapshot restore ''
* ''vagrant snapshot list''
* ''vagrant snapshot delete ''
* ''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
* [[https://www.vagrantup.com/docs/providers/virtualbox/configuration]]
* 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)