Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Custom images for scaling optimization

Última atualização: Oct 15, 2026

Em cenários que exigem software pré-instalado ou configurações de alto desempenho, crie imagens de SO personalizadas para simplificar o auto scaling. Utilize o Alicloud Image Builder para gerar essas imagens e criar node pools, acelerando o provisionamento de nós e melhorando a performance do dimensionamento.

Pré-requisitos

Por que usar imagens personalizadas no dimensionamento

Os node pools do ACK suportam auto scaling com imagens de SO integradas, como Alibaba Cloud Linux e CentOS, que atendem à maioria dos casos de uso. No entanto, em situações que demandam software pré-instalado ou configurações de alta performance, as imagens base padrão podem não satisfazer os requisitos do negócio. Nesses casos, utilize o Alicloud Image Builder para construir imagens de SO personalizadas e simplificar o auto scaling em cenários complexos.

Ao usar o Alicloud Image Builder para criar uma imagem personalizada, envie a tarefa de criação da imagem para o cluster como um Job ou CronJob.

Criar uma imagem personalizada com um Job do ACK

Os exemplos a seguir demonstram como utilizar o Alicloud Image Builder para gerar imagens de SO personalizadas, usando um ConfigMap chamado build-config e um Job chamado build.

Etapa 1: Configurar parâmetros de criação

Crie um ConfigMap chamado build-config para definir os parâmetros de criação da imagem.

  1. Crie um arquivo chamado build-config.yaml com o seguinte conteúdo YAML.

    Visualizar detalhes

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: build-config
    data:
      ack.json: |-
        
        {
          "variables": {
            "image_name": "ack-optimized_image-1.26-{{timestamp}}",
            "source_image": "m-bp1c7zuf8mcabc99babc",       # Base image for Red Hat Enterprise Linux 9.
            "instance_type": "ecs.c6.xlarge",
            "region": "{{env `ALICLOUD_REGION`}}",
            "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
            "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}",
            "runtime": "{{env `RUNTIME`}}",
            "skip_security_fix": "{{env `SKIP_SECURITY_FIX`}}"
          },
          "builders": [
            {
              "type": "alicloud-ecs",
              "access_key": "{{user `access_key`}}",
              "secret_key": "{{user `secret_key`}}",
              "region": "{{user `region`}}",
              "image_name": "{{user `image_name`}}",
              "source_image": "{{user `source_image`}}",
              "ssh_username": "root",
              # "vpc_id": "",
              # "vswitch_id": "",
              # "security_group_id": "",      
              "instance_type": "{{user `instance_type`}}",
              "skip_image_validation": "true",
              "io_optimized": "true"
            }
          ],
          "provisioners": [{
           "type": "file",
           "source": "scripts/ack-optimized-os-rhel9-all.sh",
           "destination": "/root/"
            },
            {
           "type": "shell",
           "inline": [
             "export RUNTIME=containerd",
             "export SKIP_SECURITY_FIX=true",
             "export OS_ARCH=amd64",
             "export KUBE_VERSION=1.26.3-aliyun.1",
             "bash /root/ack-optimized-os-rhel9-all.sh"
          ]
          }]
        }

    As tabelas a seguir descrevem os parâmetros YAML.

    Tabela 1. Parâmetros no arquivo de configuração do Alicloud Image Builder

    Parâmetro

    Exemplo

    Descrição

    variables{"<variable1>":"<value>"}

    variables{"access_key":"{{env ALICLOUD_ACCESS_KEY}}"}

    As variables do Alicloud Image Builder.

    Nota

    Incluir informações confidenciais diretamente no arquivo de configuração, como access_key e secret_key, representa um risco de segurança. Defina-as como variáveis que recebem valores em tempo de execução.

    builders{"type":"<value>"}

    builders{"type":"alicloud-ecs"}

    O construtor de imagem (builders). Quando type é alicloud-ecs, uma instância ECS temporária é criada para gerar a imagem e liberada posteriormente.

    provisioners{"type":"<value>"}

    provisioners{"type":"shell"}

    O provisionador de imagem (provisioners) define as operações na instância temporária. Se type for shell, um script shell executa automaticamente na instância. Por exemplo, yum install redis.x86_64 -y instala o Redis.

    Consulte Provisioner configuration.

    Tabela 2. Parâmetros de criação de imagem

    Parâmetro

    Exemplo

    Descrição

    Obrigatório

    access_key

    yourAccessKeyID

    O AccessKey ID. Consulte Obtain an AccessKey pair.

    Sim

    secret_key

    yourAccessKeySecret

    O segredo do par de AccessKey.

    Sim

    region

    cn-beijing

    A região da imagem personalizada.

    Sim

    image_name

    ack-custom_image

    O nome da imagem personalizada. Deve ser único entre as imagens existentes.

    Sim

    source_image

    aliyun_2_1903_x64_20G_alibase_20200904.vhd

    O ID da imagem pública do Alibaba Cloud com o SO correspondente. Consulte OS images supported by ACK.

    Sim

    instance_type

    ecs.c6.xlarge

    O tipo de instância ECS para a instância temporária de criação. Especifique um tipo acelerado por GPU para imagens de GPU.

    Sim

    RUNTIME

    containerd

    O runtime de contêiner. Valores válidos: docker e containerd.

    Sim

    RUNTIME_VERSION

    1.6.28

    • Se o runtime de contêiner for docker, o RUNTIME_VERSION padrão é 19.03.15.

    • Se o runtime de contêiner for containerd, o RUNTIME_VERSION padrão é 1.6.20.

    Sim

    SKIP_SECURITY_FIX

    true

    Indica se as atualizações de segurança devem ser ignoradas.

    Sim

    KUBE_VERSION

    1.30.1-aliyun.1

    A versão do cluster.

    Sim

    PRESET_GPU

    true

    Define se o driver de GPU deve ser pré-instalado para acelerar a inicialização.

    Não

    NVIDIA_DRIVER_VERSION

    460.91.03

    A versão do driver de GPU a ser pré-instalada. Valor padrão: 460.91.03.

    Não

    OS_ARCH

    amd64

    A arquitetura da CPU. Valores válidos: amd64 e arm64.

    Sim

    MOUNT_RUNTIME_DATADISK

    true

    Defina como true se a imagem personalizada contiver imagens de aplicativo em cache e for necessário montar um disco de dados na instância ECS durante o uso.

    Não

    Importante
    • Antes de atribuir uma imagem personalizada a um node pool, verifique se a configuração do node pool (versão do cluster, região, runtime de contêiner e tipo de instância GPU) corresponde às definições de criação da imagem. Caso contrário, o nó não conseguirá ingressar no cluster.

    • Para validar, adicione a imagem a um node pool comum com parâmetros correspondentes e confirme se suas cargas de trabalho executam conforme o esperado.

  2. Implante o Alicloud Image Builder no cluster:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: build-config
    data:
      ack.json: |-
        
        {
          "variables": {
            "image_name": "ack-optimized_image-1.26-{{timestamp}}",
            "source_image": "m-bp1c7zuf8mcabc99babc",       # Base image for Red Hat Enterprise Linux 9.
            "instance_type": "ecs.c6.xlarge",
            "region": "{{env `ALICLOUD_REGION`}}",
            "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
            "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}",
            "runtime": "{{env `RUNTIME`}}",
            "skip_security_fix": "{{env `SKIP_SECURITY_FIX`}}"
          },
          "builders": [
            {
              "type": "alicloud-ecs",
              "access_key": "{{user `access_key`}}",
              "secret_key": "{{user `secret_key`}}",
              "region": "{{user `region`}}",
              "image_name": "{{user `image_name`}}",
              "source_image": "{{user `source_image`}}",
              "ssh_username": "root",
              # "vpc_id": "",
              # "vswitch_id": "",
              # "security_group_id": "",      
              "instance_type": "{{user `instance_type`}}",
              "skip_image_validation": "true",
              "io_optimized": "true"
            }
          ],
          "provisioners": [{
           "type": "file",
           "source": "scripts/ack-optimized-os-rhel9-all.sh",
           "destination": "/root/"
            },
            {
           "type": "shell",
           "inline": [
             "export RUNTIME=containerd",
             "export SKIP_SECURITY_FIX=true",
             "export OS_ARCH=amd64",
             "export KUBE_VERSION=1.26.3-aliyun.1",
             "bash /root/ack-optimized-os-rhel9-all.sh"
          ]
          }]
        }

