Pesquisa de site

Automatize a instalação RHEL e CentOS no KVM usando Kickstart


Olá a todos. Este é meu primeiro tutorial sobre virtualização KVM preparado como referência e para ajudá-lo a automatizar questões chatas de instalação baseadas em GUI. Estamos usando o Kickstart no KVM para implantar VMs. Se você tem um bom conhecimento prático de Linux e Virtualização, aposto que já trabalhou com KVM e Kickstart.

Caso esta seja a primeira vez que você está experimentando o KVM, não se preocupe, pois você não precisa de um conhecimento profundo dos aspectos internos da virtualização KVM para usar este guia. Saiba apenas que a virtualização permite uma implantação rápida, isolando o aplicativo em um ambiente controlado conhecido e adicionando uma camada de abstração entre a máquina virtual e o hardware físico subjacente. A maneira mais fácil de executar muitas VMs no KVM é usando modelos e o Kickstart no modelo de implantação KVM.

Principais vantagens da virtualização

  • Isolamento de serviço: isolamento de aplicativos e eliminação de problemas de compatibilidade
  • Segurança e confiabilidade aprimoradas do sistema: Abstração entre a máquina virtual e o hardware físico subjacente
  • Provisionamento de servidor mais rápido: uso de snapshots e modelos.
  • Recuperação de desastres mais rápida: mantendo instantâneos atualizados de máquinas virtuais – fácil de reimplantar
  • Balanceamento de carga dinâmico: migração ao vivo de sobrecarga para servidores subutilizados

O que é Kickstart?

Uma ferramenta criada pela Red Hat para administradores de sistema para ajudá-los a automatizar a instalação da família de distribuições Red Hat Linux. Um único arquivo contendo as respostas para todas as perguntas que normalmente seriam feitas durante uma instalação típica deve ser criado. Os arquivos do Kickstart podem ser mantidos em um único sistema de servidor e lidos por computadores individuais durante a instalação, prontos para o Kickstart no KVM.

Como executar o Kickstart na instalação do KVM?

As instalações do Kickstart podem ser realizadas usando um CD-ROM local, um disco rígido local ou via NFS, FTP ou HTTP.

Para usar o kickstart, você deve:

  • Crie um arquivo de kickstart.
  • Crie uma mídia de inicialização com o arquivo kickstart ou disponibilize o arquivo kickstart na rede.
  • Disponibilize a árvore de instalação.
  • Inicie a instalação do kickstart.

Nesta postagem, fornecerei um arquivo de kickstart básico para início rápido; você pode modificá-lo e aprimorá-lo para se adequar ao seu caso de uso e configuração do ambiente. Comandos virt-install usados também são fornecidos. Para economizar seu tempo, escrevi um script bash simples que torna o processo de rotação de uma nova máquina virtual fácil e menos cansativo.

Criando arquivo de kickstart

Este é um arquivo de kickstart para ajudá-lo a começar. Com o objetivo de tendência, edite e salve-o como ks.cfg em seu diretório de usuário inicial.

cd ~/
vim ks.cfg

Tem o conteúdo abaixo – modifique para se adequar ao seu caso de uso

###############################################################
#
# Environment setup
#
###############################################################

# url --url="http://192.168.122.1:8090/cent7"
text
cdrom
auth --enableshadow --passalgo=sha512
keyboard --vckeymap=us --xlayouts='us'
lang en_US.UTF-8
eula --agreed
reboot

###############################################################
#
# network configuration
#
###############################################################

network --bootproto=dhcp --noipv6 --onboot=on --device=eth0
timezone UTC

#network --bootproto=static --ip=192.168.122.100 --gateway=192.168.122.1  --netmask=255.255.255.0  --noipv6 --device=eth0 --nameserver=192.168.122.1,8.8.8.8 --activate
#network  --hostname=server1.example.com
#timezone Africa/Nairobi --isUtc

###############################################################
#
# partitioning
#
###############################################################
bootloader --timeout=1 --location=mbr --append="net.ifnames=0 biosdevname=0"
text
skipx
zerombr
clearpart --all --initlabel
autopart --type=lvm
reboot --eject

# part swap --asprimary --fstype="swap" --size=1024
# part /boot --fstype xfs --size=200
# part pv.01 --size=1 --grow
# volgroup rootvg01 pv.01
# logvol / --fstype xfs --name=lv01 --vgname=rootvg01 --size=1 --grow


###########################################################################################
# 
# User Accounts
# Generate encrypted password: python -c 'import crypt; print(crypt.crypt("My Password"))'
# Or  openssl passwd -1 password
#
###########################################################################################

rootpw StrongRootPassword 
# user --groups=wheel --name=computingforgeeks --password=StrongUserPassword --gecos="Computingforgeeks User"

###############################################################
#
# SELinux and Firewalld
#
###############################################################

selinux --enforcing
#selinux --permissive
#selinux --disabled
 
# firewall --enabled --ssh 
# firewall --disabled

 
###############################################################
#
# Software Packages
#
###############################################################

%packages --ignoremissing --excludedocs --instLangs=en_US.utf8
@core
@base
openssh-clients
bash-completion
sudo
selinux-policy-devel
nfs-utils
net-tools
tar
bzip2
drpm
rsync
yum-utils
elfutils-libelf-devel
network-scripts
%end

Poucos parâmetros devem ser alterados, talvez o endereço IP e nome do host, fuso horáriose definidos.

Baixe o arquivo ISO de instalação do sistema operacional

