Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ Image Management Service/ Melhores práticas/ Criação de uma imagem privada usando o Packer
Atualizado em 2024-09-09 GMT+08:00

Criação de uma imagem privada usando o Packer

Packer é uma ferramenta de código aberto para criar imagens personalizadas. O comportamento do Packer é determinado por um modelo que é uma Linguagem de configuração do HashiCorp (HCL2) ou arquivo JSON e contém principalmente três tipos de componentes: construtor, provisionador e pós-processador. Esses componentes podem ser combinados de forma flexível no modelo para criar automaticamente arquivos de imagem para várias plataformas de nuvem em paralelo. O Packer simplifica a criação de imagens privadas usando código gerenciável. Desta forma, os usuários podem personalizar imagens de forma flexível e usar facilmente imagens idênticas entre diferentes plataformas de nuvem.

Esta seção descreve como usar o Packer para criar uma imagem privada de Ubuntu 22.04 Server 64-bit em um ECS do CentOS 8.2 64-bit.

Restrições

As imagens do ECS completo não podem ser usadas como uma fonte de imagem quando você usa o Packer para criar imagens privadas.

Procedimento

Instalar o Packer

  1. Faça logon no console de gerenciamento, crie um ECS (por exemplo, um ECS executando o CentOS 8.2 64-bit) e vincule um EIP ao ECS.
  2. Faça logon no ECS.
  3. Visite https://www.packer.io/downloads e baixe a versão mais recente do Packer que corresponde ao sistema operacional e à arquitetura do ECS.
  4. Execute o seguinte comando para instalar o Packer (packer_1.9.1_linux_amd64.zip como exemplo):

    wget --no-check-certificate https://releases.hashicorp.com/packer/1.9.1/packer_1.9.1_linux_amd64.zip

    • Certifique-se de que você vinculou um EIP ao ECS para que o ECS possa acessar a Internet.
    • Se a mensagem "command not found" for exibida, a ferramenta wget não está instalada. Execute o comando yum install wget para instalá-lo.
  5. Execute o seguinte comando para descompactar o pacote de instalação do Packer:

    unzip packer_1.9.1_linux_amd64.zip

  6. Execute o seguinte comando para mover o pacote de instalação do Packer para o diretório /usr/local/bin:
    mv packer /usr/local/bin

    O diretório /usr/local/bin foi adicionado às variáveis de ambiente. Você também pode mover o pacote de instalação do Packer para outro diretório que tenha sido adicionado às variáveis de ambiente.

  7. Execute o seguinte comando para verificar se o Packer foi instalado com sucesso:

    packer -v

    • Se a saída do comando contiver o número da versão do Packer, o Packer foi instalado com sucesso.
    • Se "command not found" for exibido, a instalação do Packer falhou. Verifique se o diretório em que o Packer reside foi adicionado às variáveis de ambiente.

      Execute o comando env | grep PATH para verificar se a variável de ambiente PATH contém o diretório de instalação do Packer.

      Se PATH não contiver o diretório de instalação do Packer, execute as seguintes operações para adicioná-lo ao PATH:

      1. Execute o seguinte comando para abrir o arquivo profile:

        vim /etc/profile

      2. Pressione i para entrar no modo de edição e adicione export PATH=$PATH:/usr/local/bin ao final do arquivo.

        Se o seu Packer reside em um diretório diferente de /usr/local/bin, substitua /usr/local/bin no comando pelo diretório real.

      3. Pressione Esc para sair do modo de edição. Digite :wq e pressione Enter para salvar as alterações e sair.
      4. Execute o seguinte comando para que a alteração tenha efeito:

        source /etc/profile

Criar um modelo do Packer

Para criar uma imagem usando o Packer, você precisa de um modelo no formato .pkr.hcl. No modelo, você precisa configurar construtores, provisionadores e pós-processadores. Em um provisionador, você pode modificar a imagem de origem conforme necessário. Por exemplo, você pode modificar as configurações e especificar o software a ser pré-instalado. Neste exemplo, um pós-processador é usado para redirecionar o caminho de saída do manifesto. Se o modelo do Packer tiver vários construtores, você poderá localizar o ID da imagem criada de cada construtor com base na saída do manifesto. Para obter mais informações sobre construtores, provisionadores e pós-processadores, consulte a documentação oficial do Packer.