Etapa 2: Criar um Job de criação

  1. Conceda as permissões necessárias ao par de AccessKey com a política a seguir.

    Visualizar detalhes

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: build-config
    data:
      ack.json: |-
        
        {
          "variables": {
            "image_name": "ack-optimized_image-1.26-{{timestamp}}",
            "source_image": "m-bp1c7zuf8mcabc99babc",       # Base image for Red Hat Enterprise Linux 9.
            "instance_type": "ecs.c6.xlarge",
            "region": "{{env `ALICLOUD_REGION`}}",
            "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
            "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}",
            "runtime": "{{env `RUNTIME`}}",
            "skip_security_fix": "{{env `SKIP_SECURITY_FIX`}}"
          },
          "builders": [
            {
              "type": "alicloud-ecs",
              "access_key": "{{user `access_key`}}",
              "secret_key": "{{user `secret_key`}}",
              "region": "{{user `region`}}",
              "image_name": "{{user `image_name`}}",
              "source_image": "{{user `source_image`}}",
              "ssh_username": "root",
              # "vpc_id": "",
              # "vswitch_id": "",
              # "security_group_id": "",      
              "instance_type": "{{user `instance_type`}}",
              "skip_image_validation": "true",
              "io_optimized": "true"
            }
          ],
          "provisioners": [{
           "type": "file",
           "source": "scripts/ack-optimized-os-rhel9-all.sh",
           "destination": "/root/"
            },
            {
           "type": "shell",
           "inline": [
             "export RUNTIME=containerd",
             "export SKIP_SECURITY_FIX=true",
             "export OS_ARCH=amd64",
             "export KUBE_VERSION=1.26.3-aliyun.1",
             "bash /root/ack-optimized-os-rhel9-all.sh"
          ]
          }]
        }
  2. Gere strings codificadas em Base64 para seu par de AccessKey:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: build-config
    data:
      ack.json: |-
        
        {
          "variables": {
            "image_name": "ack-optimized_image-1.26-{{timestamp}}",
            "source_image": "m-bp1c7zuf8mcabc99babc",       # Base image for Red Hat Enterprise Linux 9.
            "instance_type": "ecs.c6.xlarge",
            "region": "{{env `ALICLOUD_REGION`}}",
            "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
            "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}",
            "runtime": "{{env `RUNTIME`}}",
            "skip_security_fix": "{{env `SKIP_SECURITY_FIX`}}"
          },
          "builders": [
            {
              "type": "alicloud-ecs",
              "access_key": "{{user `access_key`}}",
              "secret_key": "{{user `secret_key`}}",
              "region": "{{user `region`}}",
              "image_name": "{{user `image_name`}}",
              "source_image": "{{user `source_image`}}",
              "ssh_username": "root",
              # "vpc_id": "",
              # "vswitch_id": "",
              # "security_group_id": "",      
              "instance_type": "{{user `instance_type`}}",
              "skip_image_validation": "true",
              "io_optimized": "true"
            }
          ],
          "provisioners": [{
           "type": "file",
           "source": "scripts/ack-optimized-os-rhel9-all.sh",
           "destination": "/root/"
            },
            {
           "type": "shell",
           "inline": [
             "export RUNTIME=containerd",
             "export SKIP_SECURITY_FIX=true",
             "export OS_ARCH=amd64",
             "export KUBE_VERSION=1.26.3-aliyun.1",
             "bash /root/ack-optimized-os-rhel9-all.sh"
          ]
          }]
        }
  3. Crie um Secret chamado my-secret com o YAML abaixo.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: build-config
    data:
      ack.json: |-
        
        {
          "variables": {
            "image_name": "ack-optimized_image-1.26-{{timestamp}}",
            "source_image": "m-bp1c7zuf8mcabc99babc",       # Base image for Red Hat Enterprise Linux 9.
            "instance_type": "ecs.c6.xlarge",
            "region": "{{env `ALICLOUD_REGION`}}",
            "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
            "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}",
            "runtime": "{{env `RUNTIME`}}",
            "skip_security_fix": "{{env `SKIP_SECURITY_FIX`}}"
          },
          "builders": [
            {
              "type": "alicloud-ecs",
              "access_key": "{{user `access_key`}}",
              "secret_key": "{{user `secret_key`}}",
              "region": "{{user `region`}}",
              "image_name": "{{user `image_name`}}",
              "source_image": "{{user `source_image`}}",
              "ssh_username": "root",
              # "vpc_id": "",
              # "vswitch_id": "",
              # "security_group_id": "",      
              "instance_type": "{{user `instance_type`}}",
              "skip_image_validation": "true",
              "io_optimized": "true"
            }
          ],
          "provisioners": [{
           "type": "file",
           "source": "scripts/ack-optimized-os-rhel9-all.sh",
           "destination": "/root/"
            },
            {
           "type": "shell",
           "inline": [
             "export RUNTIME=containerd",
             "export SKIP_SECURITY_FIX=true",
             "export OS_ARCH=amd64",
             "export KUBE_VERSION=1.26.3-aliyun.1",
             "bash /root/ack-optimized-os-rhel9-all.sh"
          ]
          }]
        }
  4. Crie um arquivo chamado build.yaml com o seguinte conteúdo YAML.

    O Job cria uma instância ECS temporária a partir da source_image, executa os scripts de provisioners, gera uma imagem personalizada e a envia para a região especificada.

    Visualizar detalhes

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: build-config
    data:
      ack.json: |-
        
        {
          "variables": {
            "image_name": "ack-optimized_image-1.26-{{timestamp}}",
            "source_image": "m-bp1c7zuf8mcabc99babc",       # Base image for Red Hat Enterprise Linux 9.
            "instance_type": "ecs.c6.xlarge",
            "region": "{{env `ALICLOUD_REGION`}}",
            "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
            "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}",
            "runtime": "{{env `RUNTIME`}}",
            "skip_security_fix": "{{env `SKIP_SECURITY_FIX`}}"
          },
          "builders": [
            {
              "type": "alicloud-ecs",
              "access_key": "{{user `access_key`}}",
              "secret_key": "{{user `secret_key`}}",
              "region": "{{user `region`}}",
              "image_name": "{{user `image_name`}}",
              "source_image": "{{user `source_image`}}",
              "ssh_username": "root",
              # "vpc_id": "",
              # "vswitch_id": "",
              # "security_group_id": "",      
              "instance_type": "{{user `instance_type`}}",
              "skip_image_validation": "true",
              "io_optimized": "true"
            }
          ],
          "provisioners": [{
           "type": "file",
           "source": "scripts/ack-optimized-os-rhel9-all.sh",
           "destination": "/root/"
            },
            {
           "type": "shell",
           "inline": [
             "export RUNTIME=containerd",
             "export SKIP_SECURITY_FIX=true",
             "export OS_ARCH=amd64",
             "export KUBE_VERSION=1.26.3-aliyun.1",
             "bash /root/ack-optimized-os-rhel9-all.sh"
          ]
          }]
        }
  5. Implante o Job para iniciar a criação da imagem.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: build-config
    data:
      ack.json: |-
        
        {
          "variables": {
            "image_name": "ack-optimized_image-1.26-{{timestamp}}",
            "source_image": "m-bp1c7zuf8mcabc99babc",       # Base image for Red Hat Enterprise Linux 9.
            "instance_type": "ecs.c6.xlarge",
            "region": "{{env `ALICLOUD_REGION`}}",
            "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
            "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}",
            "runtime": "{{env `RUNTIME`}}",
            "skip_security_fix": "{{env `SKIP_SECURITY_FIX`}}"
          },
          "builders": [
            {
              "type": "alicloud-ecs",
              "access_key": "{{user `access_key`}}",
              "secret_key": "{{user `secret_key`}}",
              "region": "{{user `region`}}",
              "image_name": "{{user `image_name`}}",
              "source_image": "{{user `source_image`}}",
              "ssh_username": "root",
              # "vpc_id": "",
              # "vswitch_id": "",
              # "security_group_id": "",      
              "instance_type": "{{user `instance_type`}}",
              "skip_image_validation": "true",
              "io_optimized": "true"
            }
          ],
          "provisioners": [{
           "type": "file",
           "source": "scripts/ack-optimized-os-rhel9-all.sh",
           "destination": "/root/"
            },
            {
           "type": "shell",
           "inline": [
             "export RUNTIME=containerd",
             "export SKIP_SECURITY_FIX=true",
             "export OS_ARCH=amd64",
             "export KUBE_VERSION=1.26.3-aliyun.1",
             "bash /root/ack-optimized-os-rhel9-all.sh"
          ]
          }]
        }

