Observação:
- Este tutorial está disponível em um ambiente de laboratório gratuito fornecido pela Oracle.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir seu laboratório, substitua esses valores por valores específicos do seu ambiente de nuvem.
Gerenciar Máquinas Virtuais KVM usando o Oracle Linux Automation Manager
Introdução
O conjunto community.libvirt fornece módulos e plug-ins de libvirt suportados pela comunidade de libvirt do Ansible. Esses módulos e plug-ins ajudam a gerenciar máquinas virtuais (VMs) e contêineres usando a API libvirt.
Objetivos
Neste tutorial, você aprenderá a:
- Crie um playbook que use a coleção community.libvirt
- Configurar credenciais para o Ansible Galaxy
- Criar um modelo de trabalho
- Execute o Job
Pré-requisitos
- Um sistema com o Oracle Linux Automation Manager instalado
- Acesso a um repositório Git
- Um sistema Oracle Linux com KVM instalado
Observação: Para obter detalhes sobre como instalar o Oracle Linux Automation Manager ou o KVM, consulte os links no final deste laboratório.
Implantar o Oracle Linux Automation Manager
Observação: Se estiver em execução em sua própria tenancy, leia o projeto linux-virt-labs
GitHub README.md e conclua os pré-requisitos antes de implantar o ambiente de laboratório.
-
Abra um terminal no Luna Desktop.
-
Clone o projeto
linux-virt-labs
GitHub.git clone https://github.com/oracle-devrel/linux-virt-labs.git
-
Altere para o diretório de trabalho.
cd linux-virt-labs/olam
-
Instale as coleções necessárias.
ansible-galaxy collection install -r requirements.yml
-
Atualize a configuração da instância do Oracle Linux.
cat << EOF | tee instances.yml > /dev/null compute_instances: 1: instance_name: "olam-node" type: "control" 2: instance_name: "git-server" type: "server" 3: instance_name: "kvm-server" type: "server" passwordless_ssh: true use_git: true use_kvm: true EOF
-
Implante o ambiente de laboratório.
ansible-playbook create_instance.yml -e ansible_python_interpreter="/usr/bin/python3.6" -e "@instances.yml"
O ambiente de laboratório gratuito requer a variável extra
ansible_python_interpreter
porque instala o pacote RPM do SDK para Python do Oracle Cloud Infrastructure. O local para a instalação deste pacote está sob os módulos python3.6.A forma de implantação padrão usa a CPU AMD e o Oracle Linux 8. Para usar uma CPU Intel ou Oracle Linux 9, adicione
-e instance_shape="VM.Standard3.Flex"
ou-e os_version="9"
ao comando de implantação.Importante: Aguarde a execução bem-sucedida do playbook e atinja a tarefa de pausa. A instalação do Oracle Linux Automation Manager está concluída neste estágio do manual e as instâncias estão prontas. Tome nota da reprodução anterior, que imprime os endereços IP públicos e privados dos nós que implanta.
Criar um Playbook
-
Abra uma nova janela do terminal.
-
Defina uma variável para a instância remota do git-server.
export REMOTE=<ip_address_of_instance>
-
Crie o diretório do projeto.
mkdir ~/olamkvm
-
Crie um arquivo de requisitos.
O Oracle Linux Automation Engine usa o arquivo de requisitos para extrair quaisquer coleções ou funções necessárias para o projeto no runtime.
cat << EOF > ~/olamkvm/requirements.yml --- collections: - name: community.libvirt - name: community.general - name: community.crypto EOF
-
Crie um arquivo de variáveis.
O arquivo armazena variáveis e seus valores padrão. O playbook importa esse arquivo no runtime.
-
Crie um diretório para armazenar o arquivo.
mkdir ~/olamkvm/vars
-
Crie o arquivo.
cat << EOF > ~/olamkvm/vars/defaults.yml --- username: oracle base_image_name: OL9U5_x86_64-kvm-b253.qcow2 base_image_url: https://yum.oracle.com/templates/OracleLinux/OL9/u5/x86_64/ base_image_sha: 3b00bbbefc8e78dd28d9f538834fb9e2a03d5ccdc2cadf2ffd0036c0a8f02021 libvirt_pool_dir: "/var/lib/libvirt/images" vm_name: ol9-dev vm_vcpus: 2 vm_ram_mb: 2048 vm_net: default vm_root_pass: cleanup_tmp: no EOF
-
-
Crie os modelos cloud-init.
Esses modelos criam os arquivos meta-data e user-data para provisionar a configuração da VM via cloud-init.
-
Criar um diretório para armazenar os modelos.
mkdir ~/olamkvm/templates
-
Crie o modelo de metadados.
cat << EOF > ~/olamkvm/templates/meta-data.j2 instance-id: iid-local01 local-hostname: EOF
-
Crie o modelo de dados do usuário.
cat << EOF > ~/olamkvm/templates/user-data.j2 #cloud-config system_info: default_user: name: opc ssh_authorized_keys: - EOF
-
-
Crie o modelo de definição de VM libvirt.
cat << EOF > ~/olamkvm/templates/vm-template.xml.j2 <domain type="kvm"> <name></name> <memory unit='MiB'></memory> <vcpu placement='static'></vcpu> <os> <type arch="x86_64" machine="q35">hvm</type> <boot dev="hd"/> </os> <features> <acpi/> <apic/> </features> <cpu mode="host-model"/> <clock offset="utc"> <timer name="rtc" tickpolicy="catchup"/> <timer name="pit" tickpolicy="delay"/> <timer name="hpet" present="no"/> </clock> <pm> <suspend-to-mem enabled="no"/> <suspend-to-disk enabled="no"/> </pm> <devices> <emulator>/usr/libexec/qemu-kvm</emulator> <disk type="file" device="disk"> <driver name="qemu" type="qcow2"/> <source file="/.qcow"/> <target dev="vda" bus="virtio"/> </disk> <disk type="file" device="cdrom"> <driver name="qemu" type="raw"/> <source file="/.iso"/> <target dev="sda" bus="sata"/> <readonly/> </disk> <controller type="usb" model="qemu-xhci" ports="15"/> <interface type="network"> <source network=""/> <model type="virtio"/> </interface> <console type="pty"/> <channel type="unix"> <source mode="bind"/> <target type="virtio" name="org.qemu.guest_agent.0"/> </channel> <memballoon model="virtio"/> <rng model="virtio"> <backend model="random">/dev/urandom</backend> </rng> </devices> </domain> EOF
-
Crie um playbook.
Este playbook consulta o servidor KVM para VMs existentes e, em seguida, implanta uma nova Imagem do Oracle Linux Cloud.
cat << EOF > ~/olamkvm/create_vm.yml --- - name: Create vm with community.libvirt collection hosts: kvm become: true vars_files: - vars/defaults.yml tasks: - name: Add python lxml module required by libvirt ansible module ansible.builtin.dnf: name: python3-lxml state: present - name: Get list of existing VMs community.libvirt.virt: command: list_vms register: existing_vms changed_when: false - name: Print list of existing VMs ansible.builtin.debug: var: existing_vms - name: Create VM when not exist when: ( vm_name not in existing_vms.list_vms ) block: - name: Download base image ansible.builtin.get_url: url: "" dest: "/tmp/" checksum: "sha256:" mode: "0664" - name: Copy base image to libvirt directory ansible.builtin.copy: dest: "/.qcow" src: "/tmp/" force: false remote_src: true owner: qemu group: qemu mode: "0660" register: copy_results - name: Generate a vm ssh keypair community.crypto.openssh_keypair: path: ~/.ssh/id_rsa size: 2048 comment: vm ssh keypair register: vm_ssh_keypair become: true become_user: "" - name: Create vm meta-data ansible.builtin.template: src: templates/meta-data.j2 dest: "~/meta-data" mode: "0664" become_user: "" - name: Read the vm ssh private key ansible.builtin.slurp: src: "~/.ssh/id_rsa.pub" register: vm_ssh_private_key become: true become_user: "" - name: Create var for private key ansible.builtin.set_fact: vm_private_key: "" - name: Create vm user-data ansible.builtin.template: src: templates/user-data.j2 dest: ~/user-data mode: "0664" become: true become_user: "" - name: Generate iso containing cloud-init configuration ansible.builtin.shell: | genisoimage -output /tmp/.iso -volid cidata -joliet -rock ~/user-data ~/meta-data become: true become_user: "" register: generate_iso changed_when: generate_iso.rc == 0 - name: Copy vm iso image to libvirt directory ansible.builtin.copy: dest: "/.iso" src: "/tmp/.iso" force: false remote_src: true owner: qemu group: qemu mode: "0660" - name: Remove vm iso image from tmp ansible.builtin.file: path: "/tmp/.iso" state: absent - name: Define the vm community.libvirt.virt: command: define xml: "" - name: Start the vm community.libvirt.virt: name: "" state: running register: vm_start_results until: "vm_start_results is success" retries: 15 delay: 2 - name: Remove the temporary file ansible.builtin.file: path: "/tmp/" state: absent when: cleanup_tmp | bool EOF
Adicionar o Projeto ao Controle de Origem
-
Inicialize o diretório de trabalho do projeto em um repositório Git.
Antes de inicializar o repositório, você precisa executar algumas etapas de configuração de primeira vez do Git.
-
Defina o nome da ramificação padrão usado ao inicializar um projeto.
git config --global init.defaultBranch main
-
Defina sua identidade.
O e-mail e o nome são exemplos neste tutorial. Use seu email e nome ao trabalhar em seus projetos, pois essas informações são imutavelmente incorporadas a cada commit.
git config --global user.email johndoe@example.com git config --global user.name "John Doe"
-
Altere o diretório de trabalho do projeto.
cd ~/olamkvm
-
Inicialize o diretório como um repositório Git local.
git init
O comando retorna que inicializou o repositório Git vazio.
-
-
Verifique o estado do diretório de trabalho e da área de preparação do projeto.
git status
O estado do repositório local indica dois arquivos não rastreados, create_vm.yml e requirements.yml, e os diretórios vars e templates.
-
Adicione e rastreie os novos arquivos na área de preparação.
git add --all
A opção
--all
adiciona todos os arquivos não rastreados e alterados à área de preparação. -
Confirme as alterações atualmente na área de preparação.
git commit -m 'initial commit'
A opção
-m
permite adicionar um comentário às alterações confirmadas. -
Crie e inicialize o repositório Git remoto.
Um repositório remoto é um repositório compartilhado usado por todos os colaboradores do projeto e armazenado em um serviço de hospedagem de código como GitHub ou um servidor auto-hospedado.
ssh git@$REMOTE "git init -b main --bare /git-server/repos/olamkvm.git"
A opção
-b
garante a inicialização do repositório remoto usando uma ramificação chamada main. -
Aceite a impressão digital da chave ECDSA digitando
yes
. -
Adicione o novo registro de conexão do repositório remoto.
Adicionar a conexão remota ao repositório local permite que você a use como um atalho nomeado nos comandos do Git.
git remote add origin git@$REMOTE:/git-server/repos/olamkvm.git
O caminho após dois-pontos é a localização do diretório do repositório no servidor Git remoto.
-
Verifique o registro de conexão recém-adicionado.
git remote -v
A saída mostra a origem do registro de conexão apontando para o local do repositório Git remoto para os comandos
git fetch
egit push
. -
Envie as alterações do repositório local para o repositório remoto.
git push origin main
Agora é possível usar a origem olamkvm em um Projeto do Oracle Linux Automation Manager.
Criar Credenciais do Ansible Galaxy
Essas credenciais permitem que o Oracle Linux Automation Manager extraia a Coleção do OCI Ansible do Ansible Galaxy Hub público.
-
Abra uma nova janela de terminal e configure um túnel SSH para a instância do nó olam.
ssh -L 8444:localhost:443 oracle@<ip_address_of_instance>
-
Abra um navegador da Web e insira o URL.
https://localhost:8444
Observação: aprove o aviso de segurança com base no navegador usado. No navegador Chrome, clique no botão Avançado e, em seguida, no link Prosseguir para localhost (inseguro).
-
Faça login no Oracle Linux Automation Manager WebUI. Use o Nome de Usuário
admin
e a Senhaadmin
criados durante a implantação automatizada. -
O WebUI é exibido após um log-in bem-sucedido.
-
Clique em Credenciais na seção Recursos no menu de navegação.
-
Clique no botão Adicionar.
-
Informe ou selecione os valores a seguir nos campos específicos.
Para campos com uma pesquisa ou lista de valores, podemos começar a digitar o valor solicitado e selecioná-lo.
- Nome:
My Ansible Galaxy
- Organização:
Default
- Tipo de Credencial: Token da API do Ansible Galaxy/Automation Hub
O Oracle Linux Automation Manager usa as credenciais do Ansible Galaxy para permitir o download de atribuições e coleções usando o comando
ansible-galaxy
.- URL do Galaxy Server:
https://galaxy.ansible.com
- Nome:
-
Verifique as entradas e clique no botão Salvar.
-
Clique em Organizações na seção Acesso no menu de navegação.
A atribuição da credencial do Ansible Galaxy dentro da Organização permite o download da Coleção Ansible do Oracle Linux Infrastructure no projeto git.
-
Clique na organização Padrão e no botão Editar.
-
Selecione a opção de pesquisa no campo Credenciais Galaxy.
-
Selecione Meu Ansible Galaxy na caixa de diálogo pop-up Selecionar Credenciais do Galaxy e clique no botão Selecionar.
-
Verifique e clique no botão Salvar.
Criar Credenciais da Máquina
Essas credenciais permitem que o Oracle Linux Automation Manager se conecte ao sistema de virtualização KVM via SSH.
-
Clique em Credenciais em Recursos no menu de navegação.
-
Clique no botão Adicionar.
-
Informe ou selecione os valores a seguir nos campos específicos.
Para campos com uma pesquisa ou lista de valores, podemos começar a digitar o valor solicitado e selecioná-lo.
- Nome:
My KVM Server
- Organização:
Default
- Tipo de Credencial: Máquina
O Oracle Linux Automation Manager usa as credenciais de Máquina para definir as informações necessárias ao estabelecer uma conexão SSH com um host.
A página é atualizada, solicitando os Detalhes do Tipo.
- Nome:
-
Informe o Nome do Usuário.
- Nome do Usuário:
oracle
- Nome do Usuário:
-
Clique no botão Procurar da Chave Privada SSH.
Uma caixa de diálogo é exibida exibindo a janela Abrir arquivo.
-
Clique com o botão direito do mouse no painel central da janela Abrir arquivo e selecione Mostrar arquivos ocultos na caixa de diálogo pop-up.
-
Clique em qualquer lugar no painel central para descartar a caixa de diálogo.
-
Clique no local Home no menu de navegação no lado esquerdo da janela Open File (Abrir arquivo).
-
Clique duas vezes na pasta .ssh na lista e, em seguida, clique duas vezes no arquivo id_rsa.
Esta ação copia o conteúdo do arquivo id_rsa para o campo Chave Privada SSH.
-
Verifique as entradas, role até a parte inferior e clique no botão Salvar.
Criar um Inventário
-
Clique em Equipamentos no menu de navegação.
-
Clique no botão Adicionar e selecione Adicionar equipamento na lista suspensa de valores.
-
Informe ou selecione os valores a seguir nos campos específicos.
- Nome:
KVM Servers
- Grupos de Instâncias: controlplane
- Nome:
-
Verifique e clique no botão Salvar.
Adicionar um Grupo a um Inventário
Um grupo em um inventário é uma classificação de hosts ou outros grupos que permitem controlar um conjunto de hosts para uma determinada tarefa.
-
Clique na guia Grupos na página Detalhes dos Servidores KVM.
-
Clique no botão Adicionar.
-
Informe ou selecione os valores a seguir nos campos específicos.
- Nome:
kvm
- Nome:
-
Verifique e clique no botão Salvar.
Adicionar um Host ao Grupo de Inventário
-
Clique na guia Hosts na página Detalhes do grupo do kvm.
-
Clique no botão Adicionar e selecione Adicionar novo host na lista suspensa de valores.
-
Informe ou selecione os valores a seguir nos campos específicos.
- Nome: Use o endereço IP público do host kvm-server.
-
Verifique e clique no botão Salvar.
Fazer Ping no Grupo de Inventário
Use o módulo ping para verificar se o Oracle Linux Automation pode se conectar ao host dentro do grupo de inventário.
-
Use as trilhas de navegação e clique em Servidores KVM.
-
Clique na guia Grupos.
-
Marque a caixa ao lado do grupo kvm e clique no botão Executar Comando.
A caixa de diálogo pop-up Executar Comando é exibida.
-
Selecione o módulo ping e clique no botão Próximo.
-
Selecione o Ambiente de Execução OLAM EE (2.2) e clique no botão Próximo.
-
Selecione a Credencial de Máquina do Meu Servidor KVM e clique no botão Próximo.
-
Verifique e clique no botão Iniciar.
Um job inicia e exibe a saída do módulo ping.
Adicionar Credencial de Controle de Origem
-
Clique em Credenciais no menu de navegação.
-
Clique no botão Adicionar.
-
Informe ou selecione os valores a seguir nos campos específicos.
- Nome:
Git Server
- Organização:
Default
- Tipo de Credencial: Controle de Origem
A página é atualizada, solicitando os Detalhes do Tipo.
- Nome:
-
Informe o Nome do Usuário.
- Nome do Usuário:
git
- Nome do Usuário:
-
Informe a Chave Privada do SCM
Clique no botão Procurar e clique duas vezes no arquivo id_rsa. Esta ação copia o conteúdo da chave no campo Chave Privada do SCM.
-
Verifique e clique no botão Salvar.
Crie um Projeto
-
Clique em Projetos no menu de navegação.
-
Clique no botão Adicionar.
-
Informe ou selecione os valores a seguir nos campos específicos.
- Nome:
My Project
- Ambiente de Execução: OLAM EE (2.2)
- Tipo de Credencial de Controle de Origem: Git
A página é atualizada, solicitando os Detalhes do Tipo.
- Nome:
-
Informe o URL remoto do servidor git.
- URL de Controle de Origem:
git@<ip_address_of_instance>:/git-server/repos/olamkvm.git
- URL de Controle de Origem:
-
Selecione Servidor Git para a Credencial de Controle de Origem.
-
Verifique e clique no botão Salvar.
-
Verifique o status de sincronização do projeto.
Após a criação do projeto, o projeto exibirá seu status no resumo Detalhes à medida que a sincronização começar. O status passará de Em Execução para Com Êxito se a configuração estiver correta e o servidor Git estiver acessível.
Criar um modelo de trabalho
-
Clique em Modelos no menu de navegação.
-
Clique no botão Adicionar e selecione Adicionar modelo de job na lista suspensa de valores.
-
Informe os valores obrigatórios.
- Nome:
My Template
- Tipo de Job: Executar
- Inventory: Servidores KVM
- Projeto: Meu Projeto
- Ambiente de Execução: OLAM EE (2.2)
- Playbook: create_vm.yml
- Credenciais: Meu Servidor KVM
- Nome:
-
Revise, role para baixo e clique no botão Salvar.
-
Inicie o modelo.
Inicie um job na página de resumo do modelo clicando no botão Iniciar.
Se bem-sucedido, o job será iniciado e exibirá a saída do modelo. A saída padrão mostra o playbook em execução e gera os resultados do playbook.
Verificar Criação de Máquina Virtual
-
Abra um terminal e conecte-se via ssh ao nó kvm-server.
ssh oracle@<ip_address_of_instance>
-
Obtenha uma lista de VMs em execução.
sudo virsh list
Exemplo de Saída:
[oracle@kvm-server ~]$ sudo virsh list Id Name State ------------------------- 1 ol9-dev running
-
Obtenha o endereço IP da VM
ol9-dev
.sudo virsh net-dhcp-leases default
Exemplo de Saída:
[oracle@kvm-server ~]$ sudo virsh net-dhcp-leases default Expiry Time MAC address Protocol IP address Hostname Client ID or DUID ------------------------------------------------------------------------------------------------------------ 2023-04-06 18:59:33 52:54:00:6e:93:07 ipv4 192.168.122.167/24 ol9-dev 01:52:54:00:6e:93:07
-
Conecte-se à VM.
ssh opc@$(sudo virsh -q domifaddr ol9-dev | awk '{print substr($4, 1, length($4)-3)}')
O
-q
remove o cabeçalho da saída dos comandosvirsh
. Oawk
extrai a quarta coluna do comandovirsh domifaddr
e osubstr()
remove os três últimos caracteres. -
Desconecte-se da VM.
exit
(Opcional) Criar Outra Máquina Virtual
O playbook permite a criação de outra VM alterando a variável vm_name.
-
Alterne para a janela do navegador que contém o Oracle Linux Automation Manager WebUI e faça log-in, se necessário.
-
Clique em Modelos no menu de navegação.
-
Clique no ícone Editar Modelo de Meu Modelo.
-
Adicione a variável
vm_name
com um valor deol9-new
à seção Variáveis. -
Role para baixo e clique no botão Salvar.
-
Inicie o modelo.
-
Repita as etapas de verificação da máquina virtual e conecte-se à VM recém-criada.
Próximas Etapas
A saída bem-sucedida do job do Oracle Linux Automation Manager e a capacidade de SSH na máquina virtual confirmam que tudo funciona. Experimente ainda mais com a coleção community.libvirt e crie máquinas virtuais no Oracle Linux KVM para expandir sua infraestrutura. Em seguida, tente provisionar essas máquinas virtuais com playbooks adicionais. Confira nosso treinamento adicional na Estação de Treinamento do Oracle Linux.
Links Relacionados
- Documentação do Oracle Linux Automation Manager
- Guia de instalação do Oracle Linux Automation Manager
- Treinamento do Oracle Linux Automation Manager
- Crie VMs com KVM no Oracle Linux
- Oracle Linux Training Station
Mais Recursos de Aprendizagem
Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal Oracle Learning YouTube. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.
Para obter a documentação do produto, visite o Oracle Help Center.
Manage KVM Virtual Machines using Oracle Linux Automation Manager
G32919-01
Copyright ©2023, Oracle and/or its affiliates.