= 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)