Etapa 3: (Opcional) Visualizar logs de criação

O processo de criação gera logs que registram etapas como validação de parâmetros, criação de recursos temporários, pré-instalação de software e limpeza.

  1. Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.

  2. Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Workloads > Jobs.

  3. Na lista de Jobs, localize o Job criado. Na coluna Actions, clique em Details e selecione a aba Logs para visualizar os logs de criação.

Configuração do provisionador

Um provisionador instala e configura software em uma máquina em execução antes de capturá-la como uma imagem de SO. Casos de uso comuns incluem:

  • Instalação de pacotes de software.

  • Aplicação de patches no kernel.

  • Criação de usuários.

  • Baixe o código de aplicativo.

  • Criação de uma imagem personalizada do Alibaba Cloud Linux 3.

Executar scripts shell

apiVersion: v1
kind: ConfigMap
metadata:
  name: build-config
data:
  ack.json: |-
    
    {
      "variables": {
        "image_name": "ack-optimized_image-1.26-{{timestamp}}",
        "source_image": "m-bp1c7zuf8mcabc99babc",       # Base image for Red Hat Enterprise Linux 9.
        "instance_type": "ecs.c6.xlarge",
        "region": "{{env `ALICLOUD_REGION`}}",
        "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
        "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}",
        "runtime": "{{env `RUNTIME`}}",
        "skip_security_fix": "{{env `SKIP_SECURITY_FIX`}}"
      },
      "builders": [
        {
          "type": "alicloud-ecs",
          "access_key": "{{user `access_key`}}",
          "secret_key": "{{user `secret_key`}}",
          "region": "{{user `region`}}",
          "image_name": "{{user `image_name`}}",
          "source_image": "{{user `source_image`}}",
          "ssh_username": "root",
          # "vpc_id": "",
          # "vswitch_id": "",
          # "security_group_id": "",      
          "instance_type": "{{user `instance_type`}}",
          "skip_image_validation": "true",
          "io_optimized": "true"
        }
      ],
      "provisioners": [{
       "type": "file",
       "source": "scripts/ack-optimized-os-rhel9-all.sh",
       "destination": "/root/"
        },
        {
       "type": "shell",
       "inline": [
         "export RUNTIME=containerd",
         "export SKIP_SECURITY_FIX=true",
         "export OS_ARCH=amd64",
         "export KUBE_VERSION=1.26.3-aliyun.1",
         "bash /root/ack-optimized-os-rhel9-all.sh"
      ]
      }]
    }