Neste guia estarei trabalhando com o arquivo ISO do CentOS Stream 8 DVD

cd ~/
wget http://centos.mirror.liquidtelecom.com/8-stream/isos/x86_64/CentOS-Stream-8-x86_64-latest-dvd1.iso
sudo mv CentOS-Stream-8-x86_64-latest-dvd1.iso /var/lib/libvirt/images

Criar script de criação de VM

Vamos criar um script de criação de máquina virtual chamado create_vm.sh:

vim create_vm.sh

O script bash abaixo é usado para instalar uma nova VM – farei algumas perguntas

#!/usr/bin/env bash
 
## Define variables
MEM_SIZE=2048       # Memory setting in MiB
VCPUS=2             # CPU Cores count
OS_VARIANT="rhl8.0" # List with osinfo-query  os
ISO_FILE="/var/lib/libvirt/images/CentOS-Stream-8-x86_64-latest-dvd1.iso" # Path to ISO file

echo -en "Enter vm name: "
read VM_NAME
OS_TYPE="linux"
echo -en "Enter virtual disk size : "
read DISK_SIZE
 
sudo virt-install \
     --name ${VM_NAME} \
     --memory=${MEM_SIZE} \
     --vcpus=${VCPUS} \
     --os-type ${OS_TYPE} \
     --location ${ISO_FILE} \
     --disk size=${DISK_SIZE}  \
     --network bridge=virbr0 \
     --graphics=none \
     --os-variant=${OS_VARIANT} \
     --console pty,target_type=serial \
     --initrd-inject ks.cfg --extra-args "inst.ks=file:/ks.cfg console=tty0 console=ttyS0,115200n8"
     #--extra-args="ks=http://192.168.122.1/ks.cfg console=tty0 console=ttyS0,115200n8"

Substitua $HOME/iso/CentOS-7-x86_64-Everything-1611.iso pelo caminho para seu arquivo ISO.

Você pode modificar outros parâmetros como VCPU,RAM e Bridge para se adequar ao seu uso.

Para o tamanho do disco virtual, basta inserir o número, por exemplo, 10 para 10 GB

Salve o script em um arquivo chamado create_vm.sh. Torne-o executável e execute-o

chmod +x create_vm.sh
./create_vm.sh

Depois de fornecer o nome da VM e o tamanho do disco, a instalação automatizada do sistema operacional com Kickstart começa

Enter vm name: test
Enter virtual disk size : 10

Starting install...
Retrieving file vmlinuz...                                                                                                                 | 9.7 MB  00:00:00
Retrieving file initrd.img...                                                                                                              |  72 MB  00:00:00
Allocating 'test.qcow2'                                                                                                                    |  10 GB  00:00:00
Connected to domain 'test'
Escape character is ^] (Ctrl + ])
OVR (bus 0 bus_irq 9 global_irq 9 high level)
[    0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level)
[    0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level)
[    0.000000] Using ACPI (MADT) for SMP configuration information
[    0.000000] smpboot: Allowing 1 CPUs, 0 hotplug CPUs
[    0.000000] PM: Registered nosave memory: [mem 0x00000000-0x00000fff]
[    0.000000] PM: Registered nosave memory: [mem 0x0009f000-0x0009ffff]
[    0.000000] PM: Registered nosave memory: [mem 0x000a0000-0x000effff]
[    0.000000] PM: Registered nosave memory: [mem 0x000f0000-0x000fffff]
[    0.000000] [mem 0x80000000-0xfeffbfff] available for PCI devices
[    0.000000] Booting paravirtualized kernel on KVM
[    0.000000] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 1910969940391419 ns
[    0.000000] setup_percpu: NR_CPUS:8192 nr_cpumask_bits:1 nr_cpu_ids:1 nr_node_ids:1
[    0.000000] percpu: Embedded 54 pages/cpu s184320 r8192 d28672 u2097152
[    0.000000] kvm-guest: stealtime: cpu 0, msr 7942c080
[    0.000000] kvm-guest: PV spinlocks disabled, single CPU
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 515945
[    0.000000] Policy zone: DMA32
....

Após completar a instalação faça login com nome de usuário e senha criados:

....
[  OK  ] Started GSSAPI Proxy Daemon.
[  OK  ] Reached target NFS client services.
[  OK  ] Reached target Remote File Systems (Pre).
[  OK  ] Reached target Remote File Systems.
         Starting Permit User Sessions...
[  OK  ] Started OpenSSH server daemon.
[  OK  ] Started Permit User Sessions.
         Starting Terminate Plymouth Boot Screen...
[  OK  ] Started Job spooling tools.
[  OK  ] Started Command Scheduler.
         Starting Hold until boot process finishes up...
[  OK  ] Started Terminate Plymouth Boot Screen.
[  OK  ] Started Hold until boot process finishes up.
[   10.188420] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[   10.201749] e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
[   10.207768] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[   10.208903] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready

CentOS Stream 8
Kernel 4.18.0-326.el8.x86_64 on an x86_64

Activate the web console with: systemctl enable --now cockpit.socket

localhost login: root
Password:

Redefinir senha de root:

# passwd root
Changing password for user root.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

Verifique também:

  • Como provisionar VMs em KVM com Terraform
  • Configure o virt-manager como um usuário não root no Linux

Leitura adicional:

  • Dominando a virtualização KVM
  • Princípios Básicos de Virtualização, 2ª Edição

Artigos relacionados: