Resolver problemas do Distributed Cloud conectado

O Google monitora e faz a manutenção remota do hardware conectado do Google Distributed Cloud. Para isso, os engenheiros do Google têm acesso Secure Shell (SSH) ao hardware conectado do Distributed Cloud. Se o Google detectar um problema, um engenheiro vai entrar em contato com você para resolver a questão. Se você tiver identificado um problema, entre em contato com o Suporte do Google imediatamente para diagnosticar e resolver a questão.

Conectividade de máquinas do Distributed Cloud conectado

Nesta seção, descrevemos como verificar a conectividade da Internet e do Google Cloud para suas máquinas conectadas do Distributed Cloud usando o recurso do Metrics Explorer do Cloud Monitoring.

Este procedimento usa as seguintes métricas do Monitoring:

  • Máquina conectada (/machine/connected): indica se a máquina está conectada a Google Cloud.

  • Conectividade de rede (/machine/network/connectivity): indica se a interface de rede principal da máquina tem conectividade com a Internet.

Para concluir as etapas desta seção, você precisa atender aos seguintes pré-requisitos:

  1. Acesso ao console Google Cloud e ao projeto conectado do Distributed Cloud Google Cloud .
  2. O papel do IAM Leitor do Monitoring, que permite visualizar as métricas do Monitoring.
  3. (Opcional) o valor machine_id da máquina conectada do Distributed Cloud de destino para filtrar os resultados retornados.

Usar o Metrics Explorer para validar a conectividade da máquina

  1. Acesse o Metrics Explorer:

    1. No console do Google Cloud , acesse a seção Monitoring.

    2. Na árvore de navegação à esquerda, clique em Metrics Explorer.

  2. Selecione o tipo de recurso de destino:

    1. Na página do Metrics Explorer, navegue até a página Consultas.

    2. Use a barra de pesquisa para procurar o tipo de recurso Máquina. Você também pode usar o identificador completo do recurso edgecontainer.googleapis.com/Machine.

    3. Nos resultados retornados, clique no tipo de recurso Máquina.

  3. Valide a conexão da máquina com Google Cloud:

    1. Na seção Métrica, procure o valor connected.

    2. Selecione a métrica Máquina conectada. O caminho completo é edgecontainer.googleapis.com/machine/connected.

    3. (Opcional) Filtre pelo valor de destino machine_id usando a seção Filtro.

    4. No gráfico de tempo que aparece, verifique se a linha Íntegra permanece em 100% de forma contínua. Se, em algum momento, esse valor for 0% ou Não íntegro, a máquina terá perdido a conectividade com Google Cloud no horário indicado.

  4. Valide a conectividade de Internet da máquina:

    1. Na seção Métrica, procure o valor connectivity.

    2. Selecione a métrica Conectividade de rede. O caminho completo é edgecontainer.googleapis.com/machine/network/connectivity.

    3. (Opcional) Filtre pelo valor de destino machine_id usando a seção Filtro.

    4. No gráfico de tempo que aparece, verifique se a linha Íntegra permanece em 100% de forma contínua. Se em algum momento esse valor for 0% Não íntegro, a máquina perdeu a conectividade com a Internet no horário indicado.

Entender os resultados da validação

A tabela a seguir explica os resultados retornados pelo Metrics Explorer.