Executar playbooks do Ansible

apiVersion: v1
kind: ConfigMap
metadata:
  name: build-config
data:
  ack.json: |-
    
    {
      "variables": {
        "image_name": "ack-optimized_image-1.26-{{timestamp}}",
        "source_image": "m-bp1c7zuf8mcabc99babc",       # Base image for Red Hat Enterprise Linux 9.
        "instance_type": "ecs.c6.xlarge",
        "region": "{{env `ALICLOUD_REGION`}}",
        "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
        "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}",
        "runtime": "{{env `RUNTIME`}}",
        "skip_security_fix": "{{env `SKIP_SECURITY_FIX`}}"
      },
      "builders": [
        {
          "type": "alicloud-ecs",
          "access_key": "{{user `access_key`}}",
          "secret_key": "{{user `secret_key`}}",
          "region": "{{user `region`}}",
          "image_name": "{{user `image_name`}}",
          "source_image": "{{user `source_image`}}",
          "ssh_username": "root",
          # "vpc_id": "",
          # "vswitch_id": "",
          # "security_group_id": "",      
          "instance_type": "{{user `instance_type`}}",
          "skip_image_validation": "true",
          "io_optimized": "true"
        }
      ],
      "provisioners": [{
       "type": "file",
       "source": "scripts/ack-optimized-os-rhel9-all.sh",
       "destination": "/root/"
        },
        {
       "type": "shell",
       "inline": [
         "export RUNTIME=containerd",
         "export SKIP_SECURITY_FIX=true",
         "export OS_ARCH=amd64",
         "export KUBE_VERSION=1.26.3-aliyun.1",
         "bash /root/ack-optimized-os-rhel9-all.sh"
      ]
      }]
    }

Instalar cliente CPFS

A instalação do cliente CPFS exige muitos pacotes e compilação em tempo real, o que pode ser lento. Uma imagem personalizada reduz o custo de instalação em grande escala.

Visualizar detalhes

apiVersion: v1
kind: ConfigMap
metadata:
  name: build-config
data:
  ack.json: |-
    
    {
      "variables": {
        "image_name": "ack-optimized_image-1.26-{{timestamp}}",
        "source_image": "m-bp1c7zuf8mcabc99babc",       # Base image for Red Hat Enterprise Linux 9.
        "instance_type": "ecs.c6.xlarge",
        "region": "{{env `ALICLOUD_REGION`}}",
        "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
        "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}",
        "runtime": "{{env `RUNTIME`}}",
        "skip_security_fix": "{{env `SKIP_SECURITY_FIX`}}"
      },
      "builders": [
        {
          "type": "alicloud-ecs",
          "access_key": "{{user `access_key`}}",
          "secret_key": "{{user `secret_key`}}",
          "region": "{{user `region`}}",
          "image_name": "{{user `image_name`}}",
          "source_image": "{{user `source_image`}}",
          "ssh_username": "root",
          # "vpc_id": "",
          # "vswitch_id": "",
          # "security_group_id": "",      
          "instance_type": "{{user `instance_type`}}",
          "skip_image_validation": "true",
          "io_optimized": "true"
        }
      ],
      "provisioners": [{
       "type": "file",
       "source": "scripts/ack-optimized-os-rhel9-all.sh",
       "destination": "/root/"
        },
        {
       "type": "shell",
       "inline": [
         "export RUNTIME=containerd",
         "export SKIP_SECURITY_FIX=true",
         "export OS_ARCH=amd64",
         "export KUBE_VERSION=1.26.3-aliyun.1",
         "bash /root/ack-optimized-os-rhel9-all.sh"
      ]
      }]
    }

Criar imagem personalizada para arquitetura ARM

Visualizar detalhes

apiVersion: v1
kind: ConfigMap
metadata:
  name: build-config
data:
  ack.json: |-
    
    {
      "variables": {
        "image_name": "ack-optimized_image-1.26-{{timestamp}}",
        "source_image": "m-bp1c7zuf8mcabc99babc",       # Base image for Red Hat Enterprise Linux 9.
        "instance_type": "ecs.c6.xlarge",
        "region": "{{env `ALICLOUD_REGION`}}",
        "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
        "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}",
        "runtime": "{{env `RUNTIME`}}",
        "skip_security_fix": "{{env `SKIP_SECURITY_FIX`}}"
      },
      "builders": [
        {
          "type": "alicloud-ecs",
          "access_key": "{{user `access_key`}}",
          "secret_key": "{{user `secret_key`}}",
          "region": "{{user `region`}}",
          "image_name": "{{user `image_name`}}",
          "source_image": "{{user `source_image`}}",
          "ssh_username": "root",
          # "vpc_id": "",
          # "vswitch_id": "",
          # "security_group_id": "",      
          "instance_type": "{{user `instance_type`}}",
          "skip_image_validation": "true",
          "io_optimized": "true"
        }
      ],
      "provisioners": [{
       "type": "file",
       "source": "scripts/ack-optimized-os-rhel9-all.sh",
       "destination": "/root/"
        },
        {
       "type": "shell",
       "inline": [
         "export RUNTIME=containerd",
         "export SKIP_SECURITY_FIX=true",
         "export OS_ARCH=amd64",
         "export KUBE_VERSION=1.26.3-aliyun.1",
         "bash /root/ack-optimized-os-rhel9-all.sh"
      ]
      }]
    }

Criar imagem de SO para nó de GPU

Importante

Imagens personalizadas de GPU e de CPU não podem ser usadas simultaneamente.

Visualizar detalhes

apiVersion: v1
kind: ConfigMap
metadata:
  name: build-config
