Usar um script de inicialização em VMs do Windows

Um script de inicialização executa tarefas durante o processo de inicialização de uma máquina virtual (VM). Este documento mostra as etapas a serem seguidas para usar scripts de inicialização em instâncias de VM.

Um script de inicialização é uma ferramenta de automação que executa tarefas durante o processo de inicialização da VM. Use scripts de inicialização para automatizar tarefas de configuração e implantação de VMs em instâncias novas ou atuais, economizando tempo e reduzindo o esforço de configuração manual.

Este documento é destinado a desenvolvedores em grupos de administradores de plataforma ou operadores de aplicativos que querem usar scripts de inicialização para VMs em um ambiente do Distributed Cloud. Para mais informações, consulte Públicos-alvo da documentação do GDC com isolamento físico.

Antes de começar

Para usar comandos da interface de linha de comando (CLI) gdcloud, faça o download, a instalação, e a configuração da gdcloud CLI. Todos os comandos do Distributed Cloud usam a CLI gdcloud ou kubectl e exigem um ambiente de sistema operacional (SO).

Receber o caminho do arquivo kubeconfig

Para executar comandos no servidor da API Management, verifique se você tem os seguintes recursos:

  1. Faça login e gere o arquivo kubeconfig para o servidor da API Management, se você não tiver um.

  2. Use o caminho para o arquivo kubeconfig do servidor da API Management para substituir MANAGEMENT_API_SERVER nestas instruções.

Solicitar papéis do IAM

Para usar scripts de inicialização em uma VM, entre em contato com o administrador do IAM do projeto para solicitar os seguintes papéis no projeto:

  • Administrador do projeto de máquina virtual (project-vm-admin): cria, modifica, lista e exclui VMs no namespace do projeto.

  • Administrador de secrets (secret-admin): recebe, lista, cria, atualiza, exclui, corrige e monitora secrets do Kubernetes no namespace do projeto. Use esse papel para especificar secrets de script de inicialização. Não é necessário ter esse papel para especificar scripts de inicialização de texto simples.

Todos os papéis de VM precisam ser vinculados ao namespace do projeto em que a VM reside. Siga as etapas para verificar seu acesso.

Formatar nomes de script de inicialização do Windows

Os scripts de inicialização para VMs do Windows precisam seguir um formato de nomenclatura específico com o nome do script e a extensão do arquivo anexados, separados por traços. Por exemplo, create-directory-ps1, com create-directory como o nome do script e ps1 como a extensão do arquivo. Os formatos incorretos incluem o uso de pontos em vez de traços e a omissão da extensão do arquivo, como create-directory.ps1 e create-directory.

A seguir, mostramos as extensões de arquivo a serem usadas para scripts de inicialização do Windows:

  • ps1: contém comandos do PowerShell.
  • cmd: contém comandos em lote para o intérprete do prompt de comando.
  • bat: contém comandos em lote.

Executar scripts de inicialização do Windows em ordem

É possível usar vários scripts de inicialização. O tipo de arquivo que contém o script afeta a ordem de execução de cada script. A tabela a seguir mostra a ordem de execução dos scripts de inicialização do Windows:

Script do Windows Ordem de execução
Script do PowerShell Primeiro em cada inicialização.
Script em lote Segundo em cada inicialização.
Script de comando Terceiro em cada inicialização.

Se dois scripts de inicialização tiverem a mesma extensão de arquivo, eles serão executados com base na extensão e no nome do arquivo em ordem alfabética. Por exemplo, se os nomes script de inicialização forem alpha-script-ps1 e beta-script-ps1, alpha-script-ps1 será executado antes de beta-script-ps1.

A especificação de VM de exemplo a seguir mostra a ordem e a estrutura do script de inicialização do Windows no campo startupScripts:

# …
  startupScripts:
  - name: create-directory-ps1
    script: |-
      New-Item -ItemType Directory -Path C:\ -Name NewDir
      Get-ChildItem -Path C:\
  - name: hello-world-bat
    script: |-
      ECHO "Hello World!"
  - name: list-directories-cmd
    script: |-
      dir C:\Windows  > files.txt
# …

Transmitir um script de inicialização

O Distributed Cloud executa scripts de inicialização em ordem alfabética, com base no nome de cada script de inicialização.

A tabela a seguir mostra o formato de script a ser usado com base no tamanho do script:

Tamanho do script Formato do script
Scripts de até 2.048 bytes Texto não criptografado
Scripts maiores que 2.048 bytes Secret do Kubernetes

Definir um script de inicialização

Para usar um script de inicialização, adicione o campo startupScripts ao campo spec da VM. Nesse campo, é possível especificar vários scripts de inicialização como texto não criptografado ou como um secret do Kubernetes.

O exemplo a seguir especifica os scripts de inicialização como texto não criptografado e um secret do Kubernetes:

apiVersion: virtualmachine.gdc.goog/v1
kind: VirtualMachine
metadata:
  name: "vm-test"
spec:
  # …
  startupScripts:
  - name: create-directory-ps1
    script: |-
      New-Item -ItemType Directory -Path C:\ -Name NewDir
      Get-ChildItem -Path C:\
  - name: list-directories-cmd
    scriptSecretRef:
      name: list-directories
---
apiVersion: v1
kind: Secret
type: Opaque
metadata:
  name: list-directories
data:
  script:
    ZGlyIEM6XFdpbmRvd3MgID4gZmlsZXMudHh0Cg==

Analise as considerações a seguir:

  • O script de inicialização é executado em cada inicialização.
  • O script de inicialização tem privilégios de raiz padrão.
  • No secret do Kubernetes, o nome de scriptSecretRef na spec da VM precisa corresponder ao campo metadata.name.
  • No secret do Kubernetes, especifique o conteúdo do script de inicialização adicionando uma chave script ao campo data.

Criar uma VM com um script de inicialização do Windows

Para criar uma VM com um script de inicialização do Windows, siga as etapas em Criar uma VM com um script de inicialização.