Terraform
Allikas: Imre kasutab arvutit
Mine navigeerimisribaleMine otsikasti
Sissejuhatus
Terraform https://www.terraform.io/ ...
Mõisted
- ias - infrastructure as code
Tööpõhimõte
töökohaarvuti 1 tf state arvuti töökohaarvuti 2 /usr/local/bin/terraform postgresql baas /usr/local/bin/terraform _____ _____ _____ | | | | | | | | | | | | |_____| |_____| |_____| | | | | | | ----|---------|-------------|------------------------|----- | | ...... | -----|------|--------------|----------------------|---------------------|------ | | | | __|__ __|__ __|__ __|__ | | | | | | | | | | | | | | | | |_____| |_____| |_____| |_____| proxmox 1 proxmox 2 proxmox 3 proxmox 4 https://192.168.10.191, 2, 3, 4:8006/api/
kus
- proxmox 1, 2, 3 ja 4 on host arvutid, millel töötavad virtuaalsed arvutid
- töötakoharvutites 1 ja 2 kasutatakse terraform tarkvara
- terraform state arvutis on salvestatud terraform ettekujutus serveritesse tekitatud virtuaalsete arvutite koosseisust
- terraform peab arvet nii virtuaalsete arvutite hulga ja asukoha üle kui ka virtuaalsete arvutite sisu üle (virtuaalse riistvara kooseis, ip seadistus jms)
Uus virtuaalne arvuti kujuneb kolme sisendi alusel
- varem ettevalmistatud cloud-init võimeline proxmox qemu (ehk kvm) template
- proxmox snippets cloud-init seadistused
- terraform
Paigaldamine
2020
Terraform tarkvara jagatakse aadressil https://www.terraform.io/downloads.html ühe zipitud binary faili kujul. nt 2020 aasta suvel sobib kopeerida
# cd /var/tmp # wget https://releases.hashicorp.com/terraform/0.12.28/terraform_0.12.28_linux_amd64.zip
Paigaldamiseks tuleb see lahti pakkida
# unzip terraform_0.12.28_linux_amd64.zip
ja kopeerida nt kataloogi /usr/local/bin
# cp terraform /usr/local/bin # chmod 0755 /usr/local/bin/terraform
Tulemusena saab nt küsida tarkvara versiooni
imre@deb11-tookoht:~$ terraform -v Terraform v0.12.28 imre@deb11-tookoht:~$ ldd /usr/local/bin/terraform not a dynamic executable imre@deb11-tookoht:~$ file /usr/local/bin/terraform /usr/local/bin/terraform: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, Go BuildID=oMODVmlDWDtedK13OzTZ/3LrauOon2ma8s4bZsv2i/YIWvbuMZtz346Y44Ol4L/B0x9UGkPWCqOH_nEZK7-, not stripped
2022
TODO
cloudinit template ettevalmistamine
TODO
valmis cloudinit template kasutamine
proxmox# wget https://cdimage.debian.org/cdimage/openstack/current-10/debian-10-openstack-amd64.qcow2
proxmox# cat /root/qm-create-9000 qm create 9000 -name debian-10-template -memory 1024 -net0 virtio,bridge=vmbr0 -cores 1 -sockets 1 -cpu cputype=kvm64 -description "Debian 10 cloud image" -kvm 1 -numa 1 qm importdisk 9000 debian-10-openstack-amd64.qcow2 vgdata qm set 9000 -scsihw virtio-scsi-pci -virtio0 vgdata:vm-9000-disk-0 qm set 9000 -serial0 socket qm set 9000 -boot c -bootdisk virtio0 qm set 9000 -agent 1 qm set 9000 -hotplug disk,network,usb,memory,cpu qm set 9000 -vcpus 1 qm set 9000 -vga qxl qm set 9000 -name debian-10-template qm set 9000 -ide2 vgdata:cloudinit
proxmox# sh qm-create-9000 importing disk 'debian-10-openstack-amd64.qcow2' to VM 9000 ... WARNING: dos signature detected on /dev/data/vm-9000-disk-0 at offset 510. Wipe it? [y/n]: [n] Aborted wiping of dos. Logical volume "vm-9000-disk-0" created. 1 existing signature left on the device. transferred: 0 bytes remaining: 2147483648 bytes total: 2147483648 bytes progression: 0.00 % transferred: 21474836 bytes remaining: 2126008812 bytes total: 2147483648 bytes progression: 1.00 % transferred: 42949672 bytes remaining: 2104533976 bytes total: 2147483648 bytes progression: 2.00 % ... Successfully imported disk as 'unused0:vgdata:vm-9000-disk-0' update VM 9000: -scsihw virtio-scsi-pci -virtio0 vgdata:vm-9000-disk-0 update VM 9000: -serial0 socket update VM 9000: -boot c -bootdisk virtio0 update VM 9000: -agent 1 update VM 9000: -hotplug disk,network,usb,memory,cpu update VM 9000: -vcpus 1 update VM 9000: -vga qxl update VM 9000: -name debian-10-template update VM 9000: -ide2 vgdata:cloudinit Logical volume "vm-9000-cloudinit" created. WARNING: iso9660 signature detected on /dev/data/vm-9000-cloudinit at offset 32769. Wipe it? [y/n]: [n] Aborted wiping of iso9660. 1 existing signature left on the device.
terraform seadistamine ja käivitamine
Terraformi faili sisu võib olla nt selline
# cat provider-proxmox.tf provider "proxmox" { pm_parallel = 1 pm_tls_insecure = true pm_api_url = "https://192.168.110.171:8006/api2/json" pm_password = "parool" pm_user = "root@pam" } resource "proxmox_vm_qemu" "proxmox_vm" { count = "5" name = "tf-vm-${count.index + 1}" target_node = "ceph-pm0" desc = "Debian 10 cloud image" clone = "debian-cloudinit" os_type = "cloud-init" cores = "1" sockets = "1" cpu = "kvm64" memory = "2048" scsihw = "virtio-scsi-pci" bootdisk = "virtio0" agent = "1" network { id = 0 model = "virtio" bridge = "vmbr0" } disk { id = 0 size = 2 type = "virtio" storage = "vgdata" storage_type = "lvm" iothread = true } lifecycle { ignore_changes = [ network, ] } # cicustom = "user=local:snippets/userconfig-${count.index + 1}.yaml" ipconfig0 = "ip=192.168.110.6${count.index + 1 }/24,gw=192.168.110.189" nameserver = "8.8.8.8" searchdomain = "sise.moraal.ee" ciuser = "debian" cipassword = "parool123" sshkeys = <<EOF ssh-rsa .... EOF }
kus
- count - tekitatavate virtuaalsete arvutite arv
- TODO
Kasutamiseks sobib öelda
$ terraform apply
Tulemusena tekib
- 5 virtuaalset arvutit
- terraform.tfstate fail (json formaadis)
Kasutamine - PostgreSQL
# cat provider.tf provider "postgresql" { host = "192.168.110.51" port = 5432 database = "postgres" username = "postgres" password = "parool" sslmode = "require" connect_timeout = 15 } resource "postgresql_database" "my_db" { name = "my_db" # owner = "my_role" template = "template0" lc_collate = "C" connection_limit = -1 allow_connections = true } resource "postgresql_database" "my_db2" { name = "my_db2" # owner = "my_role" template = "template0" lc_collate = "C" connection_limit = -1 allow_connections = true }
# terraform plan -out planfile # terraform apply --auto-approve