data:
  ack.json: |-
    
    {
      "variables": {
        "image_name": "ack-optimized_image-1.26-{{timestamp}}",
        "source_image": "m-bp1c7zuf8mcabc99babc",       # Base image for Red Hat Enterprise Linux 9.
        "instance_type": "ecs.c6.xlarge",
        "region": "{{env `ALICLOUD_REGION`}}",
        "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
        "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}",
        "runtime": "{{env `RUNTIME`}}",
        "skip_security_fix": "{{env `SKIP_SECURITY_FIX`}}"
      },
      "builders": [
        {
          "type": "alicloud-ecs",
          "access_key": "{{user `access_key`}}",
          "secret_key": "{{user `secret_key`}}",
          "region": "{{user `region`}}",
          "image_name": "{{user `image_name`}}",
          "source_image": "{{user `source_image`}}",
          "ssh_username": "root",
          # "vpc_id": "",
          # "vswitch_id": "",
          # "security_group_id": "",      
          "instance_type": "{{user `instance_type`}}",
          "skip_image_validation": "true",
          "io_optimized": "true"
        }
      ],
      "provisioners": [{
       "type": "file",
       "source": "scripts/ack-optimized-os-rhel9-all.sh",
       "destination": "/root/"
        },
        {
       "type": "shell",
       "inline": [
         "export RUNTIME=containerd",
         "export SKIP_SECURITY_FIX=true",
         "export OS_ARCH=amd64",
         "export KUBE_VERSION=1.26.3-aliyun.1",
         "bash /root/ack-optimized-os-rhel9-all.sh"
      ]
      }]
    }

Armazenar imagens de aplicativo em cache

Visualizar detalhes

apiVersion: v1
kind: ConfigMap
metadata:
  name: build-config
data:
  ack.json: |-
    
    {
      "variables": {
        "image_name": "ack-optimized_image-1.26-{{timestamp}}",
        "source_image": "m-bp1c7zuf8mcabc99babc",       # Base image for Red Hat Enterprise Linux 9.
        "instance_type": "ecs.c6.xlarge",
        "region": "{{env `ALICLOUD_REGION`}}",
        "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
        "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}",
        "runtime": "{{env `RUNTIME`}}",
        "skip_security_fix": "{{env `SKIP_SECURITY_FIX`}}"
      },
      "builders": [
        {
          "type": "alicloud-ecs",
          "access_key": "{{user `access_key`}}",
          "secret_key": "{{user `secret_key`}}",
          "region": "{{user `region`}}",
          "image_name": "{{user `image_name`}}",
          "source_image": "{{user `source_image`}}",
          "ssh_username": "root",
          # "vpc_id": "",
          # "vswitch_id": "",
          # "security_group_id": "",      
          "instance_type": "{{user `instance_type`}}",
          "skip_image_validation": "true",
          "io_optimized": "true"
        }
      ],
      "provisioners": [{
       "type": "file",
       "source": "scripts/ack-optimized-os-rhel9-all.sh",
       "destination": "/root/"
        },
        {
       "type": "shell",
       "inline": [
         "export RUNTIME=containerd",
         "export SKIP_SECURITY_FIX=true",
         "export OS_ARCH=amd64",
         "export KUBE_VERSION=1.26.3-aliyun.1",
         "bash /root/ack-optimized-os-rhel9-all.sh"
      ]
      }]
    }

Adicionar uma instância ECS com um disco de dados anexado a um node pool inicializa esse disco, removendo as imagens de aplicativo previamente armazenadas em cache. Se você precisar anexar um disco de dados ao usar a imagem personalizada, crie um snapshot do disco de dados durante a criação da imagem para preservar as imagens de aplicativo em cache.

apiVersion: v1
kind: ConfigMap
metadata:
  name: build-config
data:
  ack.json: |-
    
    {
      "variables": {
        "image_name": "ack-optimized_image-1.26-{{timestamp}}",
        "source_image": "m-bp1c7zuf8mcabc99babc",       # Base image for Red Hat Enterprise Linux 9.
        "instance_type": "ecs.c6.xlarge",
        "region": "{{env `ALICLOUD_REGION`}}",
        "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
        "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}",
        "runtime": "{{env `RUNTIME`}}",
        "skip_security_fix": "{{env `SKIP_SECURITY_FIX`}}"
      },
      "builders": [
        {
          "type": "alicloud-ecs",
          "access_key": "{{user `access_key`}}",
          "secret_key": "{{user `secret_key`}}",
          "region": "{{user `region`}}",
          "image_name": "{{user `image_name`}}",
          "source_image": "{{user `source_image`}}",
          "ssh_username": "root",
          # "vpc_id": "",
          # "vswitch_id": "",
          # "security_group_id": "",      
          "instance_type": "{{user `instance_type`}}",
          "skip_image_validation": "true",
          "io_optimized": "true"
        }
      ],
      "provisioners": [{
       "type": "file",
       "source": "scripts/ack-optimized-os-rhel9-all.sh",
       "destination": "/root/"
        },
        {
       "type": "shell",
       "inline": [
         "export RUNTIME=containerd",
         "export SKIP_SECURITY_FIX=true",
         "export OS_ARCH=amd64",
         "export KUBE_VERSION=1.26.3-aliyun.1",
         "bash /root/ack-optimized-os-rhel9-all.sh"
      ]
      }]
    }

Ao configurar um node pool, selecione uma imagem personalizada que contenha um snapshot de disco de dados. O sistema exibirá a mensagem de que a imagem personalizada selecionada contém um snapshot de disco de dados e o disco de dados correspondente será carregado automaticamente. O tipo de disco é ESSD AutoPL, a capacidade é de 120 GiB, e as opções Enable Burst Performance e Release with Instance estarão selecionadas. A configuração de inicialização será Format and use as container runtime, com sistema de arquivos ext4. Se você modificar a capacidade do disco de dados, deverá expandir manualmente a partição e o sistema de arquivos após a criação da instância ECS.

Fazer pull de um registro privado (docker)

apiVersion: v1
kind: ConfigMap
metadata:
  name: build-config
