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_SERVERnestas 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 pela ordem em que aparecem na matriz startupScripts.
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
scriptSecretRefna VMspectem de corresponder ao campometadata.name. - No secret do Kubernetes, especifique o conteúdo do guião de arranque adicionando uma chave
scriptao 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 EOFkubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT \ create secret generic SECRET_NAME \ --from-file=script=FILE_NAMErm FILE_NAMEConsulte 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
specantes 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_NAMEEstas variáveis são definidas da seguinte forma:
Variável Definição MANAGEMENT_API_SERVERO ficheiro kubeconfig do servidor da API Management. PROJECTO projeto do Distributed Cloud no qual quer criar a VM. VM_NAMEO nome da VM. FILE_NAMEO nome do ficheiro para armazenar o script de arranque. STARTUP_SCRIPT_CONTENTOs comandos a executar como parte do script de arranque CLEAR_TEXT_SCRIPT_NAMEO nome do script de arranque de texto não cifrado. CLEAR_TEXT_SCRIPTO script de texto simples que definir. SECRET_NAMEO nome do segredo do Kubernetes. SECRET_SCRIPT_NAMEO 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 \ -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 forma.
Variável Definição MANAGEMENT_API_SERVERO ficheiro kubeconfig do servidor da API Management. PROJECTO projeto do Distributed Cloud no qual quer criar a VM. VM_NAMEO nome da nova VM. VM_BOOT_DISK_NAMEO nome do disco de arranque da nova VM. BOOT_DISK_IMAGE_NAMEO nome da imagem a usar para o disco de arranque da nova VM. BOOT_DISK_SIZEO tamanho do disco de arranque, como 20G.
Este valor tem de ser sempre igual ou superior aominimumDiskSizeda imagem do disco de arranque.BOOT_DISK_AUTO_DELETEtrueoufalse, que indica se o disco de arranque é eliminado automaticamente quando a instância de VM é eliminada.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
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-finalOs registos do script de arranque começam com o seguinte:
Started to run the command: /var/lib/google/startup-scripts/<script-name> ...