Um script de arranque executa tarefas durante o processo de arranque de uma máquina virtual (VM). Esta página fornece os passos a seguir para usar scripts de arranque em instâncias de VM.
Antes de começar
Para usar os comandos da gdcloud
interface de linhas de comando (CLI), certifique-se de que transferiu, instalou e configurou a CLI gdcloud
.
Todos os comandos para a nuvem distribuída usam a CLI gdcloud
ou kubectl
e requerem um ambiente de sistema operativo (SO).
Obtenha o caminho do ficheiro kubeconfig
Para executar comandos no servidor da API Management, certifique-se de que tem os seguintes recursos:
Inicie sessão e gere o ficheiro kubeconfig para o servidor da API Management, se não tiver um.
Use o caminho para o ficheiro kubeconfig do servidor da API de gestão para substituir
MANAGEMENT_API_SERVER
nestas instruções.
Peça autorizações e acesso
Para realizar as tarefas indicadas nesta página, tem de ter a função de administrador da máquina virtual do projeto. Siga os passos para validar o seu acesso ou peça ao administrador de IAM do projeto que lhe atribua a função de administrador de máquinas virtuais do projeto (project-vm-admin
) no espaço de nomes do projeto onde a VM reside.
Transmita um script de arranque
Pode usar scripts bash ou não bash como scripts de arranque. Para tal, inclua #!/bin/…
no início do script para indicar o intérprete de scripts.
Por exemplo, para usar um script de arranque do Python 3, adicione #! /usr/bin/python3
ao início do script.
O Google Distributed Cloud (GDC) air-gapped executa scripts de arranque por ordem alfabética, com base no nome de cada script de arranque.
A tabela seguinte mostra o formato do guião a usar com base no tamanho do guião:
Tamanho do script | Formato de script |
---|---|
Scripts até 2048 bytes | Limpar texto |
Scripts com mais de 2048 bytes | Segredo do Kubernetes |
Defina um script de arranque
Para usar um script de arranque, tem de adicionar o campo startupScripts
ao campo spec
da VM. Neste campo, pode especificar vários scripts de arranque como texto simples ou como um segredo do Kubernetes.
O exemplo seguinte especifica os scripts de arranque como texto não cifrado e um segredo 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==
Reveja as seguintes considerações:
- O script de arranque é executado sempre que o sistema é iniciado.
- O script de arranque tem privilégios de raiz predefinidos.
- No segredo do Kubernetes, o nome do
scriptSecretRef
na VMspec
tem de corresponder ao campometadata.name
. - No secret do Kubernetes, especifique o conteúdo do guião de arranque adicionando uma chave
script
ao campodata
.
Crie uma nova VM com um script de arranque
Estas instruções aplicam-se independentemente do que usar como imagem para criar a sua MV. Faça o seguinte:
Para criar um script de arranque como um secret do Kubernetes, execute o seguinte comando:
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 os passos para criar uma VM, conforme descrito na página criar uma VM. No passo um, adicione o script ou os scripts de arranque ao campo
spec
antes de executar o comando para criar uma VM.Este exemplo define um script de arranque com texto simples e um segredo 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
Estas variáveis são definidas da seguinte forma:
Variável Definição MANAGEMENT_API_SERVER
O ficheiro kubeconfig do servidor da API Management. PROJECT
O projeto do Distributed Cloud no qual quer criar a VM. VM_NAME
O nome da VM. FILE_NAME
O nome do ficheiro para armazenar o script de arranque. STARTUP_SCRIPT_CONTENT
Os comandos a executar como parte do script de arranque CLEAR_TEXT_SCRIPT_NAME
O nome do script de arranque de texto não cifrado. CLEAR_TEXT_SCRIPT
O script de texto simples que definir. SECRET_NAME
O nome do segredo do Kubernetes. SECRET_SCRIPT_NAME
O nome do script de arranque como um segredo do Kubernetes. Siga os passos seguintes para criar uma VM.
Segue-se um exemplo de como criar uma VM com scripts de arranque que adiciona um novo utilizador através de um segredo do Kubernetes e texto não cifrado.
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 forma.
Variável Definição MANAGEMENT_API_SERVER
O ficheiro kubeconfig do servidor da API Management. PROJECT
O projeto do Distributed Cloud no qual quer criar a VM. VM_NAME
O nome da nova VM. VM_BOOT_DISK_NAME
O nome do disco de arranque da nova VM. BOOT_DISK_IMAGE_NAME
O nome da imagem a usar para o disco de arranque da nova VM. BOOT_DISK_SIZE
O tamanho do disco de arranque, como 20G
.
Este valor tem de ser sempre igual ou superior aominimumDiskSize
da imagem do disco de arranque.BOOT_DISK_AUTO_DELETE
true
oufalse
, que indica se o disco de arranque é eliminado automaticamente quando a instância de VM é eliminada.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
Atualize uma VM existente com um script de arranque
Também pode atualizar uma VM existente com um script de arranque. Tem de desligar a VM antes de fazer a atualização.
Siga os passos para atualizar as propriedades da VM
e atualize o campo spec
com o script de arranque que quer executar.
Veja a saída de um script de arranque
- Siga os passos para ligar a uma VM.
Execute o seguinte comando na VM convidada para obter os registos do script de arranque que executou:
sudo journalctl -u cloud-final
Os registos do script de arranque começam com o seguinte:
Started to run the command: /var/lib/google/startup-scripts/<script-name> ...