data:
  ack.json: |-
    
    {
      "variables": {
        "image_name": "ack-optimized_image-1.26-{{timestamp}}",
        "source_image": "m-bp1c7zuf8mcabc99babc",       # Base image for Red Hat Enterprise Linux 9.
        "instance_type": "ecs.c6.xlarge",
        "region": "{{env `ALICLOUD_REGION`}}",
        "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
        "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}",
        "runtime": "{{env `RUNTIME`}}",
        "skip_security_fix": "{{env `SKIP_SECURITY_FIX`}}"
      },
      "builders": [
        {
          "type": "alicloud-ecs",
          "access_key": "{{user `access_key`}}",
          "secret_key": "{{user `secret_key`}}",
          "region": "{{user `region`}}",
          "image_name": "{{user `image_name`}}",
          "source_image": "{{user `source_image`}}",
          "ssh_username": "root",
          # "vpc_id": "",
          # "vswitch_id": "",
          # "security_group_id": "",      
          "instance_type": "{{user `instance_type`}}",
          "skip_image_validation": "true",
          "io_optimized": "true"
        }
      ],
      "provisioners": [{
       "type": "file",
       "source": "scripts/ack-optimized-os-rhel9-all.sh",
       "destination": "/root/"
        },
        {
       "type": "shell",
       "inline": [
         "export RUNTIME=containerd",
         "export SKIP_SECURITY_FIX=true",
         "export OS_ARCH=amd64",
         "export KUBE_VERSION=1.26.3-aliyun.1",
         "bash /root/ack-optimized-os-rhel9-all.sh"
      ]
      }]
    }

Fazer pull de um registro privado (containerd)

apiVersion: v1
kind: ConfigMap
metadata:
  name: build-config
data:
  ack.json: |-
    
    {
      "variables": {
        "image_name": "ack-optimized_image-1.26-{{timestamp}}",
        "source_image": "m-bp1c7zuf8mcabc99babc",       # Base image for Red Hat Enterprise Linux 9.
        "instance_type": "ecs.c6.xlarge",
        "region": "{{env `ALICLOUD_REGION`}}",
        "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
        "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}",
        "runtime": "{{env `RUNTIME`}}",
        "skip_security_fix": "{{env `SKIP_SECURITY_FIX`}}"
      },
      "builders": [
        {
          "type": "alicloud-ecs",
          "access_key": "{{user `access_key`}}",
          "secret_key": "{{user `secret_key`}}",
          "region": "{{user `region`}}",
          "image_name": "{{user `image_name`}}",
          "source_image": "{{user `source_image`}}",
          "ssh_username": "root",
          # "vpc_id": "",
          # "vswitch_id": "",
          # "security_group_id": "",      
          "instance_type": "{{user `instance_type`}}",
          "skip_image_validation": "true",
          "io_optimized": "true"
        }
      ],
      "provisioners": [{
       "type": "file",
       "source": "scripts/ack-optimized-os-rhel9-all.sh",
       "destination": "/root/"
        },
        {
       "type": "shell",
       "inline": [
         "export RUNTIME=containerd",
         "export SKIP_SECURITY_FIX=true",
         "export OS_ARCH=amd64",
         "export KUBE_VERSION=1.26.3-aliyun.1",
         "bash /root/ack-optimized-os-rhel9-all.sh"
      ]
      }]
    }

