Terraform: erinevus redaktsioonide vahel

Allikas: Imre kasutab arvutit
Mine navigeerimisribaleMine otsikasti
Resümee puudub
89. rida: 89. rida:
 
TODO
 
TODO
   
===valmis cloudinit template kasutamine===
+
===Valmis cloudinit template kasutamine===
   
proxmox# wget https://cdimage.debian.org/cdimage/openstack/current-10/debian-10-openstack-amd64.qcow2
+
proxmox# wget http://cloud.debian.org/images/cloud/bullseye/20220911-1135/debian-11-generic-amd64-20220911-1135.qcow2
  +
  +
Tõenäoliselt on abiks lisada tõmmisesse qemu-guest-agent
  +
  +
proxmox# apt install libguestfs-tools
  +
proxmox# virt-customize -a debian-11-generic-amd64-20220911-1135.qcow2 --install qemu-guest-agent
  +
  +
Tõmmise baasil virtuaalse arvuti template moodustamine, esmalt tekitakse vastavaid tegevusi sooritav skript
   
 
<pre>
 
<pre>
 
proxmox# cat /root/qm-create-9000
 
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 create 9000 -name debian-11-cloud template -memory 1024 -net0 virtio,bridge=vmbr0 -cores 1 -sockets 1 -cpu cputype=kvm64 -description "Debian 11 cloud image" -kvm 1
qm importdisk 9000 debian-10-openstack-amd64.qcow2 vgdata
+
qm importdisk 9000 debian-11-generic-amd64-20220911-1135.qcow2 pve
qm set 9000 -scsihw virtio-scsi-pci -virtio0 vgdata:vm-9000-disk-0
+
qm set 9000 -scsihw virtio-scsi-pci -virtio0 pve:vm-9000-disk-0
 
qm set 9000 -serial0 socket
 
qm set 9000 -serial0 socket
 
qm set 9000 -boot c -bootdisk virtio0
 
qm set 9000 -boot c -bootdisk virtio0
 
qm set 9000 -agent 1
 
qm set 9000 -agent 1
qm set 9000 -hotplug disk,network,usb,memory,cpu
 
 
qm set 9000 -vcpus 1
 
qm set 9000 -vcpus 1
qm set 9000 -vga qxl
+
qm set 9000 -ide2 pve:cloudinit
qm set 9000 -name debian-10-template
 
qm set 9000 -ide2 vgdata:cloudinit
 
 
</pre>
 
</pre>
   
  +
ja moodustamine ise
<pre>
 
   
 
<pre>
 
proxmox# sh qm-create-9000
 
proxmox# sh qm-create-9000
importing disk 'debian-10-openstack-amd64.qcow2' to VM 9000 ...
+
importing disk 'debian-11-generic-amd64-20220911-1135.qcow2' to VM 9000 ...
WARNING: dos signature detected on /dev/data/vm-9000-disk-0 at offset 510. Wipe it? [y/n]: [n]
+
WARNING: dos signature detected on /dev/pve/vm-9000-disk-0 at offset 510. Wipe it? [y/n]: [n]
 
Aborted wiping of dos.
 
Aborted wiping of dos.
 
Logical volume "vm-9000-disk-0" created.
 
Logical volume "vm-9000-disk-0" created.
121. rida: 126. rida:
 
...
 
...
   
Successfully imported disk as 'unused0:vgdata:vm-9000-disk-0'
+
Successfully imported disk as 'unused0:pve:vm-9000-disk-0'
update VM 9000: -scsihw virtio-scsi-pci -virtio0 vgdata:vm-9000-disk-0
+
update VM 9000: -scsihw virtio-scsi-pci -virtio0 pve:vm-9000-disk-0
 
update VM 9000: -serial0 socket
 
update VM 9000: -serial0 socket
 
update VM 9000: -boot c -bootdisk virtio0
 
update VM 9000: -boot c -bootdisk virtio0
128. rida: 133. rida:
 
update VM 9000: -hotplug disk,network,usb,memory,cpu
 
update VM 9000: -hotplug disk,network,usb,memory,cpu
 
update VM 9000: -vcpus 1
 
update VM 9000: -vcpus 1
update VM 9000: -vga qxl
+
update VM 9000: -ide2 pve:cloudinit
update VM 9000: -name debian-10-template
 
update VM 9000: -ide2 vgdata:cloudinit
 
 
Logical volume "vm-9000-cloudinit" created.
 
Logical volume "vm-9000-cloudinit" created.
WARNING: iso9660 signature detected on /dev/data/vm-9000-cloudinit at offset 32769. Wipe it? [y/n]: [n]
+
WARNING: iso9660 signature detected on /dev/pve/vm-9000-cloudinit at offset 32769. Wipe it? [y/n]: [n]
 
Aborted wiping of iso9660.
 
Aborted wiping of iso9660.
 
1 existing signature left on the device.
 
1 existing signature left on the device.
 
</pre>
 
</pre>
  +
  +
Tulemuse kontrollimine
  +
  +
* PVE liideses on näha uus virtuaalne arvuti vmid=9000
  +
* cloudinit on kasutuses
   
 
===terraform seadistamine ja käivitamine===
 
===terraform seadistamine ja käivitamine===

Redaktsioon: 1. oktoober 2022, kell 22:54

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 http://cloud.debian.org/images/cloud/bullseye/20220911-1135/debian-11-generic-amd64-20220911-1135.qcow2

Tõenäoliselt on abiks lisada tõmmisesse qemu-guest-agent

proxmox# apt install libguestfs-tools
proxmox# virt-customize -a debian-11-generic-amd64-20220911-1135.qcow2 --install qemu-guest-agent

Tõmmise baasil virtuaalse arvuti template moodustamine, esmalt tekitakse vastavaid tegevusi sooritav skript

proxmox# cat /root/qm-create-9000 
qm create 9000 -name debian-11-cloud template -memory 1024 -net0 virtio,bridge=vmbr0 -cores 1 -sockets 1 -cpu cputype=kvm64 -description "Debian 11 cloud image" -kvm 1
qm importdisk 9000 debian-11-generic-amd64-20220911-1135.qcow2 pve
qm set 9000 -scsihw virtio-scsi-pci -virtio0 pve:vm-9000-disk-0
qm set 9000 -serial0 socket
qm set 9000 -boot c -bootdisk virtio0
qm set 9000 -agent 1
qm set 9000 -vcpus 1
qm set 9000 -ide2 pve:cloudinit

ja moodustamine ise

proxmox# sh qm-create-9000 
importing disk 'debian-11-generic-amd64-20220911-1135.qcow2' to VM 9000 ...
WARNING: dos signature detected on /dev/pve/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:pve:vm-9000-disk-0'
update VM 9000: -scsihw virtio-scsi-pci -virtio0 pve: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: -ide2 pve:cloudinit
  Logical volume "vm-9000-cloudinit" created.
WARNING: iso9660 signature detected on /dev/pve/vm-9000-cloudinit at offset 32769. Wipe it? [y/n]: [n]
  Aborted wiping of iso9660.
  1 existing signature left on the device.

Tulemuse kontrollimine

  • PVE liideses on näha uus virtuaalne arvuti vmid=9000
  • cloudinit on kasutuses

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

Kasulikud lisamaterjalid