Esta seção usa um provisionador Shell como exemplo.

  1. Execute o seguinte comando para criar um arquivo hwcloud.pkr.hcl:

    touch hwcloud.pkr.hcl

  2. Execute o seguinte comando para abrir o arquivo hwcloud.pkr.hcl:

    vim hwcloud.pkr.hcl

  3. Pressione i para entrar no modo de edição e editar o modelo com base nos requisitos do site. Para obter detalhes do parâmetro, consulte Tabela 1. O conteúdo a seguir é apenas para referência.
    packer {
      required_plugins {
        huaweicloud = {
          version = ">= 1.0.0"
          source  = "github.com/huaweicloud/huaweicloud"
        }
      }
    }
     
    source "huaweicloud-ecs" "artifact" {
      region            = "xxx"
      availability_zone = "xxx"
      flavor            = "c6.large.2"
      source_image_name = "Ubuntu 22.04 server 64bit"
      image_name        = "Ubuntu-2204-image-powered-by-Packer"
      image_tags = {
        builder = "packer"
        os      = "Ubuntu-22.04-server"
      }
     
      ssh_username       = "root"
      eip_type           = "5_bgp"
      eip_bandwidth_size = 5
    }
     
    build {
      sources = ["source.huaweicloud-ecs.artifact"]
     
      provisioner "shell" {
        inline = ["apt-get update -y"]
      }
     
      post-processor "manifest" {
        strip_path = true
        output     = "packer-result.json"
      }
    }

    Em Tabela 1, region, availability_zone, flavor e source_image_name são os atributos do ECS temporário que serão usados para criar a imagem privada.

    Tabela 1 Parâmetros do modelo de Packer

    Parâmetro

    Descrição

    Obrigatório

    region

    Nome da região. Obtenha o nome da região em Regiões e pontos de extremidade.

    Sim

    flavor

    Flavor do ECS temporário.

    Sim

    image_name

    Nome da imagem privada a ser criada.

    Sim

    image_tags

    Tags da imagem privada a ser criada.

    Não

    availability_zone

    AZ. Obtenha o nome da região em Regiões e pontos de extremidade.

    Não

    source_image_name

    Nome da imagem de origem. Esta é a imagem sobre a qual você pretende construir o sistema operacional base. Você pode obter o nome da imagem de origem na lista de imagens públicas no console do IMS.

    NOTA:

    Para especificar uma imagem de origem, você também pode usar source_image para especificar um ID de imagem ou usar source_image_filter para filtrar uma imagem de origem.

    Não

    ssh_username

    Nome de usuário de logon SSH da imagem privada a ser criada.

    Este parâmetro é obrigatório para logon SSH.

    Não

    eip_type

    Tipo de linha do EIP.

    Não

    eip_bandwidth_size

    Largura de banda do EIP (Mbit/s). Este parâmetro é obrigatório se o acesso à Internet for necessário.

    NOTA:

    eip_type e eip_bandwidth_size são configurados para criar um novo EIP. Para usar um EIP existente, configure reuse_ips e floating_ip.

    Não

    provisioner

    Tipo de provisionador. Para obter detalhes, consulte Provisionadores de Packer.

    Sim

    post-processor

    Tipo de pós-processador.

    Não

    Para obter mais parâmetros, consulte https://github.com/huaweicloud/packer-plugin-huaweicloud/wiki.