Estado da máquina Diagnóstico Resolução
Em bom estado
O valor da métrica "Máquina conectada" é 1
O valor da métrica "Conectividade de rede" é 1
Operação normal. Nenhuma.
Desconectado
O valor da métrica "Máquina conectada" é 0
O valor da métrica "Conectividade de rede" é 1
A máquina tem conectividade com a Internet, mas não consegue se conectar a Google Cloud. Verifique suas [regras de firewall](distributed-cloud/connected/1.11.0/docs/requirements#connected_management_and_monitoring_traffic) para serviços do Google e endpoints de API. Verifique se os agentes conectados do Distributed Cloud estão em execução na máquina.
Isolado
O valor da métrica "Máquina conectada" é 0
O valor da métrica "Conectividade de rede" é 0
A máquina não tem conectividade com a Internet. Verifique o cabeamento de energia e rede, a configuração da rede local e o status do LED da máquina. Verifique a configuração de VLAN e roteamento.
Intermitente
O valor da métrica "Máquina conectada" alterna entre 0 e 1
O valor da métrica "Conectividade de rede" alterna entre 0 e 1
Conexão de rede instável, perda de pacotes ou latência excessiva. Verifique se há congestionamento e hardware com falha na sua rede local.

Se você notar valores sustentados de 0 para qualquer uma das métricas, siga as etapas de solução de problemas descritas na tabela para resolver. Se o problema persistir, entre em contato com o Suporte do Google com o valor machine_id da máquina afetada e o carimbo de data/hora da interrupção.

Corromper sessões do BGP em recursos do Cloud Router usados por conexões VPN

As conexões da Distributed Cloud VPN dependem de sessões do BGP estabelecidas e gerenciadas pelos recursos correspondentes do Cloud Router para anunciar rotas entre o cluster conectado da Distributed Cloud e Google Cloud. Se você modificar a configuração de um recurso do Cloud Router associado a uma conexão de VPN do Distributed Cloud, essa conexão poderá parar de funcionar.

Para recuperar a configuração corrompida da sessão do BGP no Cloud Router afetado, conclua as seguintes etapas:

  1. No console do Google Cloud , receba o nome da sessão do BGP corrompida. Exemplo:

    INTERFACE=anthos-mcc-34987234
    
  2. Receba os endereços IP do BGP de peering e do BGP do Cloud Router para a sessão do BGP corrompida, bem como o ASN de peering usado pela conexão afetada do Distributed Cloud VPN. Exemplo:

    GDCE_BGP_IP=168.254.208.74
    CLOUD_ROUTER_BGP_IP=168.254.208.73
    PEER_ASN=65506
    

    Se você excluiu a sessão do BGP, extraia essas informações do cluster conectado do Distributed Cloud:

    1. Consiga as credenciais do cluster:

      gcloud edge-cloud container clusters get-credentials CLUSTER_ID \
        --location REGION \
        --project PROJECT_ID
      

      Substitua:

      • CLUSTER_ID: o nome do cluster de destino.
      • REGION: a região do Google Cloud em que o cluster de destino é criado.
      • PROJECT_ID: o ID do projeto Google Cloud de destino.
    2. Receba a configuração do recurso MultiClusterConnectivityConfig:

      kubectl get multiclusterconnectivityconfig -A
      

      O comando retorna uma saída semelhante a esta:

       NAMESPACE     NAME                   LOCAL ASN              PEER ASN
       kube-system   MultiClusterConfig1    65505                   65506
       ```
      
    3. Receba o endereço IP do BGP do par, o endereço IP do Cloud Router e o ASN da sessão do BGP:

      kubectl describe multiclusterconnectivityconfig -n kube-system MCC_CONFIG_NAME   
      

      Substitua MCC_CONFIG_NAME pelo nome do MultiClusterConfigResource que você recebeu na etapa anterior.

      O comando retorna uma saída semelhante a esta:

       ​​Spec:
       Asns:
         Peer:  65505
         Self:  65506 # GDCE ASN
       Tunnels:
         Ike Key:
           Name:       MCC_CONFIG_NAME-0
           Namespace:  kube-system
         Peer:
           Bgp IP:      169.254.208.73 # Cloud Router BGP IP
           Private IP:  34.157.98.148
           Public IP:   34.157.98.148
         Self:
           Bgp IP:      169.254.208.74 # GDCE BGP IP
           Private IP:  10.100.29.49
           Public IP:   208.117.254.68
       ```
      
  3. No console Google Cloud , receba o nome, a região e o nome do projetoGoogle Cloud do túnel da VPN corrompido. Exemplo:

    VPN_TUNNEL=VPNTunnel1
    REGION=US-East1
    VPC_PROJECT_ID=VPC-Project-1
    
  4. Exclua a sessão do BGP corrompida da configuração do Cloud Router.

  5. Crie uma interface do Cloud Router:

    gcloud compute routers add-interface --interface-name=INTERFACE_NAME \
       --vpn-tunnel=TUNNEL_NAME \ 
       --ip-address=ROUTER_BGP_IP \
       --project=VPC_PROJECT_ID \
       --region=REGION \
       --mask-length=30
    

    Substitua:

    • INTERFACE_NAME: um nome descritivo que identifica exclusivamente essa interface.
    • TUNNEL_NAME: o nome do túnel da VPN que você obteve na etapa anterior.
    • ROUTER_BGP_IP: o endereço IP do BGP do Cloud Router que você obteve anteriormente neste procedimento.
    • VPC_PROJECT_ID: o ID do projeto da VPC de destinoGoogle Cloud .
    • REGION: a Google Cloud região em que o projeto da VPC de destino Google Cloud foi criado.
  6. Crie o peering do BGP:

    gcloud compute routers add-bgp-peer --interface=INTERFACE_NAME \
       --peer-name=TUNNEL_NAME \
       --region REGION \
       --project=VPC_PROJECT_ID \
       --peer-ip-address=GDCE_BGP_IP \
       --peer-asn=GDCE_BGP_ASN \
       --advertised-route-priority=100 \
       --advertisement-mode=DEFAULT
    

    Substitua:

    • INTERFACE_NAME: o nome da interface que você criou na etapa anterior.
    • TUNNEL_NAME: o nome do túnel VPN que você usou para criar a interface na etapa anterior.
    • REGION: a Google Cloud região em que o projeto da VPC de destino Google Cloud é criado.
    • VPC_PROJECT_ID: o ID do projeto da VPC de destinoGoogle Cloud .
    • GDCE_BGP_IP: o endereço IP do BGP do par do Distributed Cloud que você recebeu anteriormente neste procedimento.
    • GDCE_BGP_ASN: o ASN do BGP do peering do Distributed Cloud que você obteve anteriormente neste procedimento.

Nesse ponto, a sessão do BGP está de volta e operacional.

Máquinas virtuais travadas no estado Pending

Uma carga de trabalho de máquina virtual pode ficar presa no estado Pending e não ser programada em um nó se uma das seguintes situações ocorrer:

  • O Distributed Cloud Connected não pode alocar os recursos solicitados, como tempo de CPU, memória ou espaço em disco, para a máquina virtual.
  • Há uma falha na configuração da máquina virtual.
  • Há uma falha no armazenamento da máquina virtual.
  • O nó de destino está corrompido.

Para resolver esse problema, faça o seguinte:

  1. Consiga as credenciais do cluster conforme descrito em Receber credenciais de um cluster.

  2. Receba informações sobre a máquina virtual afetada:

    kubectl describe virtualmachine VM_NAME -n NAMESPACE
    

    Substitua:

    • VM_NAME: o nome da máquina virtual de destino.
    • NAMESPACE: o namespace da máquina virtual de destino.

    O comando retorna uma saída semelhante a esta:

    Status:
    ...
    State:                    Pending
    ...
    Events:
    Type     Reason                  Age   From                       Message
    ----     ------                  ----  ----                       -------
    Normal   SuccessfulCreate        15m   virtualmachine-controller  Created virtual machine my-stuck-vm
    Warning  DiskProvisioningFailed  14m   virtualmachine-controller  Failed to provision disk: DataVolume my-stuck-vm-data-disk not ready
    Warning  PVCNotBound             14m   virtualmachine-controller  PersistentVolumeClaim my-stuck-vm-data-disk is in phase Pending
    Warning  VMINotCreated           10m   virtualmachine-controller  VirtualMachineInstance cannot be created: dependencies not ready
    

    A saída do comando contém mensagens que podem indicar restrições de recursos, falhas de programação, falhas de armazenamento e outros problemas.

  3. Examine a saída para determinar as causas da falha de programação, conforme explicado nas próximas seções.

Recursos insuficientes

Talvez você veja uma mensagem indicando recursos insuficientes, como CPU, memória ou espaço em disco. Exemplo:

5/8 nodes are available: 3 Insufficient memory, 3 Insufficient CPU.

Para resolver esse problema, verifique os recursos alocados às máquinas virtuais afetadas e outras cargas de trabalho programadas no nó. Em seguida, faça o seguinte, dependendo das suas necessidades comerciais:

  • Reduza o escalonamento de outras cargas de trabalho programadas no nó.
  • Reduza a quantidade de recursos alocados para a máquina virtual afetada.
  • Adicione mais máquinas ao cluster afetado.

Nós com taint

Talvez apareça uma mensagem indicando que o nó de destino está corrompido. Exemplo:

5/8 nodes are available: 3 node(s) had taint {<taint-key>:<taint-value>}, that the pod didn't tolerate.

Para corrigir esse problema, faça o seguinte:

  1. Use o comando a seguir para verificar se há taints no nó:

    kubectl get nodes -o custom-columns=NAME:.metadata.name,TAINTS:.spec.taints
    

    O comando retorna uma saída semelhante a esta:

    NAME                           TAINTS
    node-name-1   [map[effect:PreferNoSchedule key:node-role.kubernetes.io/master] map[effect:PreferNoSchedule key:node-role.kubernetes.io/control-plane]]
    node-name-2   <none>
    
  2. Escolha uma destas opções:

Falhas de armazenamento

Talvez apareça uma mensagem indicando uma falha no armazenamento da máquina virtual. Exemplo:

5/8 nodes are available: 3 node(s) had volume node affinity conflict, 3 node(s) had unbound immediate PersistentVolumeClaims.

Essa mensagem pode indicar que o volume permanente correspondente não foi montado no nó de destino.

Para corrigir esse problema, faça o seguinte:

  1. Use o comando a seguir para conferir o status das solicitações de volume permanente (PVCs, na sigla em inglês) no namespace da máquina virtual afetada:

    kubectl get pvc -n NAMESPACE
    

    Substitua NAMESPACE pelo nome do namespace de destino.

    O comando retorna uma saída semelhante a esta:

    NAME                                               STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS            AGE
    windows-robin-disk-0                               Bound     pvc-b1a1d264-84bf-4e58-857d-f37f629d5082   25Gi       RWX            robin-block-immediate   30h
    windows-robin-disk-1                               Bound     pvc-0130b9a8-7fed-4df0-8226-d79273792a16   25Gi       RWX            robin-block-immediate   30h
    windows-robin-vm-0-restored-windows-robin-disk-0   Pending                                                                        gce-pd-gkebackup-in     26m
    
  2. Verifique se o PVC correspondente tem o status Bound. Se o status for Pending, o subsistema de armazenamento não provisionou o volume. Nesses casos, é preciso resolver problemas na configuração do subsistema de armazenamento e garantir que o StorageClass adequado esteja disponível.