Neste documento, explicamos como usar scripts de inicialização para iniciar uma instância de máquina virtual (VM) e os programas associados a ela no Google Distributed Cloud (GDC) com isolamento físico.
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 os comandos da interface de linha de comando (CLI) gdcloud, faça o download, instale
e configure a CLI gdcloud.
Todos os comandos do Distributed Cloud usam a CLI gdcloud ou
kubectl e exigem um ambiente de sistema operacional (SO).
Acessar o caminho do arquivo kubeconfig
Para executar comandos no servidor de API Management, verifique se você tem os seguintes recursos:
Faça login e gere o arquivo kubeconfig para o servidor da API Management, se você não tiver um.
Use o caminho para o arquivo kubeconfig do servidor de API Management para substituir
MANAGEMENT_API_SERVERnestas instruções.
Solicitar papéis do IAM
Para usar scripts de inicialização em uma VM, entre em contato com o administrador do projeto do IAM para solicitar os seguintes papéis no projeto:
Administrador do projeto de máquina virtual (
project-vm-admin): criar, modificar, listar e excluir VMs no namespace do projeto.Administrador de secrets (
secret-admin): acessar, listar, criar, atualizar, excluir, corrigir e monitorar 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.
Transmitir um script de inicialização
É possível usar scripts bash ou não bash como scripts de inicialização. Para isso,
inclua #!/bin/… no início do script para indicar o interpretador de scripts.
Por exemplo, para usar um script de inicialização do Python 3, adicione #! /usr/bin/python3 ao
início do script.
O Google Distributed Cloud (GDC) com isolamento físico executa scripts de inicialização na ordem
em que aparecem na matriz startupScripts.
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 | Limpar texto |
| Scripts com mais de 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 simples
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: "my-vm"
spec:
# …
startupScripts:
- name: hello-world
script: |
#!/bin/bash
echo hello
- name: add-user
scriptSecretRef:
name: add-user
---
apiVersion: v1
kind: Secret
type: Opaque
metadata:
name: add-user
data:
script:
IyEvYmluL2Jhc2gKYWRkdXNlciB1c2VyCg==
Analise as seguintes considerações:
- O script de inicialização é executado em cada inicialização.
- O script de inicialização tem privilégios raiz padrão.
- No secret do Kubernetes, o nome do
scriptSecretRefna VMspecprecisa corresponder ao campometadata.name. - No secret do Kubernetes, especifique o conteúdo do script de inicialização adicionando uma chave
scriptao campodata.
Criar uma VM com um script de inicialização
Estas instruções se aplicam independentemente do que você usa como imagem para criar sua VM. Preencha os campos:
Para criar um script de inicialização como um secret do Kubernetes, execute:
cat <<EOF >>FILE_NAME STARTUP_SCRIPT_CONTENT EOFkubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT \ create secret generic SECRET_NAME \ --from-file=script=FILE_NAMErm FILE_NAMEConsulte as etapas para criar uma VM, conforme descrito na página Criar uma VM. Na etapa um, adicione os script de inicialização ao campo
specantes de executar o comando para criar uma VM.Este exemplo define um script de inicialização com texto não criptografado e um secret do Kubernetes:
apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachine metadata: name: VM_NAME namespace: PROJECT spec: # … startupScripts: - name: CLEAR_TEXT_SCRIPT_NAME script: | #!/bin/bash CLEAR_TEXT_SCRIPT - name: SECRET_SCRIPT_NAME scriptSecretRef: name: SECRET_NAMEEssas variáveis são definidas da seguinte maneira:
Variável Definição MANAGEMENT_API_SERVERO arquivo kubeconfig do servidor de API Management. PROJECTO projeto na nuvem do Distributed Cloud em que você quer criar a VM. VM_NAMEO nome da VM. FILE_NAMEO nome do arquivo para armazenar o script de inicialização. STARTUP_SCRIPT_CONTENTOs comandos a serem executados como parte do script de inicialização CLEAR_TEXT_SCRIPT_NAMEO nome do script de inicialização de texto simples. CLEAR_TEXT_SCRIPTO script de texto simples que você define. SECRET_NAMEO nome do secret do Kubernetes. SECRET_SCRIPT_NAMEO nome do script de inicialização como um secret do Kubernetes. Siga as etapas abaixo para criar uma VM.
Veja a seguir um exemplo de como criar uma VM com scripts de inicialização que adicionam um novo usuário usando um secret do Kubernetes e texto não criptografado.
kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT \ apply -f - <<EOF apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachineDisk metadata: name: VM_BOOT_DISK_NAME spec: source: image: name: BOOT_DISK_IMAGE_NAME namespace: vm-system size: BOOT_DISK_SIZE --- apiVersion: v1 kind: Secret type: Opaque metadata: name: add-user data: script: IyEvYmluL2Jhc2gKYWRkdXNlciB1c2VyCg== --- apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachine metadata: name: VM_NAME spec: compute: virtualMachineType: MACHINE_TYPE disks: - virtualMachineDiskRef: name: VM_BOOT_DISK_NAME boot: true autoDelete: BOOT_DISK_AUTO_DELETE startupScripts: - name: add-user scriptSecretRef: name: add-user - name: add-to-sudoers script: | #!/bin/bash usermod -aG sudo user EOFNo exemplo, as variáveis são definidas da seguinte maneira.
Variável Definição MANAGEMENT_API_SERVERO arquivo kubeconfig do servidor de API Management. PROJECTO projeto na nuvem do Distributed Cloud em que você quer criar a VM. VM_NAMEO nome da nova VM. VM_BOOT_DISK_NAMEO nome do novo disco de inicialização da VM. BOOT_DISK_IMAGE_NAMEO nome da imagem que será usada para o novo disco de inicialização da VM. BOOT_DISK_SIZEO tamanho do disco de inicialização, como 20G.
Esse valor precisa ser sempre maior ou igual aominimumDiskSizeda imagem do disco de inicialização.BOOT_DISK_AUTO_DELETEtrueoufalse, indicando se o disco de inicialização é excluído automaticamente quando a instância de VM é excluída.MACHINE_TYPEO tipo de máquina predefinido para a nova VM. Para selecionar um tipo de máquina disponível, execute este comando:
kubectl --kubeconfig MANAGEMENT_API_SERVER get virtualmachinetype.virtualmachine.gdc.goog --namespace vm-system
Atualizar uma VM com um script de inicialização
Também é possível atualizar uma VM atual com um script de inicialização. A VM precisa ser encerrada antes de você realizar a atualização.
Siga as etapas para atualizar as propriedades da VM
e atualize o campo spec com o script de inicialização que você quer executar.
Ver a saída de um script de inicialização
- Siga as etapas para se conectar a uma VM.
Execute o seguinte comando dentro da VM convidada para receber os registros do script de inicialização que você executou:
sudo journalctl -u cloud-finalOs registros do script de inicialização começam com o seguinte:
Started to run the command: /var/lib/google/startup-scripts/<script-name> ...