Esta página aborda a resolução de problemas da máquina virtual (VM) para o Application Operator (AO) no dispositivo isolado do Google Distributed Cloud (GDC).
Recupere um disco de arranque de VM completo
Se uma VM ficar sem espaço no disco de arranque, por exemplo, quando uma aplicação preenche a partição do disco de arranque com registos, as capacidades críticas nas VMs não funcionam. Pode não conseguir adicionar uma nova chave SSH através do recurso VirtualMachineAccessRequest
ou estabelecer uma ligação SSH à VM através de chaves existentes.
Esta página descreve os passos para criar uma nova VM e anexar o disco para recuperar o conteúdo numa nova VM como um disco adicional. Estes passos demonstram o seguinte:
- Uma ligação SSH bem-sucedida à nova VM.
- Aumente a quantidade de espaço ao montar o disco para recuperar e eliminar dados desnecessários.
- Elimine a nova VM e substitua o disco original na VM original.
Antes de começar
Antes de continuar, certifique-se de que pede acesso à VM ao nível do projeto. Siga os
passos indicados
para atribuir a função de administrador da máquina virtual do projeto (project-vm-admin
).
Para operações de VMs com a CLI gdcloud,
peça ao administrador de IAM do projeto para lhe atribuir a função de administrador de máquinas virtuais do projeto e a função de leitor do projeto (project-viewer
).
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 o dispositivo isolado do GDC 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:
Localize o nome do servidor da API Management ou pergunte ao administrador da plataforma (PA) qual é o nome do servidor.
Inicie sessão e gere o ficheiro kubeconfig para o servidor da API Management, se não tiver um.
Use o caminho para substituir
MANAGEMENT_API_SERVER{"</var>"}}
nestas instruções.
Recupere um disco de VM sem espaço
Para recuperar um disco de arranque de uma VM sem espaço, conclua os seguintes passos:
Pare a VM existente seguindo as instruções em Parar uma VM.
Edite a VM existente:
kubectl --kubeconfig ADMIN_KUBECONFIG edit \ virtualmachine.virtualmachine.gdc.goog -n PROJECT VM_NAME
Substitua o nome do disco da VM existente no campo
spec
por um novo nome de marcador de posição:... spec: disks: - boot: true virtualMachineDiskRef: name: VM_DISK_PLACEHOLDER_NAME
Crie uma nova VM com um sistema operativo (SO) de imagem diferente da VM original. Por exemplo, se o disco original usar o SO
ubuntu-2004
, crie a nova VM comrocky-8
.Anexe o disco original como um disco adicional à nova VM:
... spec: disks: - boot: true autoDelete: true virtualMachineDiskRef: name: NEW_VM_DISK_NAME - virtualMachineDiskRef: name: ORIGINAL_VM_DISK_NAME
Substitua o seguinte:
- NEW_VM_DISK_NAME: o nome que atribui ao novo disco de VM.
- ORIGINAL_VM_DISK_NAME: o nome do disco da VM original.
Depois de criar a VM e esta estar em execução, estabeleça uma ligação SSH à VM seguindo as instruções em Ligar-se a uma VM.
Crie um diretório e monte o disco original num ponto de montagem. Por exemplo,
/mnt/disks/new-disk
.Verifique os ficheiros e os diretórios no diretório de montagem com um espaço adicional:
cd /mnt/disks/MOUNT_DIR du -hs -- * | sort -rh | head -10
Substitua MOUNT_DIR pelo nome do diretório onde montou o disco original.
O resultado é semelhante ao seguinte:
18G home 1.4G usr 331M var 56M boot 5.8M etc 36K snap 24K tmp 16K lost+found 16K dev 8.0K run
Verifique cada um dos ficheiros e diretórios para confirmar a quantidade de espaço que cada um está a usar. Este exemplo verifica o diretório
home
, uma vez que usa18G
de espaço.cd home du -hs -- * | sort -rh | head -10
O resultado é semelhante ao seguinte:
17G log_file ... 4.0K readme.md 4.0K main.go
O ficheiro de exemplo
log_file
é um ficheiro a limpar, uma vez que consome17G
de espaço e não é necessário.Elimine os ficheiros de que não precisa e que consomem espaço adicional ou faça uma cópia de segurança dos ficheiros para o disco de arranque da nova VM:
Mova os ficheiros que quer manter:
mv /mnt/disks/MOUNT_DIR/home/FILENAME/home/backup/
Elimine os ficheiros que consomem espaço adicional:
rm /mnt/disks/MOUNT_DIR/home/FILENAME
Substitua FILENAME pelo nome do ficheiro que quer mover ou eliminar.
Termine sessão na nova VM e pare a VM.
Edite a nova VM para remover o disco original do campo
spec
:kubectl --kubeconfig ADMIN_KUBECONFIG \ edit virtualmachine.virtualmachine.gdc.goog -n PROJECT NEW_VM_NAME
Remova a lista
virtualMachineDiskRef
que contém o nome do disco da VM original:spec: disks: - autoDelete: true boot: true virtualMachineDiskRef: name: NEW_VM_DISK_NAME - virtualMachineDiskRef: # Remove this list name: ORIGINAL_VM_DISK_NAME # Remove this disk name
Edite a VM original e substitua o valor VM_DISK_PLACEHOLDER_NAME que definiu no passo dois pelo nome anterior:
... spec: disks: - boot: true virtualMachineDiskRef: name: VM_DISK_PLACEHOLDER_NAME # Replace this name with the previous VM name
Inicie a VM original. Se tiver libertado espaço suficiente, a VM é iniciada com êxito.
Se não precisar da nova VM, elimine-a:
kubectl --kubeconfig ADMIN_KUBECONFIG \ delete virtualmachine.virtualmachine.gdc.goog -n PROJECT NEW_VM_NAME
Aprovisione uma máquina virtual
Esta secção descreve como resolver problemas que podem ocorrer durante o aprovisionamento de uma nova máquina virtual (MV) no dispositivo isolado do Google Distributed Cloud (GDC).
O operador da aplicação (AO) tem de executar todos os comandos no cluster de utilizadores predefinido.
Não é possível criar o disco
Se um PersistentVolumeClaim
(PVC) estiver no estado Pending
, reveja as seguintes
alternativas para resolver o estado:
A classe de armazenamento não suporta a criação de um PVC com o modo de acesso
ReadWriteMany
:Atualize o valor
spec.dataVolumeTemplate.spec.pvc.storageClassName
da máquina virtual com uma classe de armazenamento que suporte um modo de acessoReadWriteMany
e use um controlador da interface de armazenamento de contentores (CSI) como aprovisionador de armazenamento.Se nenhuma outra classe de armazenamento no cluster puder fornecer a capacidade, atualize o valor
spec.dataVolumeTemplate.spec.pvc.accessMode
para incluir o modo de acessoReadWriteOnce
.ReadWriteMany
O controlador CSI não consegue aprovisionar um
PersistentVolume
:Verifique se existe uma mensagem de erro:
kubectl describe pvc VM_NAME-boot-dv -n NAMESPACE_NAME
Substitua as seguintes variáveis:
VM_NAME
: o nome da máquina virtual.NAMESPACE_NAME
: o nome do espaço de nomes.
Configure o controlador para resolver o erro. Para garantir que o aprovisionamento
PersistentVolume
funciona, crie um PVC de teste num novospec
com um nome diferente do especificado nodataVolumeTemplate.spec.pvc
:cat <<EOF | kubectl apply - apiVersion: v1 kind: PersistentVolumeClaim metadata: name: test-pvc namespace: NAMESPACE_NAME spec: storageClassName: standard-rwx accessModes: - ReadWriteMany resources: requests: storage: 10Gi EOF
Depois de o aprovisionamento do objeto
PersistentVolume
ser bem-sucedido, elimine o PVC de teste após a validação:kubectl delete pvc test-pvc -n NAMESPACE_NAME
Não é possível criar uma máquina virtual
Se o recurso de máquina virtual for aplicado, mas não atingir o estado Running
, siga estes passos:
Reveja os registos da máquina virtual:
kubectl get vm VM_NAME -n NAMESPACE_NAME
Verifique o estado do pod correspondente da máquina virtual:
kubectl get pod -l kubevirt.io/vm=VM_NAME
O resultado mostra o estado de um agrupamento. As opções possíveis são as seguintes:
O estado ContainerCreating
Se o Pod estiver no estado ContainerCreating
, siga estes passos:
Obtenha detalhes adicionais sobre o estado do Pod:
kubectl get pod -l kubevirt.io/vm=VM_NAME
Se os volumes estiverem desmontados, certifique-se de que todos os volumes especificados no campo
spec.volumes
são montados com êxito. Se o volume for um disco, verifique o estado do disco.O campo
spec.accessCredentials
especifica um valor para montar uma chave pública de SSH. Certifique-se de que o segredo é criado no mesmo espaço de nomes que a máquina virtual.
Se não existirem recursos suficientes no cluster para criar o pod, siga estes passos:
Se o cluster não tiver recursos de computação suficientes para agendar o pod da máquina virtual, remova outros pods indesejados para ajudar a libertar recursos.
Reduza os valores
spec.domain.resources.requests.cpu
espec.domain.resources.requests.memory
da máquina virtual.
O estado Error
ou CrashLoopBackoff
Para resolver Pods nos estados Error
ou CrashLoopBackoff
, obtenha registos do Pod de computação da máquina virtual:
kubectl logs -l kubevirt.io/vm=VM_NAME -c compute
O estado Running
e a falha da máquina virtual
Se o pod estiver no estado Running
, mas a própria máquina virtual falhar,
siga estes passos:
Veja os registos do pod de registo da máquina virtual:
kubectl logs -l kubevirt.io/vm=VM_NAME -c log
Se o registo mostrar erros no arranque da máquina virtual, verifique o dispositivo de arranque correto da máquina virtual. Defina o valor
spec.domain.devices.disks.bootOrder
do disco de arranque principal com o valor1
. Use o exemplo seguinte como referência:… spec: domain: devices: disks: - bootOrder: 1 disk: bus: virtio name: VM_NAME-boot-dv …
Para resolver problemas de configuração com a imagem da máquina virtual, crie outra máquina virtual com uma imagem diferente.
Aceda à consola de série
Esta secção descreve como usar a consola série da instância de VM para depurar problemas de arranque e de rede, resolver problemas de instâncias com mau funcionamento, interagir com o Grand Unified Bootloader (GRUB) e realizar outras tarefas de resolução de problemas.
A interação com uma porta série é comparável à utilização de uma janela de terminal: a entrada e a saída estão no modo de texto, sem suporte de interface gráfica. O sistema operativo (SO) da instância, a entrada e a saída básicas (BIOS), escreve frequentemente a saída nas portas série e aceita entradas, como comandos.
Para aceder à consola série, siga as instruções nas secções seguintes:
Configure o nome de utilizador e a palavra-passe
Por predefinição, as imagens do sistema Linux do GDC não estão configuradas para permitir inícios de sessão baseados em palavras-passe para utilizadores locais.
Se a sua VM estiver a executar uma imagem pré-configurada com o início de sessão na consola série, pode configurar uma palavra-passe local na VM e iniciar sessão através da consola série. Nas VMs do Linux do GDC, configura o nome de utilizador e a palavra-passe através de um script de arranque guardado como um segredo do Kubernetes durante ou após a criação da VM.
As instruções seguintes descrevem como configurar uma palavra-passe local após a criação da VM. Para configurar o nome de utilizador e a palavra-passe, conclua os seguintes passos:
- Crie um ficheiro de texto.
No ficheiro de texto, configure o nome de utilizador e a palavra-passe:
#!/bin/bash username="USERNAME" password="PASSWORD" sudo useradd -m -s /bin/bash "$username" echo "$username:$password" | sudo chpasswd sudo usermod -aG sudo "$username"
Substitua o seguinte:
USERNAME
: o nome de utilizador que quer adicionar.PASSWORD
: a palavra-passe do nome de utilizador. Evite palavras-passe básicas, uma vez que alguns SOs podem exigir um comprimento mínimo da palavra-passe e complexidade.
Crie o script de arranque como um secret do Kubernetes:
kubectl --kubeconfig=ADMIN_KUBECONFIG create secret \ generic STARTUP_SCRIPT_NAME -n PROJECT_NAMESPACE \ --from-file=STARTUP_SCRIPT_PATH
Substitua o seguinte:
PROJECT_NAMESPACE
: o espaço de nomes do projeto onde reside a VM.- STARTUP_SCRIPT_NAME
: the name you give to the startup script. For example,
configure-credentials`. STARTUP_SCRIPT_PATH
: o caminho para o script de arranque que contém o nome de utilizador e a palavra-passe que configurou.
Edite a especificação da VM:
kubectl --kubeconfig=ADMIN_KUBECONFIG edit gvm \ -n PROJECT_NAMESPACE VM_NAME
Substitua
VM_NAME
pelo nome da VM a adicionar no script de arranque.No campo
startupScripts
, adicione a referência do segredo do Kubernetes que criou no passo três:spec: compute: memory: 8Gi vcpus: 8 disks: - boot: true virtualMachineDiskRef: name: disk-name startupScripts: - name: STARTUP_SCRIPT_NAME scriptSecretRef: name: STARTUP_SCRIPT_NAME
-
- Se estiver a trabalhar numa nova VM, ignore este passo.
Aceda à consola de série da VM
Para começar a aceder à consola série da VM, faça o seguinte:
Ligue-se à consola de série:
gdcloud compute connect-to-serial-port VM_NAME \ --project PROJECT_NAMESPACE
Quando lhe for pedido, introduza o nome de utilizador e a palavra-passe que definiu em Configurar nome de utilizador e palavra-passe.