Fazer pull de um registro privado durante a criação

  1. Em uma máquina Linux com docker instalado, execute docker login para gerar credenciais.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: build-config
    data:
      ack.json: |-
        
        {
          "variables": {
            "image_name": "ack-optimized_image-1.26-{{timestamp}}",
            "source_image": "m-bp1c7zuf8mcabc99babc",       # Base image for Red Hat Enterprise Linux 9.
            "instance_type": "ecs.c6.xlarge",
            "region": "{{env `ALICLOUD_REGION`}}",
            "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
            "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}",
            "runtime": "{{env `RUNTIME`}}",
            "skip_security_fix": "{{env `SKIP_SECURITY_FIX`}}"
          },
          "builders": [
            {
              "type": "alicloud-ecs",
              "access_key": "{{user `access_key`}}",
              "secret_key": "{{user `secret_key`}}",
              "region": "{{user `region`}}",
              "image_name": "{{user `image_name`}}",
              "source_image": "{{user `source_image`}}",
              "ssh_username": "root",
              # "vpc_id": "",
              # "vswitch_id": "",
              # "security_group_id": "",      
              "instance_type": "{{user `instance_type`}}",
              "skip_image_validation": "true",
              "io_optimized": "true"
            }
          ],
          "provisioners": [{
           "type": "file",
           "source": "scripts/ack-optimized-os-rhel9-all.sh",
           "destination": "/root/"
            },
            {
           "type": "shell",
           "inline": [
             "export RUNTIME=containerd",
             "export SKIP_SECURITY_FIX=true",
             "export OS_ARCH=amd64",
             "export KUBE_VERSION=1.26.3-aliyun.1",
             "bash /root/ack-optimized-os-rhel9-all.sh"
          ]
          }]
        }

    Um docker login bem-sucedido cria o arquivo config.json no diretório /root/.docker.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: build-config
    data:
      ack.json: |-
        
        {
          "variables": {
            "image_name": "ack-optimized_image-1.26-{{timestamp}}",
            "source_image": "m-bp1c7zuf8mcabc99babc",       # Base image for Red Hat Enterprise Linux 9.
            "instance_type": "ecs.c6.xlarge",
            "region": "{{env `ALICLOUD_REGION`}}",
            "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
            "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}",
            "runtime": "{{env `RUNTIME`}}",
            "skip_security_fix": "{{env `SKIP_SECURITY_FIX`}}"
          },
          "builders": [
            {
              "type": "alicloud-ecs",
              "access_key": "{{user `access_key`}}",
              "secret_key": "{{user `secret_key`}}",
              "region": "{{user `region`}}",
              "image_name": "{{user `image_name`}}",
              "source_image": "{{user `source_image`}}",
              "ssh_username": "root",
              # "vpc_id": "",
              # "vswitch_id": "",
              # "security_group_id": "",      
              "instance_type": "{{user `instance_type`}}",
              "skip_image_validation": "true",
              "io_optimized": "true"
            }
          ],
          "provisioners": [{
           "type": "file",
           "source": "scripts/ack-optimized-os-rhel9-all.sh",
           "destination": "/root/"
            },
            {
           "type": "shell",
           "inline": [
             "export RUNTIME=containerd",
             "export SKIP_SECURITY_FIX=true",
             "export OS_ARCH=amd64",
             "export KUBE_VERSION=1.26.3-aliyun.1",
             "bash /root/ack-optimized-os-rhel9-all.sh"
          ]
          }]
        }
  2. Crie um ConfigMap a partir do config.json gerado.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: build-config
    data:
      ack.json: |-
        
        {
          "variables": {
            "image_name": "ack-optimized_image-1.26-{{timestamp}}",
            "source_image": "m-bp1c7zuf8mcabc99babc",       # Base image for Red Hat Enterprise Linux 9.
            "instance_type": "ecs.c6.xlarge",
            "region": "{{env `ALICLOUD_REGION`}}",
            "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
            "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}",
            "runtime": "{{env `RUNTIME`}}",
            "skip_security_fix": "{{env `SKIP_SECURITY_FIX`}}"
          },
          "builders": [
            {
              "type": "alicloud-ecs",
              "access_key": "{{user `access_key`}}",
              "secret_key": "{{user `secret_key`}}",
              "region": "{{user `region`}}",
              "image_name": "{{user `image_name`}}",
              "source_image": "{{user `source_image`}}",
              "ssh_username": "root",
              # "vpc_id": "",
              # "vswitch_id": "",
              # "security_group_id": "",      
              "instance_type": "{{user `instance_type`}}",
              "skip_image_validation": "true",
              "io_optimized": "true"
            }
          ],
          "provisioners": [{
           "type": "file",
           "source": "scripts/ack-optimized-os-rhel9-all.sh",
           "destination": "/root/"
            },
            {
           "type": "shell",
           "inline": [
             "export RUNTIME=containerd",
             "export SKIP_SECURITY_FIX=true",
             "export OS_ARCH=amd64",
             "export KUBE_VERSION=1.26.3-aliyun.1",
             "bash /root/ack-optimized-os-rhel9-all.sh"
          ]
          }]
        }
  3. Modifique o YAML do Job para montar o ConfigMap no Pod.

    Visualizar detalhes

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: build-config
    data:
      ack.json: |-
        
        {
          "variables": {
            "image_name": "ack-optimized_image-1.26-{{timestamp}}",
            "source_image": "m-bp1c7zuf8mcabc99babc",       # Base image for Red Hat Enterprise Linux 9.
            "instance_type": "ecs.c6.xlarge",
            "region": "{{env `ALICLOUD_REGION`}}",
            "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
            "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}",
            "runtime": "{{env `RUNTIME`}}",
            "skip_security_fix": "{{env `SKIP_SECURITY_FIX`}}"
          },
          "builders": [
            {
              "type": "alicloud-ecs",
              "access_key": "{{user `access_key`}}",
              "secret_key": "{{user `secret_key`}}",
              "region": "{{user `region`}}",
              "image_name": "{{user `image_name`}}",
              "source_image": "{{user `source_image`}}",
              "ssh_username": "root",
              # "vpc_id": "",
              # "vswitch_id": "",
              # "security_group_id": "",      
              "instance_type": "{{user `instance_type`}}",
              "skip_image_validation": "true",
              "io_optimized": "true"
            }
          ],
          "provisioners": [{
           "type": "file",
           "source": "scripts/ack-optimized-os-rhel9-all.sh",
           "destination": "/root/"
            },
            {
           "type": "shell",
           "inline": [
             "export RUNTIME=containerd",
             "export SKIP_SECURITY_FIX=true",
             "export OS_ARCH=amd64",
             "export KUBE_VERSION=1.26.3-aliyun.1",
             "bash /root/ack-optimized-os-rhel9-all.sh"
          ]
          }]
        }
  4. Modifique o arquivo build-config conforme descrito abaixo.

    Visualizar detalhes

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: build-config
    data:
      ack.json: |-
        
        {
          "variables": {
            "image_name": "ack-optimized_image-1.26-{{timestamp}}",
            "source_image": "m-bp1c7zuf8mcabc99babc",       # Base image for Red Hat Enterprise Linux 9.
            "instance_type": "ecs.c6.xlarge",
            "region": "{{env `ALICLOUD_REGION`}}",
            "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
            "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}",
            "runtime": "{{env `RUNTIME`}}",
            "skip_security_fix": "{{env `SKIP_SECURITY_FIX`}}"
          },
          "builders": [
            {
              "type": "alicloud-ecs",
              "access_key": "{{user `access_key`}}",
              "secret_key": "{{user `secret_key`}}",
              "region": "{{user `region`}}",
              "image_name": "{{user `image_name`}}",
              "source_image": "{{user `source_image`}}",
              "ssh_username": "root",
              # "vpc_id": "",
              # "vswitch_id": "",
              # "security_group_id": "",      
              "instance_type": "{{user `instance_type`}}",
              "skip_image_validation": "true",
              "io_optimized": "true"
            }
          ],
          "provisioners": [{
           "type": "file",
           "source": "scripts/ack-optimized-os-rhel9-all.sh",
           "destination": "/root/"
            },
            {
           "type": "shell",
           "inline": [
             "export RUNTIME=containerd",
             "export SKIP_SECURITY_FIX=true",
             "export OS_ARCH=amd64",
             "export KUBE_VERSION=1.26.3-aliyun.1",
             "bash /root/ack-optimized-os-rhel9-all.sh"
          ]
          }]
        }
  5. Execute o Job.

Definir uploads e downloads simultâneos de imagens

  1. Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.

  2. Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Nodes > Node Pools.

  3. Clique no nome do node pool desejado. Na aba Overview, localize a seção Node Pool Information e clique no link ao lado de Auto Scaling Group.

  4. Clique na aba Scaling Configurations. Localize a configuração de dimensionamento alvo, clique em Edit na coluna Actions e selecione OK.

  5. Na página Modify Scaling Configuration, expanda Advanced Settings e copie o conteúdo de Instance User Data. Decodifique os dados em Base64 presentes no conteúdo de Instance User Data. Decodifique os dados em Base64 na caixa Instance User Data.

  6. Decodifique e modifique os dados do usuário da instância.

    Decodifique os dados do usuário da instância em Base64 e anexe o código a seguir ao script.

    Este código instala o jq , atualiza a configuração do daemon do docker para aumentar os downloads e uploads simultâneos e reinicia o docker.
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: build-config
    data:
      ack.json: |-
        
        {
          "variables": {
            "image_name": "ack-optimized_image-1.26-{{timestamp}}",
            "source_image": "m-bp1c7zuf8mcabc99babc",       # Base image for Red Hat Enterprise Linux 9.
            "instance_type": "ecs.c6.xlarge",
            "region": "{{env `ALICLOUD_REGION`}}",
            "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
            "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}",
            "runtime": "{{env `RUNTIME`}}",
            "skip_security_fix": "{{env `SKIP_SECURITY_FIX`}}"
          },
          "builders": [
            {
              "type": "alicloud-ecs",
              "access_key": "{{user `access_key`}}",
              "secret_key": "{{user `secret_key`}}",
              "region": "{{user `region`}}",
              "image_name": "{{user `image_name`}}",
              "source_image": "{{user `source_image`}}",
              "ssh_username": "root",
              # "vpc_id": "",
              # "vswitch_id": "",
              # "security_group_id": "",      
              "instance_type": "{{user `instance_type`}}",
              "skip_image_validation": "true",
              "io_optimized": "true"
            }
          ],
          "provisioners": [{
           "type": "file",
           "source": "scripts/ack-optimized-os-rhel9-all.sh",
           "destination": "/root/"
            },
            {
           "type": "shell",
           "inline": [
             "export RUNTIME=containerd",
             "export SKIP_SECURITY_FIX=true",
             "export OS_ARCH=amd64",
             "export KUBE_VERSION=1.26.3-aliyun.1",
             "bash /root/ack-optimized-os-rhel9-all.sh"
          ]
          }]
        }
  7. Codifique novamente e atualize os dados.

    Codifique o script modificado em Base64. Substitua o conteúdo na caixa Instance User Data pela saída codificada e clique em OK.

