Um script de inicialização realiza tarefas durante o processo de inicialização de uma máquina virtual (VM). Nesta página, você encontra as etapas para usar scripts de inicialização em instâncias de VM.
Antes de começar
Para usar os comandos da interface de linha de comando (CLI) gdcloud
, verifique se você baixou, instalou
e configurou a CLI gdcloud
.
Todos os comandos do Distributed Cloud usam a CLI gdcloud
ou kubectl
e exigem um ambiente de sistema operacional (SO).
Extrair o caminho do arquivo kubeconfig
Para executar comandos no servidor da 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 da API Management para substituir
MANAGEMENT_API_SERVER
nestas instruções.
Solicitar permissões e acesso
Para executar as tarefas listadas nesta página, você precisa ter o papel de administrador de máquina virtual do projeto. Siga as etapas para
verificar
seu acesso ou peça ao administrador do IAM do projeto para
atribuir
a você o papel de administrador de máquinas virtuais do projeto (project-vm-admin
) no namespace
do projeto em que a VM está localizada.
Transmitir um script de inicialização
É possível usar scripts bash ou não bash como scripts de inicialização. Para fazer 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) isolado por ar 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 dele:
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==
Confira as seguintes considerações:
- O script de inicialização é executado em todas as inicializações.
- O script de inicialização tem privilégios raiz padrão.
- No secret do Kubernetes, o nome do
scriptSecretRef
na VMspec
precisa corresponder ao campometadata.name
. - No secret do Kubernetes, especifique o conteúdo do script de inicialização adicionando uma chave
script
ao 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 EOF
kubectl --kubeconfig MANAGEMENT_API_SERVER create secret -n PROJECT generic SECRET_NAME --from-file=script=FILE_NAME
rm FILE_NAME
Consulte as etapas para criar uma VM, conforme descrito na página criar uma VM. Na etapa 1, adicione o script ou os scripts de inicialização ao campo
spec
antes 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_NAME
Essas variáveis são definidas da seguinte maneira:
Variável Definição MANAGEMENT_API_SERVER
O arquivo kubeconfig do servidor da API Management. PROJECT
O projeto do Distributed Cloud em que você quer criar a VM. VM_NAME
O nome da VM. FILE_NAME
O nome do arquivo para armazenar o script de inicialização. STARTUP_SCRIPT_CONTENT
Os comandos a serem executados como parte do script de inicialização CLEAR_TEXT_SCRIPT_NAME
O nome do script de inicialização de texto simples. CLEAR_TEXT_SCRIPT
O script de texto simples que você define. SECRET_NAME
O nome do secret do Kubernetes. SECRET_SCRIPT_NAME
O nome do script de inicialização como um secret do Kubernetes. Siga as etapas abaixo para criar uma VM.
Confira a seguir um exemplo de como criar uma VM com scripts de inicialização que adiciona um novo usuário usando um secret do Kubernetes e texto não criptografado.
kubectl --kubeconfig MANAGEMENT_API_SERVER \ apply -n PROJECT -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 EOF
No exemplo, as variáveis são definidas da seguinte maneira:
Variável Definição MANAGEMENT_API_SERVER
O arquivo kubeconfig do servidor da API Management. PROJECT
O projeto do Distributed Cloud em que você quer criar a VM. VM_NAME
O nome da nova VM. VM_BOOT_DISK_NAME
O nome do novo disco de inicialização da VM. BOOT_DISK_IMAGE_NAME
O nome da imagem a ser usada para o disco de inicialização da nova VM. BOOT_DISK_SIZE
O tamanho do disco de inicialização, como 20G
.
Esse valor precisa ser sempre maior ou igual aominimumDiskSize
da imagem do disco de inicialização.BOOT_DISK_AUTO_DELETE
true
oufalse
, indicando se o disco de inicialização é excluído automaticamente quando a instância de VM é excluída.MACHINE_TYPE
O 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 atual com um script de inicialização
Também é possível atualizar uma VM atual com um script de inicialização. A VM precisa ser desligada antes da 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.
Visualizar a saída de um script de inicialização
- Siga as etapas para se conectar a uma VM.
Execute o seguinte comando na VM convidada para receber os registros do script de inicialização que você executou:
sudo journalctl -u cloud-final
Os registros do script de inicialização começam com o seguinte:
Started to run the command: /var/lib/google/startup-scripts/<script-name> ...