Criar uma imagem privada usando o Packer

  1. Depois que o modelo do Packer for criado, execute o seguinte comando para importar AK/SK:

    export HW_ACCESS_KEY=<AccessKey ID>

    export HW_SECRET_KEY=<AccessKey Secret>

  2. Execute o seguinte comando para criar uma imagem:

    packer build hwcloud.pkr.hcl

    huaweicloud-ecs.artifact: output will be in this color.
     
    ==> huaweicloud-ecs.artifact: Loading availability zones...
        huaweicloud-ecs.artifact: the specified availability_zone ap-southeast-1a is available
    ==> huaweicloud-ecs.artifact: Loading flavor: c6.large.2
    ==> huaweicloud-ecs.artifact: Creating temporary keypair: packer_64abc4fd-xxxx-xxxx-xxxx-2139eee76819...
    ==> huaweicloud-ecs.artifact: Created temporary keypair: packer_64abc4fd-xxxx-xxxx-xxxx-2139eee76819
        huaweicloud-ecs.artifact: Found Image ID: 19d9079e-xxxx-xxxx-xxxx-642116ad6557
    ==> huaweicloud-ecs.artifact: Creating temporary VPC...
        huaweicloud-ecs.artifact: temporary VPC ID: 6e309adc-xxxx-xxxx-xxxx-4c3356b972c7
    ==> huaweicloud-ecs.artifact: Creating temporary subnet...
        huaweicloud-ecs.artifact: temporary subnet ID: 66ab3bc3-xxxx-xxxx-xxxx-d8ca2d9378cc
        huaweicloud-ecs.artifact: the [default] security groups will be used ...
    ==> huaweicloud-ecs.artifact: Creating EIP ...
        huaweicloud-ecs.artifact: Created EIP: '0cd696e3-xxxx-xxxx-xxxx-220b8d277604' (159.xxx.xxx.180)
    ==> huaweicloud-ecs.artifact: Launching server in AZ ap-southeast-1a...
        huaweicloud-ecs.artifact: Waiting for server to become ready...
        huaweicloud-ecs.artifact: Server ID: 13f78f88-xxxx-xxxx-xxxx-7e8c27a9ad1f
    ==> huaweicloud-ecs.artifact: Using SSH communicator to connect: 159.138.141.180
    ==> huaweicloud-ecs.artifact: Waiting for SSH to become available...
    ==> huaweicloud-ecs.artifact: Connected to SSH!
    ==> huaweicloud-ecs.artifact: Provisioning with shell script: /tmp/packer-shell2456008753
    huaweicloud-ecs.artifact: Hit:1 http://repo.huaweicloud.com/ubuntu jammy InRelease
            ......
        huaweicloud-ecs.artifact: Fetched 5,536 kB in 3s (2,006 kB/s)
        huaweicloud-ecs.artifact: Reading package lists...
    ==> huaweicloud-ecs.artifact: Stopping server: 13f78f88-xxxx-xxxx-xxxx-7e8c27a9ad1f ...
        huaweicloud-ecs.artifact: Waiting for server to stop: 13f78f88-xxxx-xxxx-xxxx-7e8c27a9ad1f ...
    ==> huaweicloud-ecs.artifact: Creating the system image: Ubuntu-2204-image-powered-by-Packer ...
        huaweicloud-ecs.artifact: Image: 62dc6e37-xxxx-xxxx-xxxx-a2a00a677f5b
    ==> huaweicloud-ecs.artifact: Terminating the source server: 13f78f88-xxxx-xxxx-xxxx-7e8c27a9ad1f...
    ==> huaweicloud-ecs.artifact: Deleted temporary public IP '0cd696e3-xxx-xxxx-xxxx-220b8d277604' (159.xxx.xxx.180)
    ==> huaweicloud-ecs.artifact: Deleting temporary subnet: 66ab3bc3-xxxx-xxxx-xxxx-d8ca2d9378cc...
    ==> huaweicloud-ecs.artifact: Deleting temporary VPC: 6e309adc-xxxx-xxxx-xxxx-4c3356b972c7...
    ==> huaweicloud-ecs.artifact: Deleting temporary keypair: packer_64abc4fd-xxxx-xxxx-xxxx-2139eee76819 ...
    ==> huaweicloud-ecs.artifact: Running post-processor:  (type manifest)
    Build 'huaweicloud-ecs.artifact' finished after 5 minutes 48 seconds.
     
    ==> Wait completed after 5 minutes 48 seconds
     
    ==> Builds finished. The artifacts of successful builds are:
    --> huaweicloud-ecs.artifact: An image was created: 62dc6e37-xxxx-xxxx-xxxx-a2a00a677f5b
  3. Faça logon no console de gerenciamento e clique em Image Management Service em Compute.
  4. Clique na guia Private Images e visualize a imagem criada usando o Packer. Figura 1 mostra a imagem criada.
    Figura 1 Visualização da imagem privada criada usando o Packer

Links úteis

Guia oficial do Packer: https://www.packer.io/intro/getting-started/install.html