Criar imagem personalizada do Alibaba Cloud Linux 3

Visualizar detalhes

apiVersion: v1
kind: ConfigMap
metadata:
  name: build-config
data:
  ack.json: |-
    
    {
      "variables": {
        "image_name": "ack-optimized_image-1.26-{{timestamp}}",
        "source_image": "m-bp1c7zuf8mcabc99babc",       # Base image for Red Hat Enterprise Linux 9.
        "instance_type": "ecs.c6.xlarge",
        "region": "{{env `ALICLOUD_REGION`}}",
        "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
        "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}",
        "runtime": "{{env `RUNTIME`}}",
        "skip_security_fix": "{{env `SKIP_SECURITY_FIX`}}"
      },
      "builders": [
        {
          "type": "alicloud-ecs",
          "access_key": "{{user `access_key`}}",
          "secret_key": "{{user `secret_key`}}",
          "region": "{{user `region`}}",
          "image_name": "{{user `image_name`}}",
          "source_image": "{{user `source_image`}}",
          "ssh_username": "root",
          # "vpc_id": "",
          # "vswitch_id": "",
          # "security_group_id": "",      
          "instance_type": "{{user `instance_type`}}",
          "skip_image_validation": "true",
          "io_optimized": "true"
        }
      ],
      "provisioners": [{
       "type": "file",
       "source": "scripts/ack-optimized-os-rhel9-all.sh",
       "destination": "/root/"
        },
        {
       "type": "shell",
       "inline": [
         "export RUNTIME=containerd",
         "export SKIP_SECURITY_FIX=true",
         "export OS_ARCH=amd64",
         "export KUBE_VERSION=1.26.3-aliyun.1",
         "bash /root/ack-optimized-os-rhel9-all.sh"
      ]
      }]
    }

Criar imagem personalizada do Alibaba Cloud Linux 4

Visualizar detalhes

apiVersion: v1
kind: ConfigMap
metadata:
  name: build-config
data:
  ack.json: |-
    
    {
      "variables": {
        "image_name": "ack-optimized_image-1.26-{{timestamp}}",
        "source_image": "m-bp1c7zuf8mcabc99babc",       # Base image for Red Hat Enterprise Linux 9.
        "instance_type": "ecs.c6.xlarge",
        "region": "{{env `ALICLOUD_REGION`}}",
        "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
        "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}",
        "runtime": "{{env `RUNTIME`}}",
        "skip_security_fix": "{{env `SKIP_SECURITY_FIX`}}"
      },
      "builders": [
        {
          "type": "alicloud-ecs",
          "access_key": "{{user `access_key`}}",
          "secret_key": "{{user `secret_key`}}",
          "region": "{{user `region`}}",
          "image_name": "{{user `image_name`}}",
          "source_image": "{{user `source_image`}}",
          "ssh_username": "root",
          # "vpc_id": "",
          # "vswitch_id": "",
          # "security_group_id": "",      
          "instance_type": "{{user `instance_type`}}",
          "skip_image_validation": "true",
          "io_optimized": "true"
        }
      ],
      "provisioners": [{
       "type": "file",
       "source": "scripts/ack-optimized-os-rhel9-all.sh",
       "destination": "/root/"
        },
        {
       "type": "shell",
       "inline": [
         "export RUNTIME=containerd",
         "export SKIP_SECURITY_FIX=true",
         "export OS_ARCH=amd64",
         "export KUBE_VERSION=1.26.3-aliyun.1",
         "bash /root/ack-optimized-os-rhel9-all.sh"
      ]
      }]
    }

Criar imagem personalizada do Red Hat Enterprise Linux 9

Visualizar detalhes

apiVersion: v1
kind: ConfigMap
metadata:
  name: build-config
data:
  ack.json: |-
    
    {
      "variables": {
        "image_name": "ack-optimized_image-1.26-{{timestamp}}",
        "source_image": "m-bp1c7zuf8mcabc99babc",       # Base image for Red Hat Enterprise Linux 9.
        "instance_type": "ecs.c6.xlarge",
        "region": "{{env `ALICLOUD_REGION`}}",
        "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
        "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}",
        "runtime": "{{env `RUNTIME`}}",
        "skip_security_fix": "{{env `SKIP_SECURITY_FIX`}}"
      },
      "builders": [
        {
          "type": "alicloud-ecs",
          "access_key": "{{user `access_key`}}",
          "secret_key": "{{user `secret_key`}}",
          "region": "{{user `region`}}",
          "image_name": "{{user `image_name`}}",
          "source_image": "{{user `source_image`}}",
          "ssh_username": "root",
          # "vpc_id": "",
          # "vswitch_id": "",
          # "security_group_id": "",      
          "instance_type": "{{user `instance_type`}}",
          "skip_image_validation": "true",
          "io_optimized": "true"
        }
      ],
      "provisioners": [{
       "type": "file",
       "source": "scripts/ack-optimized-os-rhel9-all.sh",
       "destination": "/root/"
        },
        {
       "type": "shell",
       "inline": [
         "export RUNTIME=containerd",
         "export SKIP_SECURITY_FIX=true",
         "export OS_ARCH=amd64",
         "export KUBE_VERSION=1.26.3-aliyun.1",
         "bash /root/ack-optimized-os-rhel9-all.sh"
      ]
      }]
    }

Próximas etapas