Problemas conhecidos do Google Distributed Cloud com isolamento físico 1.9.x

Categoria Versões identificadas Problema e solução alternativa
Instalação 1.9.0
1.9.1
1.9.2

Às vezes, o iLO não consegue recuperar a chave do HSM.

Sintomas:

  • `server.status.conditions` tem uma entrada com o tipo `KeyManagerConfigured` e o status `True`, mas nenhuma com o tipo `DiskEncryptionEnabled`.

  • Há pods com falha chamados `server-encrypt-and-create-logical-drive-$SERVER-xxxxx` com o erro `"ERROR: (3065) Error changing the Controller Encryption Mode UNABLE TO RETRIEVE KEY\tController: HPE Smart Array P408i-a SR Gen10, SLOT 0`.

  • Falha ao fazer ssh no pod devido a uma chave inválida.

Alternativa:

Para resolver o problema, siga estas etapas:

  1. Acesse a UI do iLO > Informações > Diagnóstico > Redefinir para redefinir o iLO.

  2. Se, durante a redefinição, o iLO mostrar que o servidor está no teste automático de inicialização (POST), reinicie o fluxo de provisionamento:

    1. Se a instalação do admin-cluster foi concluída:

      export KUBECONFIG=<root-admin-kubeconfig path>
             
    2. Atualize a chave SSH:

      1. Pegue a chave SSH pública atual. Ela pode ter sido alterada e, portanto, ser diferente de /root/.ssh/id_rsa.pub.

        kubectl -n gpc-system get secret/ssh-key -ojsonpath={.data.'id_rsa\.pub'} | base64 -d
               
      2. Coloque a chave pública no configmap ironic-vars:

        kubectl -n gpc-system edit cm/ironic-vars
               

        Adicione IRONIC_RAMDISK_SSH_KEY: \

      3. Reinicie o ironic:

        kubectl -n gpc-system rollout restart deployment/root-admin-metal3-ironic
    3. Faça o reprovisionamento da máquina para reinstalar o IPA:

      1. Faça backup de bmc-credential-$SERVER, porque a exclusão de bmh também exclui o secret.

        kubectl -n gpc-system get secret bmc-credentials-$SERVER -oyaml > $SERVER
               
      2. Remova do arquivo atributos não aplicáveis, como: last-applied, creationtimestamp, finalizer, ownerreference, resourceversion, uid.

      3. Exclua o BareMetalHost:

        kubectl -n gpc-system delete bmh/$SERVER
               
      4. Pegue o Secret bmc-credentials-$SERVER ou o backup anterior de cellcfg e aplique-o.

    4. Diga ao servidor para fazer algo diferente.

      1. Para remover o status em cache do BMH:

        kubectl -n gpc-system annotate server/$SERVER baremetalhost.metal3.io/status-
  3. Aguarde o provisionamento do servidor.

  4. Assista como os objetos BMH são criados.

  5. Talvez seja necessário excluir os jobs de criptografia para acionar novamente.

Operações 1.9.0
1.9.1
1.9.2

O uso da classe de armazenamento de blocos padrão pode impedir que as máquinas virtuais (VMs) sejam iniciadas ou reiniciadas

Sintomas:

O estado da VM persiste com STATUS de Provisioning ou Starting quando storageClassName é standard-block.

Alternativa:

Para resolver o problema, siga estas etapas:

  1. Verifique se a VM STATUS mostra Provisioning ou Starting:

    kubectl --kubeconfig SYSTEM_KUBECONFIG get gvm -n PROJECT

    SYSTEM_KUBECONFIG é o caminho do arquivo kubeconfig do cluster do sistema.

    PROJECT é o projeto do GDC em que a VM reside.

    Opcional: confira mais detalhes do status:

    kubectl get gvm VM_NAME -n PROJECT -o \
               jsonpath='{"State:"}{.status.state}{"\n"}{"Reason:"}{.status.reason}{"\n"}{"Message:"}{.status.message}{"\n"}'

    VM_NAME é o nome da VM que não responde.

  2. Exclua a VM:

    kubectl --kubeconfig SYSTEM_KUBECONFIG delete gvm VM_NAME -n NAMESPACE_NAME

    NAMESPACE_NAME é o nome do namespace.

  3. Verifique se a exclusão foi bem-sucedida:

    kubectl --kubeconfig SYSTEM_KUBECONFIG get gvm VM_NAME -n PROJECT

    Um resultado semelhante ao seguinte confirma o sucesso:

    Error from server (NotFound): virtualmachines.vm.cluster.gke.io "VM_NAME" not found
  4. Exclua todos os discos dessa VM:

    kubectl --kubeconfig SYSTEM_KUBECONFIG delete gdisk DISK_NAME_1 DISK_NAME_2 DISK_NAME_N -n NAMESPACE_NAME
  5. Substitua o nome de cada um dos seus discos por DISK_NAME_1 e DISK_NAME_2 até DISK_NAME_N e verifique se todos os discos estão listados.

  6. Verifique se a exclusão foi bem-sucedida:

    kubectl --kubeconfig SYSTEM_KUBECONFIG get gdisk DISK_NAME_1 DISK_NAME_2 DISK_NAME_N -n $PROJECT
  7. Um resultado semelhante ao seguinte confirma o sucesso:

          Error from server (NotFound): virtualmachinedisks.vm.cluster.gke.io "DISK_NAME_1" not found
          Error from server (NotFound): virtualmachinedisks.vm.cluster.gke.io "DISK_NAME_2" not found
          Error from server (NotFound): virtualmachinedisks.vm.cluster.gke.io "DISK_NAME_N" not found
          
  8. Recrie a VM e os discos.

  9. Reinicie a VM.

Operações 1.9.2

Durante um upgrade da versão 1.9.1 para a 1.9.2, as operações no Artifact Registry podem falhar com erros de autorização

Sintomas:

gdcloud system container-registry load-oci falha com erros. Se você executar o comando novamente, ele será executado por períodos diferentes e falhará em pontos diferentes do processo, como push ou retag, mas com erros semelhantes.

Alternativa:

Para resolver o problema, siga estas etapas:

  1. Exporte KUBECONFIG para o kubeconfig do administrador raiz:

    export KUBECONFIG=~/release/root-admin/root-admin-kubeconfig
  2. Execute este comando para reduzir o escalonamento de deployment/root-admin-tftp-manager-controller para zero réplicas:

    kubectl scale --replicas=0 deployment/root-admin-tftp-manager-controller -n gpc-system
  3. Execute as operações que estavam falhando.
  4. Aumente os recursos do deployment/root-admin-tftp-manager-controller para uma réplica:

    kubectl scale --replicas=0 deployment/root-admin-tftp-manager-controller -n gpc-system
Operações 1.9.1
1.9.2
1.9.3

Não é possível definir rótulos de seletor de complemento para o cluster de administrador raiz

Sintomas:

gdcloud system container-registry load-oci falha com erros. Se você executar o comando novamente, ele será executado por períodos diferentes e falhará em pontos diferentes do processo, como push ou retag, mas com erros semelhantes.

Alternativa:

Ignore a mensagem com segurança. Ele desaparece depois de um tempo.

Operações 1.9.2

Não é possível recuperar os registros de um pod devido a uma imagem ausente

Alternativa:

Para resolver o problema, reinicie o pod afetado.

Operações 1.9.0
1.9.1
1.9.2

Um servidor está preso no estado available, e o trabalho de configuração de criptografia dele continua falhando devido a um erro de chave SSH

Sintomas:

O status da condição "Servidor pronto" é "False", e a mensagem contém "job server-encrypt-and-create-logical-drive-... failed with reason ... and message ...". Os registros do job com falha contêm "Failed to connect to the host via ssh ... Permission denied (publickey)."

Alternativa:

Para resolver o problema, siga estas etapas:

  1. Extraia a chave pública SSH atual do cluster de administrador raiz:

    kubectl -n gpc-system get secret/ssh-key -ojsonpath={.data.'id_rsa\.pub'} | base64 -d
  2. Coloque a chave no configmap ironic-vars:

    kubectl -n gpc-system edit cm/ironic-vars
  3. Adicione ou substitua a IRONIC_RAMDISK_SSH_KEY:

    <SSH public key>
  4. Reinicie a implantação do ironic:

    kubectl -n gpc-system rollout restart deployment/root-admin-metal3-ironic
  5. Para cada servidor afetado:

    kubectl -n gpc-system annotate bmh/$SERVER inspect.metal3.io=""
Operações 1.9.2

O provisionamento de um cluster de usuário pela GUI fica travado

Alternativa:

Para evitar o problema de falta de endereços IP, defina o tamanho do CIDR do pod como /21 ou maior ao criar um cluster de usuários de alta disponibilidade.

Instalação 1.9.2

Na inicialização, o Google Distributed Cloud isolado por ar 1.14.2 não retorna métricas do Cortex

Alternativa:

Para resolver o problema, reinicie os pods.

Consulte o runbook MON-R0001 para mais detalhes.

Autenticação da plataforma 1.9.13

As organizações recém-criadas não podem acessar os IPs de dados do servidor

Sintomas:

Todos os jobs cplb-init e storage-ipsec-config-bm-XXXXX mostram a seguinte mensagem: Failed to connect to the host via ssh: ssh: connect to host 10.1.18.X port 22: Connection timed out.

Alternativa:

1. Verifique se a VRF do BGP está inativa em aggswitch.

2. Verifique se há mudanças não confirmadas na nova configuração de preparação no firewall.

3. Limpe todos os securitypolicyrules que tinham a organização excluída no nome e reinicie o root-admin-controller.

Fazer upgrade 1.9.1
1.9.2
1.9.11

Durante o upgrade do SO do nó, o servidor fica preso no desprovisionamento porque o URL boot.ipxe é inválido

Sintomas:

Server está com .status.bareMetalHostStatus.provisionState preso em deprovisioning há mais de 20 minutos.

O endereço IP de gerenciamento do servidor que está sendo atualizado está incluído na saída de qualquer um destes comandos:

kubectl -n gpc-system get cm/gpc-dhcp-conf -oyaml | grep dhcp-option=tag:mgmt,option:tftp-server
kubectl -n gpc-system get cm/gpc-dhcp-conf -oyaml | grep dhcp-option=tag:mgmt,tag:ipxe,option:bootfile-name

Alternativa:

Para resolver o problema, execute:

kubectl -n gpc-system rollout restart deploy/root-admin-controller
Fazer upgrade 1.9.1
1.9.2
1.9.10
1.9.11
1.9.12
1.9.13
1.9.14
1.9.15
1.9.16
1.9.17
1.9.18

Durante o upgrade do SO do nó, um nó falha no job machine-init

Sintomas:

Uma tarefa de upgrade em NodeUpgrade permanece inacabada por mais de duas horas.

Um NodeUpgradeTask correspondente fica na condição NodeResumeCompleted por mais de uma hora.

bm-system-x.x.x.x-machine-init jobs permanecem inacabados por muito tempo. x.x.x.x é o endereço do nó.

Alternativa:

Para encontrar o endereço de um nó não íntegro, consulte o x.x.x.x do job bm-system-x.x.x.x-machine-init pendente.

Para encontrar um nó de plano de controle íntegro para o nó não íntegro, siga estas etapas:

  1. Encontre o pool de nós do nó não íntegro.
  2. Verifique o pool de nós do plano de controle no mesmo cluster do nó não íntegro e selecione um endereço do .spec.address desse pool de nós do plano de controle.

    1. No bootstrapper ou OC IT, execute:

      HEALTHY_CP_NODE_IP=Y.Y.Y.Y # Needs to be entered.
      alias ka="kubectl --kubeconfig=/root/release/root-admin/root-admin-kubeconfig"
      HARBOR=$(ka get harborcluster harbor -n harbor-system -o=jsonpath="{.spec.externalURL}")
      REGISTRY=${HARBOR#https://}
      # Download `etcdctl`.
      docker run --rm -v $(pwd):/workspace --workdir /workspace ${REGISTRY}/library/anthos-baremetal-release/etcd:v3.4.21-0-gke.1 /bin/sh -c "cp /usr/local/bin/etcdctl /workspace/etcdctl"
      
      scp etcdctl "root@$HEALTHY_CP_NODE_IP:/root/etcdctl"
      # SSH into the healthy control plane node.
      ssh $HEALTHY_CP_NODE_IP
    2. No nó do plano de controle íntegro, execute:

      UNHEALTHY_NODE_IP=X.X.X.X # Needs to be entered.
      
      UNHEALTHY_MEMBER=$(ETCDCTL_API=3 ./etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt     --cert=/etc/kubernetes/pki/etcd/server.crt     --key=/etc/kubernetes/pki/etcd/server.key --endpoints=https://localhost:2379  member list | grep $UNHEALTHY_NODE_IP | cut -d',' -f1)
      
      ETCDCTL_API=3 ./etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key --endpoints=https://localhost:2379 member remove $UNHEALTHY_MEMBER
Fazer upgrade 1.9.1
1.9.2

O upgrade da versão 1.9.0 para a 1.9.1 está bloqueado porque o complemento ods-fleet não foi instalado

Sintomas:

O pod do operador de frota do ODS está em loop de falha.

Para verificar o status do pod, execute:

ko get pods -n ods-fleet-operator

Um erro de eleição de líder semelhante ao seguinte aparece nos registros do operador da frota do ODS:

E0413 18:06:48.614127       1 leaderelection.go:330] error retrieving resource lock ods-fleet-system/af0cf209.dbadmin.gdc.goog: Get "https://172.20.0.1:443/apis/coordination.k8s.io/v1/namespaces/ods-fleet-system/leases/af0cf209.dbadmin.gdc.goog": context deadline exceeded
I0413 18:06:48.614214       1 leaderelection.go:283] failed to renew lease ods-fleet-system/af0cf209.dbadmin.gdc.goog: timed out waiting for the condition
E0413 18:06:48.614460       1 main.go:473] "setup: problem running manager" err="leader election lost" log_name="l1_controller"

Para verificar os registros do operador da frota do ODS, execute:

ko logs deployment/fleet-controller-manager -n ods-fleet-system

A seguinte mensagem é exibida:

Message: Error occurred during addon installation: failed to upgrade chart: an error occurred while rolling back the release. original upgrade error: post-upgrade hooks failed: timed out waiting for the condition: timed out waiting for the condition

Alternativa:

Para editar a implantação, execute:

ko edit deployment -n ods-fleet-system fleet-controller-manager
ku edit deployment oracle-controller-manager -n ods-oracle-system
ku edit deployment pg-controller-manager -n ods-postgres-system

Edite o campo resources do contêiner manager da seguinte maneira:

Antes:

resources:
      limits:
         cpu: 100m
         memory: 512Mi
      requests:
         cpu: 100m
         memory: 512Mi

Depois:

resources:
      limits:
         cpu: 1000m
         memory: 1024Mi
      requests:
         cpu: 1000m
         memory: 1024Mi
Fazer upgrade 1.9.2
1.9.3

O complemento vm-runtime fica travado durante o upgrade do gpu-org-system-cluster da versão 1.9.1 para a 1.9.2 porque os pods kubevm-gpu-driver-daemonset estão no estado CrashLoopBackOff

Sintomas:

A seguinte mensagem de erro é exibida:

nvidia-driver-init run the action: init, with options: skip_driver                                                                                                                                                                                              
nvidia-driver-init Find the nvidia card, label this node                                                                                                                                                                                                        
nvidia-driver-init node/MACHINE_NAME not labeled                                                                                                                                                                                                                  
nvidia-driver-init enable nvidia container runtime for ubuntu/debian system                                                                                                                                                                                     
nvidia-driver-init install nvidia container runtime package                                                                                                                                                                                                     
nvidia-driver-init (Reading database ... 92144 files and directories currently installed.)                                                                                                                                                                      
nvidia-driver-init Preparing to unpack .../libnvidia-container1_1.12.0-1_amd64.deb ...                                                                                                                                                                          
nvidia-driver-init Unpacking libnvidia-container1:amd64 (1.12.0-1) over (1.12.0-1) ...                                                                                                                                                                          
nvidia-driver-init Setting up libnvidia-container1:amd64 (1.12.0-1) ...                                                                                                                                                                                         
nvidia-driver-init Processing triggers for libc-bin (2.31-0ubuntu9.9) ...                                                                                                                                                                                       
nvidia-driver-init (Reading database ... 92144 files and directories currently installed.)                                                                                                                                                                      
nvidia-driver-init Preparing to unpack .../libnvidia-container-tools_1.12.0-1_amd64.deb ...                                                                                                                                                                     
nvidia-driver-init Unpacking libnvidia-container-tools (1.12.0-1) over (1.12.0-1) ...                                                                                                                                                                           
nvidia-driver-init Setting up libnvidia-container-tools (1.12.0-1) ...                                                                                                                                                                                          
nvidia-driver-init dpkg: regarding .../nvidia-container-toolkit-base_1.12.0-1_amd64.deb containing nvidia-container-toolkit-base:                                                                                                                               
nvidia-driver-init  nvidia-container-toolkit-base breaks nvidia-container-toolkit (<= 1.10.0-1)                                                                                                                                                                 
nvidia-driver-init   nvidia-container-toolkit (version 1.8.1-1) is present and installed.                                                                                                                                                                       
nvidia-driver-init dpkg: error processing archive var/cache/apt/archives/nvidia-container-toolkit-base_1.12.0-1_amd64.deb (--install):                                                                                                                          
nvidia-driver-init  installing nvidia-container-toolkit-base would break nvidia-container-toolkit, and                                                                                                                                                          
nvidia-driver-init  deconfiguration is not permitted (--auto-deconfigure might help)                                                                                                                                                                            
nvidia-driver-init Errors were encountered while processing:                                                                                                                                                                                                    
nvidia-driver-init  var/cache/apt/archives/nvidia-container-toolkit-base_1.12.0-1_amd64.deb

Alternativa:

Para corrigir o problema, siga estas etapas:

  1. Faça login em todos os nós de GPU provisionados:

    # ka get servers -A | grep o1-highgpu1-48-gdc-metal
  2. Remova pacotes antigos:

    root@MACHINE_NAME:~# dpkg -r nvidia-container-runtime nvidia-container-toolkit
    (Reading database ... 92154 files and directories currently installed.)
    Removing nvidia-container-runtime (3.8.1-1) ...
    Removing nvidia-container-toolkit (1.8.1-1) ...
  3. Exclua o pod kubevm-gpu-driver-daemonset preso. Isso reinicia a instalação:

    # kug get pods -A | grep gpu | grep Init
  4. (Opcional) Se a instalação do complemento tiver expirado, reinicie o processo:

    ku delete job vm-runtime-readiness -n gpu-org-system-cluster
Fazer upgrade 1.9.10
1.9.11

O pod gpcbackup-agent-0 falha com a mensagem de erro failed to stage volume: iSCSI login failed.

Sintomas:

O gpcbackup-agent-0 mostra failed to stage volume: iSCSI login failed e não consegue preparar o volume.

Verifique se o pod não está conseguindo anexar o volume. Os exemplos a seguir usam o kubeconfig do cluster do sistema:

  • Descreva o pod:

    kos describe pod -n gpc-backup-system gpcbackup-agent-0

    Se o pod estiver falhando, uma saída semelhante ao exemplo a seguir será mostrada:

    Warning  FailedMount  24m (x1064 over 7d17h)    kubelet  Unable to attach or mount volumes: unmounted volumes=[gpcbackup-agent-vol], unattached volumes=[kube-api-access-cr45d gpcbackup-agent-vol]: timed out waiting for the condition
    Warning  FailedMount  9m18s (x4109 over 7d17h)  kubelet  MountVolume.MountDevice failed for volume "pvc-5df41864-63c5-4589-9569-036fa011f64c" : rpc error: code = Internal desc = failed to stage volume: iSCSI login failed
    Warning  FailedMount  4m32s (x3840 over 7d17h)  kubelet  Unable to attach or mount volumes: unmounted volumes=[gpcbackup-agent-vol], unattached volumes=[gpcbackup-agent-vol kube-api-access-cr45d]: timed out waiting for the condition
  • Verifique o nó em que o pod está falhando:

    kos get pod -n gpc-backup-system gpcbackup-agent-0 -o wide

    Você vai receber uma saída semelhante a este exemplo:

    NAME                READY   STATUS              RESTARTS   AGE     IP       NODE          NOMINATED NODE   READINESS GATES
    gpcbackup-agent-0   0/1     ContainerCreating   0          7d17h   [none]   vm-e2b9792a   [none]           [none]
  • Consiga o pod netapp-trident no mesmo nó em que o pod gpcbackup-agent-0 falhou:

    kos get pod -o wide -n netapp-trident

    Você vai receber uma saída semelhante a este exemplo:

    netapp-trident-node-linux-6kgv4              2/2     Running   0               12h     10.249.20.12   vm-e2b9792a   [none]           [none]
  • Verifique os registros do pod netapp-trident no mesmo nó em que o pod gpcbackup-agent-0 falhou:

    kos logs -n netapp-trident netapp-trident-node-linux-6kgv4 trident-main

    Você vai receber uma saída semelhante a este exemplo:

    time="2024-01-25T17:35:29Z" level=error msg="Failed to discover targets" error="process killed after timeout" output= portal="172.20.131.41:3260" requestID=e377490f-5407-44ea-9691-1ee8990f8c3e requestSource=CSI
    time="2024-01-25T17:35:29Z" level=error msg="unable to ensure iSCSI target exists: failed to discover targets: process killed after timeout" err="failed to discover targets: process killed after timeout" iface=default requestID=e377490f-5407-44ea-9691-1ee8990f8c3e requestSource=CSI targetIqn="iqn.1992-08.com.netapp:sn.944e1654ac1c11ee86b0d039ea524d51:vs.26" tp="172.20.131.41:3260"
    time="2024-01-25T17:35:29Z" level=error msg="GRPC error: rpc error: code = Internal desc = failed to stage volume: iSCSI login failed" requestID=e377490f-5407-44ea-9691-1ee8990f8c3e requestSource=CSI

Alternativa:

Para resolver o problema, siga estas etapas:

  1. Consiga o nome do InventoryMachine:

    export ROOT_ADMIN_KUBECONFIG=[path to the root admin kubeconfig]
    
    export INV_MACH=vm-e2b9792a
  2. Confirme se o job anterior existe:

    export ORG_ADMIN_KUBECONFIG=[path to the org admin kubeconfig]
    kubectl --kubeconfig ${ORG_ADMIN_KUBECONFIG} get job -n gpc-system storage-ipsec-config-"${INV_MACH}"

    Você vai receber uma saída semelhante a esta:

    NAME                               COMPLETIONS   DURATION   AGE
    storage-ipsec-config-vm-e2b9792a   1/1           17s        19d
  3. Exclua o job:

    kubectl --kubeconfig ${ROOT_ADMIN_KUBECONFIG} delete storageencryptionconnections -n ${INV_MACH} ${INV_MACH}

    Você vai receber uma saída semelhante a esta:

    warning: deleting cluster-scoped resources, not scoped to the provided namespace
    storageencryptionconnection.ontap.netapp.storage.private.gdc.goog "vm-e2b9792a" deleted
  4. Confirme se o StorageEncryptionConnection existe:

    kubectl --kubeconfig ${ROOT_ADMIN_KUBECONFIG} get storageencryptionconnections -n ${INV_MACH} ${INV_MACH}

    Você vai receber uma saída semelhante a esta:

    NAME          INVENTORYMACHINE   STORAGEVIRTUALMACHINE   STORAGECIDR        PRESHAREDKEY                 READY   AGE
    vm-e2b9792a   vm-e2b9792a        org-1-user              172.20.131.32/27   vm-e2b9792a-pre-shared-key   True    19d
  5. Exclua o StorageEncryptionConnection:

    kubectl --kubeconfig ${ROOT_ADMIN_KUBECONFIG} delete storageencryptionconnections -n ${INV_MACH} ${INV_MACH}

    Você vai receber uma saída semelhante a esta:

    warning: deleting cluster-scoped resources, not scoped to the provided namespace
    storageencryptionconnection.ontap.netapp.storage.private.gdc.goog "vm-e2b9792a" deleted
  6. Reinicie o pod root-admin-controller:

    kubectl --kubeconfig ${ROOT_ADMIN_KUBECONFIG} rollout restart deploy -n gpc-system root-admin-controller && kubectl --kubeconfig ${ROOT_ADMIN_KUBECONFIG} rollout status deploy -n gpc-system root-admin-controller
  7. Confirme se o novo job foi recriado e executado com sucesso:

    kubectl --kubeconfig ${ORG_ADMIN_KUBECONFIG} get job -n gpc-system storage-ipsec-config-${INV_MACH}

    Você vai receber uma saída semelhante a esta:

    NAME                               COMPLETIONS   DURATION   AGE
    storage-ipsec-config-vm-e2b9792a   1/1           19s        95s
Fazer upgrade 1.9.10
1.9.11

O nó zp-aa-bm08 do cluster de administrador raiz mostra um erro de provisionamento e não pode ser concluído porque o registro não está íntegro.

Sintomas:

Um pod do registro do Harbor mostra uma mensagem de erro semelhante a esta:

Warning  FailedMount  6m52s (x718 over 2d14h)  kubelet  Unable to attach or mount volumes: unmounted volumes=[storage], unattached volumes=[registry-config authentication-htpasswd internal-certificates sto │
│ age[]: timed out waiting for the condition

Alternativa:

Para solucionar o problema, siga estas etapas:

  1. Verifique a declaração de volume persistente (PVC) do registro do Harbor e anote o nome do volume da PVC:

    kubectl get pvc harbor-registry -n harbor-system
  2. Para verificar se a vinculação de volume está no mesmo nó do pod do registro do Harbor, liste os volumeattachment e encontre o associado ao nome do volume:

    kubectl get volumeattachment | grep [volume-name]
  3. Se o anexo de volume estiver em um nó diferente do pod do registro do Harbor, remova o volumeattachment:

    kubectl delete volumeattachment [volumeattachment-name]
  4. Reinicie o pod do registro do Harbor.

Agora, o registro do Harbor no cluster de administrador raiz precisa estar íntegro, e o upgrade do nó será concluído.

Instalação 1.9.2
1.9.3
1.9.4
1.9.5

Um cluster de usuário não fica pronto a tempo

Sintomas:

A seguinte mensagem de erro é exibida:

pod "coredns-75bd7c95f7-fd4cr" in namespace "kube-system" is not ready yet.

Um registro de pod contém o seguinte:

[INFO] plugin/ready: Still waiting on: "kubernetes,kubernetes"

A versão do CoreDNS é 1.8.6.

Alternativa:

Para resolver o problema, reinicie a implantação do coredns.

Depois que KUBECONFIG for definido para o cluster correto, execute:

kubectl rollout restart deployment coredns -n kube-system

O nome do cluster de usuário faz parte da mensagem de erro.

Para encontrar o arquivo kubeconfig em /root/release/user/, procure os kubeconfigs: org-1-system-user-kubeconfig user-vm-1-user-kubeconfig user-vm-2-user-kubeconfig

Se os arquivos kubeconfig estiverem faltando, gere-os da seguinte maneira:

export KUBECONFIG=/root/release/org-admin/org-1-admin-kubeconfig

kubectl get secrets -n user-vm-1-cluster user-vm-1-kubeconfig -o jsonpath='{.data.value}' | base64 -d > /tmp/user-vm-1-user-kubeconfig
Fazer upgrade 1.9.2
1.9.3

Não é possível atualizar o status OrganizationUpgrade

Sintomas:

A seguinte mensagem de erro é exibida:

Warning  ReconcileBackoff  43m (x9 over 61m)  OrganizationUpgrade  [UPG1402: unable to set AddOn selector labels for root-admin cluster: Operation cannot be fulfilled on clusters.baremetal.cluster.gke.io "root-admin": the object has been modified; please apply your changes to the latest version and try again, UPG9900: unable to update status: OrganizationUpgrade.upgrade.private.gdc.goog "root" is invalid: [status.errorStatus.errors[0]. errorResource.name: Required value, status.errorStatus.errors[0].errorResource.namespace: Required value]]

Esse problema geralmente é temporário e deve ser resolvido.

Instalação 1.9.3

Falha na instalação do complemento

A instalação de um complemento falha com o seguinte erro:

Error occurred during addon installation: failed to install chart: release netapp-trident failed, and has been uninstalled due to atomic being set: failed post-install: timed out waiting for the condition

Alternativa:

A instalação do complemento pode falhar porque os nós estão no estado NotReady. Verifique se os nós estão no estado NotReady usando:

kubectl get nodes

Saiba detalhes sobre o nó que está no estado NotReady:

$ kubectl describe node  | grep PodCIDRs

Em um cluster com esse problema, um nó não tem PodCIDRs atribuídos a ele, por exemplo:

PodCIDRs:                     
For a healthy cluster, all the nodes should have PodCIDRs assigned to it(CIDR shown here is for example purposes only and might vary on the actual cluster based in the Configured ClusterCIDR): eg.
PodCIDRs:                     192.168.6.0/24

Para corrigir o problema, reinicie a implantação ipam-controller no cluster afetado:

kubectl --kubeconfig KUBECONFIG_PATH -n kube-system rollout restart ds/ipam-controller-manager
Fazer upgrade 1.9.3

Um upgrade do cluster de usuário não consegue chamar webhooks

Um upgrade falha com o seguinte erro:

Rollback "netapp-trident" failed: cannot patch "netapp-trident-csi-cert" with kind Certificate: Internal error occurred: failed calling webhook "webhook.cert-manager.io": failed to call webhook: Post "https://cert-manager-webhook.cert-manager.svc:443/mutate?timeout=10s": dial tcp 172.20.5.144:443: i/o timeout && cannot patch "netapp-trident-server-cert" with kind Certificate: Internal error occurred: failed calling webhook "webhook.cert-manager.io": failed to call webhook: Post "https://cert-manager-webhook.cert-manager.svc:443/mutate?timeout=10s": context deadline exceeded && cannot patch "netapp-trident-client-cert" with kind Certificate: Internal error occurred: failed calling webhook "webhook.cert-manager.io": failed to call webhook: Post "https://cert-manager-webhook.cert-manager.svc:443/mutate?timeout=10s": context deadline exceeded && cannot patch "netapp-trident-csi-selfsigned-issuer" with kind Issuer: Internal error occurred: failed calling webhook "webhook.cert-manager.io": failed to call webhook: Post "https://cert-manager-webhook.cert-manager.svc:443/mutate?timeout=10s": context deadline exceeded && cannot patch "netapp-trident-csi-issuer" with kind Issuer: Internal error occurred: failed calling webhook "webhook.cert-manager.io": failed to call webhook: Post "https://cert-manager-webhook.cert-manager.svc:443/mutate?timeout=10s": context deadline exceeded

Alternativa:

Atualize manualmente o campo <code.spec.addonsettemplateref< code="" dir="ltr" translate="no"> do AddOnSet abm-overrides para o nome do AddOnSetTemplate da versão desejada no mesmo namespace do cluster que está sendo atualizado.</code.spec.addonsettemplateref<>

Instalação 1.9.3

Um controlador de administrador de frota fica preso em um loop de falhas com o erro Fleet admin controller manager stopped: failed to wait for auditloggingtarget caches to sync: timed out waiting for cache to be synced nos registros

Sintomas:

  1. Um controlador de administrador da frota não fica pronto, falhando no teste TestCreateFleetAdminCluster ou TestSimOverlayCreateFleetAdminCluster.

  2. O controlador de administrador da frota está preso em um loop de falhas.

  3. O seguinte erro está nos registros do controlador de administrador da frota: Fleet admin controller manager stopped: failed to wait for auditloggingtarget caches to sync: timed out waiting for cache to be synced.

Alternativa:

  1. Implante o CRD Logmon no cluster de administrador da organização.

  2. Reinicie o controlador de administrador da frota.

Instalação 1.9.3

Um cluster do sistema não fica pronto a tempo

Sintomas:

A seguinte mensagem de erro é exibida:

k8s_mt_system_cluster_healthcheck_test.go:147: system cluster did not become ready in time: cluster "org-1-system-cluster/org-1-system" did not become healthy in time: [waitingForClusterHealth] WaitForSuccess gave up [...] unable to retrieve logs for pod "anthos-prometheus-k8s-0" [...] pod "anthos-prometheus-k8s-0" in namespace "obs-system" is not ready yet. [...] Message:containers with unready status: [config-reload prometheus-server] [...]

Alternativa:

Para resolver o problema, reinicie a implantação e o daemonset no cluster:

kubectl rollout restart deploy/netapp-trident-csi -n netapp-trident
kubectl rollout restart daemonset/netapp-trident-csi -n netapp-trident

Observação:execute o comando a seguir antes de reiniciar o deployment e o daemonset para apontar para o cluster correto:

export KUBECONFIG=/root/release/system/org-1-system-kubeconfig
Fazer upgrade 1.9.4
1.9.5
1.9.6
1.9.7
1.9.8

Um cluster de usuário com três nós de trabalho n2-standard-4 não tem recursos de CPU suficientes para fazer upgrade

Sintomas:

Um pod não pode ser programado devido à falta de CPU.

Alternativa:

  1. Para um cluster de usuário criado com nós de trabalho n2-standard-4, adicione um novo NodePool n2-standard-8 com três nós a esse cluster antes de fazer upgrade.

  2. Para novos clusters de usuário, crie um NodePool n2-standard-8 com o mínimo de três nós. Consulte Criar um cluster de usuário para cargas de trabalho de contêineres para mais detalhes.

Operações 1.9.0
1.9.2
1.9.3
1.9.4

A interface permite selecionar configurações incompatíveis de GPU e tipo de VM

Sintomas:

A instância de VM PHASE mostra Scheduling e READY permanece False, nunca atingindo o estado True. Isso afeta dois tipos de máquina, conforme listado na solução alternativa. Outros tipos de máquinas não são afetados e não precisam de uma solução alternativa.

Alternativa:

  • Ao criar clusters de usuários que usam GPUs A100 de 40 GB, sempre selecione o tipo de máquina a2-highgpu-1g-gdc na UI.
  • Ao criar clusters de usuários que usam GPUs A100 80G, sempre selecione o tipo de máquina a2-ultragpu-1g-gdc na UI.
Operações 1.9.0
1.9.2
1.9.3
1.9.4

Tamanhos de memória de VM maiores que 32 GB sujeitos a cálculo incorreto do overhead do QEMU, exigem substituições de tamanho de memória

Sintomas:

Para pools de nós com instâncias de VM com tamanhos de memória maiores que 32 GB, a instância de VM pode parecer ser executada, parar e ser executada novamente, possivelmente repetindo essa sequência. Com o tempo, um erro de falta de memória OOMKilled é gerado e a instância falha.
Estes são os três tipos de VM afetados:

  • n2-highmem-8-gdc: 64 GB de memória
  • a2-highgpu-1g-gdc: 85 GB de memória
  • a2-ultragpu-1g-gdc: 170 GB de memória

Alternativa:

  1. Verifique o tipo de máquina:
    kubectl --kubeconfig= get gvm vm-8c440bc4 -n gdch-vm-infra
  2. Procure o tipo de VM em
    spec.compute.virtualMachineTypeName
    na sua saída.
  3. Se o tipo de VM for um dos três tipos listados, edite o configmap para incluir uma substituição de memória:
    kubectl --kubeconfig=SYSTEM_CLUSTER_KUBECONFIG \
          edit configmap NAME -n NAMESPACE
  4. Adicione uma seção memory.guest e resources.overcommitGuestOverhead, como no exemplo a seguir:
          apiVersion: v1
          kind: ConfigMap
          metadata:
             name: vm-8c440bc4
             namespace: gdch-vm-infra
          data:
             virtSpec: |
               template:
             spec:
               domain:
                  ...
                  ...
                  memory:
                    guest: "MEMORY_SIZE"
                  resources:
                    overcommitGuestOverhead: true
                   ...
                   ...
          
  5. Em memory, mude guest para ter os seguintes valores:
    • Para n2-highmem-8-gdc, faça MEMORY_SIZE 63.6G.
    • Para a2-highgpu-1g-gdc, faça MEMORY_SIZE 84G.
    • Para a2-ultragpu-1g-gdc, faça MEMORY_SIZE 168G.
  6. Repita isso para todas as VMs afetadas.
Fazer upgrade 1.9.4

Um cliente SSH não pode alocar um pseudoterminal

Sintomas:

Um job bm-system-* fica parado na etapa Gathering Facts. Ao tentar fazer SSH manualmente no servidor, PTY allocation request failed on channel 0 é exibido.

Alternativa:

Reinicie o servidor usando uma destas opções:

  1. curl -X POST -H "content-type: application/json" -k -u $ILO_USER:$ILO_PWD https://$ILO_IP/redfish/v1/Systems/1/Actions/ComputerSystem.Reset

  2. UI do iLO

  3. kubectl --kubeconfig=$ROOT_ADMIN_KUBECONFIG annotate -n gpc-system bmh/$SERVER "reboot.metal3.io"=""

Fazer upgrade 1.9.4
1.9.10

O upgrade do nó não faz backup da configuração do IPsec

Sintomas:

Um upgrade falha porque o job backup-ipsec-* falhou.

Alternativa:

Siga estas etapas:

  1. Encontre as chaves pré-compartilhadas no namespace gpc-system no cluster de administrador da organização. As chaves são chamadas de <node-name>-pre-shared-key.

    Para receber o hash de chave de um arquivo YAML de chave pré-compartilhada de um nó em funcionamento, use kubectl get --kubeconfig /root/release/org-admin/org-1-admin-kubeconfig -n gpc-system secret <not-failed-node-name>-pre-shared-key -o=jsonpath='{.data.pre-shared-key}' | awk '{ print $1 }'.

    É necessário extrair o hash de chave de um nó diferente daquele em que o upgrade do ipsec falhou.

  2. Aplique o hash dessa chave pré-compartilhada ao segredo pre-shared-key do nó com falha no gpc-system no cluster de administrador da organização.

  3. Exclua o objeto storageencryptionconnection que tem o mesmo nome do nó com falha no cluster de administrador raiz.

  4. Exclua o job storage-ipsec-config-<node-name> associado no cluster de administrador da organização.

  5. Exclua o job de upgrade backup-ipsec-for-upgrade-<node-name> associado.

Fazer upgrade 1.9.4

O executor do Clamav se recusa a encerrar o processamento do sinal SIGTERM

Sintomas:

A atualização de clusters da organização leva muito tempo.

Alternativa:

Aguarde o encerramento natural do clamav.

Fazer upgrade 1.9.5

O harbor-cert-secret tem uma CA diferente da CA do lado do cliente

Sintomas:

Diferentes certificados são exibidos:

echo $(kubectl get secret harbor-cert-secret -n istio-system -o jsonpath='{.data.ca\.crt}') | openssl base64 -A -d 
-----BEGIN CERTIFICATE-----
MIIBqjCCAS+gAwIBAgIQSve6hYhac9nZr/u/l/hPzjAKBggqhkjOPQQDAzAWMRQw
EgYDVQQDEwtoYXJib3ItY2VydDAeFw0yMzA3MTcwMzQ3MjhaFw0yODA3MTUwMzQ3
MjhaMBYxFDASBgNVBAMTC2hhcmJvci1jZXJ0MHYwEAYHKoZIzj0CAQYFK4EEACID
YgAEsGCynvjnSNNIdz3PxpEqvogHAITWyB3jJbA6jxQhics5MYuq2biaqLg38Ly1
3mF6CRh9Tzroxg2Wtu339McKTAC/7v61ZsbGXbj3eQiTECJut/a55BekG7FcwVG/
btbAo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
FgQUUh1ZUS9CUIHgQmJZTj8m3MIINS8wCgYIKoZIzj0EAwMDaQAwZgIxALDea5fh
IeafRNzR3pjYRgW++TCYZU3XVSJ04K8eIBy1wz1XRDR5SWFgJ/ejWZGUagIxAIQP
9A42lzd7gyqaAAlRB+TQ0sMJMOOyNl0gFg5ZVyhGdJfsZpv1XrcLcqX3tejydw==
-----END CERTIFICATE-----
echo $(kubectl get secret ca-cert-10.2.2.101.10443  -n anthos-creds -o jsonpath='{.data.ca\.crt}') | openssl base64 -A -d
-----BEGIN CERTIFICATE-----
MIIBazCCARKgAwIBAgIQKkDVSpMZf9CQEHxx7UFPmDAKBggqhkjOPQQDAjAWMRQw
EgYDVQQDEwtoYXJib3ItY2VydDAeFw0yMzA3MTYwOTQzMTlaFw0yNDA3MTUwOTQz
MTlaMBYxFDASBgNVBAMTC2hhcmJvci1jZXJ0MFkwEwYHKoZIzj0CAQYIKoZIzj0D
AQcDQgAEI4hXIh65Zc8sWaPQL9gqz3lrq22A1XJsRrMwl/pk3vZiNLGS3+Tt9tXc
WDP74IbinOxZ1Auw08e3s4sxCahfyqNCMEAwDgYDVR0PAQH/BAQDAgKkMA8GA1Ud
EwEB/wQFMAMBAf8wHQYDVR0OBBYEFN8ob6e8WeFELnVKPSdtMfyvRP95MAoGCCqG
SM49BAMCA0cAMEQCIF8P5THYBHcOdcn1u7zi+Y4jwDTdLAeaDZbVxUDEK2EaAiBW
zilvR3YvW7h5OdSUsgFkSQ42FcSIoNHWYNSZx16CeQ==
-----END CERTIFICATE-----

Alternativa:

Observação: faça a rotação do certificado harbor-harbor-https antes das etapas a seguir.

Siga estas etapas:

Há cópias dos dados do certificado armazenadas em secrets no cluster. Depois de fazer a rotação do certificado harbor-harbor-https, atualize também as cópias do secret.

  1. Recupere o URL do Artifact Registry.
    export registry_url=$(kubectl get harborcluster/harbor -n harbor-system -o json | jq -r '.spec.externalURL')
  2. Atualize as cópias secretas do certificado do Artifact Registry em cada namespace.

    Receba todos os namespaces que armazenam uma cópia secreta do certificado do Artifact Registry.

    export ca_cert_secret_name=ca-cert-$(printf \"${registry_url}\" | jq -r 'ltrimstr("https://") | sub(":";".")')
    export ca_cert_secret_namespaces=$(kubectl get secrets -A -o json | jq -j ".items[] | select(.metadata.name == \"${ca_cert_secret_name}\") | .metadata.namespace,\" \"")

    Atualize a cópia do secret do certificado do Artifact Registry em cada namespace.

    export cert_data=$(kubectl -n istio-system get secret/harbor-harbor-https -o json | jq -r '.data."ca.crt"')
    for namespace in ${ca_cert_secret_namespaces}; do kubectl patch secret/${ca_cert_secret_name} -n $namespace -p "{\"data\":{\"ca.crt\":\"${cert_data}\"}}"; done
  3. Para o cluster root-admin, também é necessário atualizar uma correção chamada ca-cert-in-cluster-registry no namespace anthos-creds.
    export cert_data=$(kubectl -n istio-system get secret/harbor-harbor-https -o json | jq -r '.data."ca.crt"')
    kubectl -n anthos-creds patch secret/ca-cert-in-cluster-registry -p "{\"data\":{\"ca.crt\":\"${cert_data}\"}}"
  4. Atualize o registry-cert armazenado no namespace kube-system.
    export cert_data=$(kubectl -n istio-system get secret/harbor-harbor-https -o json | jq -r '.data."ca.crt"')
    kubectl -n kube-system patch secret/registry-cert -p "{\"data\":{\"registry-cert\":\"${cert_data}\"}}"
  5. Se você estiver rotacionando certificados para o cluster org-admin, também precisará atualizar as cópias secretas de certificados que existem no cluster root-admin.
    Receba todos os namespaces que armazenam uma cópia secreta do certificado do Artifact Registry.
    export ca_cert_secret_name=ca-cert-$(printf \"${registry_url}\" | jq -r 'ltrimstr("https://") | sub(":";".")')
    export ca_cert_secret_namespaces=$(kubectl get secrets -A -o json | jq -j ".items[] | select(.metadata.name == \"${ca_cert_secret_name}\") | .metadata.namespace,\" \"")

    Atualize a cópia do secret do certificado do Artifact Registry em cada namespace.

    export cert_data=$(kubectl -n istio-system get secret/harbor-harbor-https -o json | jq -r '.data."ca.crt"')
    for namespace in ${ca_cert_secret_namespaces}; do kubectl patch secret/${ca_cert_secret_name} -n $namespace -p "{\"data\":{\"ca.crt\":\"${cert_data}\"}}"; done
  6. .
Fazer upgrade 1.10.0
1.10.1

Fazer upgrade de uma organização para a versão 1.10.x da 1.9.1 ou anterior pode fazer com que os pods kube-apiserver não apareçam durante um upgrade

Sintomas:

Depois de iniciar um OrganizationUpgrade, o pod kube-apiserver não está sendo executado em um ou mais nós.

  1. Identifique o nó em que o upgrade está bloqueado:
    kubectl get po -n kube-system -l component=kube-apiserver
          

    A saída será semelhante ao seguinte:

    NAME                        READY   STATUS    RESTARTS   AGE
    kube-apiserver-ah-aa-bm01   1/1     Running   0          12h
    kube-apiserver-ah-ab-bm01   1/1     Running   0          11h
    kube-apiserver-ah-ac-bm01   1/1     Error     0          12h
  2. Estabeleça uma conexão SSH com o nó que acabou de ser atualizado:
    root@ah-ac-bm01:~# crictl ps -a | grep kube-api
         

    O status do contêiner vai aparecer como Exited:

    f1771b8aad929       bd6ed897ecfe2       17 seconds ago       Exited              kube-apiserver                2                   8ceebaf342eb8       kube-apiserver-ah-ac-bm01
    bd14d51b01c09       d0bac8239ee3a       5 minutes ago        Exited
          
  3. Verifique os registros do pod Exited:
    crictl logs f1771b8aad929

    A saída será semelhante ao seguinte:

    Error: invalid argument "JobTrackingWithFinalizers=false" for "--feature-gates" flag: cannot set feature gate JobTrackingWithFinalizers to false, feature is locked to true

    A flag é configurada no arquivo /etc/kubernetes/manifests/kube-apiserver.yaml:

    root@ah-ac-bm01:~# grep JobTrackingWithFinalizers /etc/kubernetes/manifests/kube-apiserver.yaml
        - --feature-gates=JobTrackingWithFinalizers=false

Alternativa:

Remova a flag do arquivo /etc/kubernetes/manifests/kube-apiserver.yaml.

  1. Faça backup do arquivo:
    root@ah-ac-bm01:~# cp /etc/kubernetes/manifests/kube-apiserver.yaml ~/kube-apiserver.yaml.bak
           
  2. Remova a linha:
    root@ah-ac-bm01:~# sed -i '/--feature-gates=JobTrackingWithFinalizers=false/d' /etc/kubernetes/manifests/kube-apiserver.yaml
           
  3. Confirme se a linha foi removida:
    root@ah-ac-bm01:~# diff /etc/kubernetes/manifests/kube-apiserver.yaml ~/kube-apiserver.yaml.bak
    35a36
    >     - --feature-gates=JobTrackingWithFinalizers=false
           
  4. Liste o contêiner kube-apiserver:
    O
    root@ah-ac-bm01:~# crictl ps --name kube-apiserver
           
    kubelet detecta automaticamente a mudança e inicia o pod kube-apiserver:
    CONTAINER           IMAGE               CREATED             STATE               NAME                ATTEMPT             POD ID              POD
    e1344008dfed9       bd6ed897ecfe2       12 hours ago        Running    
  5. Repita essas etapas para todos os nós afetados.
Fazer upgrade 1.9.2
1.9.3
1.9.3
1.9.4
1.9.5
1.9.6

Repetição de falhas de implantação do kube-state-metrics

Sintomas:

Os loops de falha de implantação do kube-state-metrics em uma organização após a rotação de certificado. Esse problema pode causar a perda de dados de monitoramento.

Fazer upgrade 1.9.6

Nó de trabalho desequilibrado após o upgrade

Sintomas:

Após o upgrade, o nó de trabalho fica desequilibrado.

Alternativa:

Faça o balanceamento manual do nó de trabalho:

  • Para uma carga de trabalho de pod, exclua os pods na implantação.
  • Para uma carga de trabalho de VM, exclua o virt-launcher sem modificar o objeto GVM do plano de controle.
Fazer upgrade 1.9.6

O plug-in do dispositivo GPU não inicia

Ao fazer upgrade da versão 1.9.5 para a 1.9.6, é possível que o plug-in do dispositivo de GPU não seja iniciado.

Sintomas:

O seguinte erro pode aparecer, bloqueando a preparação do ambiente de execução da VM e o processo de upgrade:

Failed to initialize NVML: could not load NVML library
      

Alternativa:

  1. Verifique se o nvidia-container-runtime está configurado corretamente no nó:
    1. Estabeleça uma conexão SSH com o nó que você suspeita ter um problema.
    2. Confira a lista de pods:
      crictl pods
    3. Inspecione os pods:
      crictl inspectp $pod_hash | grep runtimeOption -A1
      Se a saída for semelhante a esta, o nó estará configurado corretamente. Se a saída não for assim, o nvidia-container-runtime não estará configurado no nó:
      binary_name": "/usr/bin/nvidia-container-runtime"
  2. Se o nvidia-container-runtime não estiver configurado corretamente, reinicie o containerd para resolver o problema:
    systemctl restart containerd
Fazer upgrade 1.9.7

O NodeUpgrade para upgrade de firmware do servidor fica travado no status in process

Ao fazer upgrade para a versão 1.9.7, o firmware do pool de nós do cluster de administrador raiz permanece no status in process.

Sintomas:

  • Para o lado NodeUpgrade, consulte a solução alternativa Tempo limite do servidor de artefatos:
    • NodeUpgrade está preso no status in process, e a condição para NodeROMFirmwareUpgradeCompleted no status Nodeupgradetask nunca é concluída.
    • O URL em spec.firmware.firmwarePackages.url no objeto NodeUpgrade pode ficar travado quando conectado a, por exemplo:
      curl -k https://10.248.2.71:30938/artifacts/serve/Z2RjaC1ocGUtZmlybXdhcmUvaWxvOmlsbzU= -o /tmp/file.cow2
  • Para o lado Harbor, consulte a solução alternativa Servidor de artefatos não autorizado:
    • No registro do servidor de artefatos, um erro relacionado ao acesso não autorizado a um repositório pode mostrar: gdch-hpe-firmware/ilo, por exemplo:
      root@bootstrapper:~# kubectl --kubeconfig ${KUBECONFIG} logs -n gpc-system -l name=artifact-registry-services-artifact-server -f
      
      artifact-server I1108 05:20:28.084320       1 artifact_server.go:171] Pulling artifact at path /artifacts/serve/Z2RjaC1ocGUtZmlybXdhcmUvaWxvOmlsbzU=
      artifact-server E1108 05:20:28.159685       1 artifact_server.go:194] Error fetching image 10.249.23.11:10443/gdch-hpe-firmware/ilo:ilo5: GET https://10.249.23.11:10443/v2/gdch-hpe-firmware/ilo/manifests/ilo5: UNAUTHORIZED: unauthorized to access repository: gdch-hpe-firmware/ilo, action: pull: unauthorized to access repository: gdch-hpe-firmware/ilo, action: pull
    • No projeto do Harbor, gdch-hpe-firmware precisa ter Spec.harborProjectConfig.accessLevel como private:
      kubectl get --kubeconfig ${KUBECONFIG} HarborProject -n gpc-system gdch-hpe-firmware -o yaml

Alternativa:

Rede de nível inferior 1.9.0 - 1.9.6

Não é possível estabelecer sessões do BGP do cluster do sistema devido à sobreposição de ClusterIPs

Sintomas:

As sessões do BGP estão inativas na rede interna de uma organização. Apenas um dos endpoints de peering BGP internos da organização é adicionado aos objetos TORSwitchInternal.

Alternativa:

Mude explicitamente a sub-rede usada em {organization-name}-system-bgp-flat-ip-ipv4-apc AddressPoolClaim para não se sobrepor a nenhum outro recurso AddressPoolClaim análogo de outra organização.

  1. Investigue os sintomas:
    1. Para cada cluster do sistema da organização, execute:
      kubectl get bgpsessions -A --kubeconfig ORG_SYSTEM_KUBECONFIG
    2. Verifique o campo State de cada objeto BGPSession para State de NotEstablished. Anote o LocalIP de cada NotEstablished BGPSession associado para usar mais tarde.
  2. Determine se "System cluster BGP Sessions cannot be established due to overlapping ClusterIPs" é a causa raiz:
    1. Para cada organização ativa, execute:
      kubectl get clusterbgppeers -A --kubeconfig ORG_ADMIN_KUBECONFIG_FILE -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name,CLUSTERIP:.spec.clusterIP | grep flat-ip
    2. Procure o campo ClusterIP da saída (terceira coluna) para o LocalIPs observado na etapa 1.b. Anote os LocalIPs que correspondem às entradas na terceira coluna da saída para mais tarde. Se houver vários clusters de administrador da organização distintos, em que a saída de 2.a contenha os LocalIPs observados na etapa 1.b, siga para a etapa 3.
  3. Resolver IPs sobrepostos usados para clusters de sistemas organizacionais.
    1. Execute:
      kubectl get subnetclaims -A --kubeconfig ROOT_ADMIN_KUBECONFIG -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name,CIDRBLOCK:.status.ipv4SubnetStatus.cidrBlock | grep worker-node
    2. Anote o número de objetos SubnetClaim retornados da consulta em 3.a. Isso precisa ser igual ao número de organizações ativas.
    3. Para cada linha, anote o namespace (coluna 1) e o bloco CIDR (coluna 3). O bloco CIDR de cada linha precisa ser igual ao de todas as outras linhas.
    4. Para cada organização, faça o seguinte:
      1. Navegue até o objeto {organization-name}-system-bgp-flat-ip-ipv4-apc AddressPoolClaim no cluster de administrador da organização.
      2. Calcule o Start IP da reivindicação do pool de endereços do nó de trabalho dessa organização. Para fazer isso, pegue o bloco CIDR de 3.c e o campo Size no AddressPoolClaim de 3.d.i. Começando no penúltimo IP do bloco CIDR, conte Size IPs para baixo. Esse é o novo Start IP da primeira organização (usado na etapa 3.d.iii). Para cada organização adicional, faça a contagem regressiva de Size IPs, começando pelo novo Start IP da organização anterior. Exemplo:
        CIDR block: 10.0.0.0/24
        
        org-1, org-2, & org-3 AddressPoolClaim Size: 2
        
        - New org-1 startIPAddress: 10.0.0.252
        - New org-2 startIPAddress: 10.0.0.250
        - New org-3 startIPAddress: 10.0.0.248
      3. No AddressPoolClaim da etapa 3.c.i, adicione o seguinte campo no campo Spec:
        staticIPRanges:
        - startIPAddress: {Start IP from step 3.d.ii}
          size: {Size from step 3.d.ii}
        Use o seguinte comando:
        `kubectl edit addresspoolclaim ADDRESS_POOL_CLAIM_NAME -n ORGANIZATION_NAME-system-cluster --kubeconfig ORGANIZATION_ADMIN_KUBECONFIG
        O resultado precisa ser parecido com este se você usar org-1 de 3.d.ii, por exemplo:
        apiVersion: system.private.gdc.goog/v1alpha1
        kind: AddressPoolClaim
        metadata:
          name: org-1-system-bgp-flat-ip-ipv4-apc
          namespace: org-1-system-cluster
          ...
        spec:
          category: InternalOverlayNetwork
          ...
          parentReference:
            name: worker-node-network-subnet
            type: SubnetClaim
          size: 2
          staticIPRanges:
          - startIPAddress: 10.0.0.252
            size: 2
        status:
          allocatedIPRanges: ...
          ...
  4. Faça uma limpeza para evitar sessões do BGP desnecessárias no hardware TORSwitch.
    1. Para listar todos os recursos TORSwitchInternal que precisam ser atualizados, execute:
      kubectl get torswitchinternals --kubeconfig ROOT_ADMIN_KUBECONFIG -A
    2. Para cada um dos TORSwitchInternals listados na saída do comando anterior, execute o seguinte comando:
      kubectl edit torswitchinternal TOR_SWITCH_INTERNAL_NAME --kubeconfig ROOT_ADMIN_KUBECONFIG -n gpc-system
    3. Para todos os objetos TORSwitchInternal, remova todas as entradas da lista .spec.ebgpNeighbors que têm NeighborIPs iguais a qualquer um dos LocalIPs da etapa 2.b. Por exemplo, LocalIP de 2.2.2.2 foi observado na etapa 2.b. Confira abaixo um exemplo de TORSwitchInternal antes e depois da etapa de limpeza.
      Antes da limpeza:
      apiVersion: network.private.gdc.goog/v1alpha1
      kind: TORSwitchInternal
      metadata:
        ...
      spec:
        ...
        ebgpNeighbors:
        - md5SecretReference: {}
          neighborIP: 1.1.1.1
          peerASN: 11111
          updateSource:
            loopbackID: ...
          vrf: ...
        - md5SecretReference: {}
          neighborIP: 2.2.2.2
          peerASN: 11111
          updateSource:
            loopbackID: ...
          vrf: ...
        l2Networks:
        ...
      Após a limpeza. Observe a entrada ebgpNeighbor removida:
      apiVersion: network.private.gdc.goog/v1alpha1
      kind: TORSwitchInternal
      metadata:
        ...
      spec:
        ...
        ebgpNeighbors:
        - md5SecretReference: {}
          neighborIP: 1.1.1.1
          peerASN: 11111
          updateSource:
            loopbackID: ...
          vrf: ...
        l2Networks:
        ...
  5. Para validar, siga a etapa 1 e confirme se todos os objetos States BGPSession voltaram para Established. Pode levar cerca de 10 minutos para que todas as modificações sejam propagadas para as configurações físicas do GDC TORSwitch.
Fazer upgrade 1.9.7 - 1.9.21

O upgrade do nó e do sistema operacional não progride

Durante um upgrade, é possível que o upgrade do nó e do sistema operacional não avance.

Sintomas:

Talvez você veja um nó com o status Ready, SchedulingDisabled por algumas horas.

kubectl --kubeconfig $ROOT_ADMIN_KUBECONFIG get no
NAME      STATUS                    ROLES           AGE   VERSION
aa-bm01   Ready, SchedulingDisabled  control-plane   52d   v1.27.4-gke.500
ab-bm01   Ready                      control-plane   52d   v1.27.4-gke.500
ac-bm01   Ready                      control-plane   52d   v1.27.4-gke.500
      

Alternativa:

  1. Siga o runbook PLATAUTH-SSH 0001 para receber a chave SSH do nó em questão. Depois de se conectar ao nó com SSH, execute o seguinte comando:
    multipath -ll | grep fail
  2. Só prossiga para a próxima etapa se a saída for semelhante a esta:
    size=1.0G features='3 queue_if_no_path pg_init_retries 50' hwhandler='1 alua' wp=rw
    |-+- policy='service-time 0' prio=0 status=enabled
    | |- 7:0:0:7 sdad 65:208 failed faulty running
    | `- 8:0:0:7 sdae 65:224 failed faulty running
    `-+- policy='service-time 0' prio=0 status=enabled
      |- 6:0:0:7 sdac 65:192 failed faulty running
      `- 5:0:0:7 sdab 65:176 failed faulty running
  3. Execute o seguinte para corrigir o problema:
    systemctl stop multipathd
    iscsiadm -m session -R
    systemctl start multipathd
Fazer upgrade 1.9.8-1.9.21

O esgotamento do nó está bloqueado porque o pod está travado no estado de encerramento

Sintomas:

Se um upgrade de cluster do ABM ficar parado por mais de duas horas, a drenagem de nós poderá ser bloqueada.

Alternativa:

As operações a seguir usam o cluster de administrador raiz como exemplo. ${TARGET_KUBECONFIG} se refere ao "kubeconfig" do cluster de destino do ABM cujo esgotamento de nós está bloqueado. ${KUBECONFIG} se refere ao kubeconfig do cluster que gerencia o cluster de destino do ABM. Para o cluster de administrador raiz, ambos se referem ao kubeconfig do administrador raiz.

Siga estas etapas para verificar se o upgrade do cluster da ABM está travado:

  1. Verifique os nós presos na drenagem:
    kubectl --kubeconfig=${KUBECONFIG} get cluster -n root root-admin -ojsonpath={.status.controlPlaneNodePoolStatus.nodesDraining}; echo

    O resultado será assim:

    {"10.200.0.2": 2}

    Isso significa que, para o nó "10.200.0.2", dois pods estão sendo drenados.

  2. Verifique se os pods ainda estão sendo drenados do nó (chamado de ${NODE_BEING_DRAINED}):
    kubectl --kubeconfig=${KUBECONFIG} get baremetalmachine -n root ${NODE_BEING_DRAINED:?} -ojsonpath='{range .status.bareMetalMachineDrainingStatus.podsYetToDrain[?(@.kind=="Pod")]}{@.namespace}{", "}{@.name}{"\n"}{end}'
  3. O número de pods de saída precisa ser igual ao número de pods sendo esgotados informado na etapa anterior.

    Para cada pod yetToDrain listado na etapa 1, verifique o status dele:
    kubectl --kubeconfig=${TARGET_KUBECONFIG} get pods -n ${POD_NAMESPACE} ${POD_NAME} -o wide

    Se o pod estiver no estado Running ou se ele for audit-logs-loki-0 ou loki-0 no namespace obs-system e não tiver nenhum evento reclamando unable to unmount volume, exclua explicitamente o pod com um grace-period.

    kubectl --kubeconfig=${TARGET_KUBECONFIG} delete pods --grace-period=30 -n ${POD_NAMESPACE} ${POD_NAME}

  4. Em todos os outros casos em que um pod fica preso no processo de remoção, encaminhe para os serviços de plantão.
  5. Monitore se a redução do nó foi concluída.
  6. Repita a etapa 1 se outros nós estiverem presos no processo de remoção.
Fazer upgrade 1.9.6
1.9.7
1.9.8

A distribuição de artefatos falha após a anexação de assinaturas

As versões 1.9 com artefatos assinados não podem ser distribuídas porque a flag Override em DistributionPolicy está definida como "false", o que impede a distribuição quando há um artefato com o mesmo nome no registro de destino.

Sintomas:

Você pode encontrar os seguintes problemas:

  • O artefato com assinatura é enviado. O registro pode ter esta aparência:
    pushing the manifest of artifact library/private-cloud-staging/goharbor/harbor-core:sha256-755d062eb3b310fa7f1dd0505a8047f1fc91864b04fdfc5c6bd173da8ce8b87a.sig
  • Falha ao enviar o artefato. O registro pode ter esta aparência:
    failed to push manifest of artifact library/private-cloud-staging/goharbor/harbor-core:sha256-755d062eb3b310fa7f1dd0505a8047f1fc91864b04fdfc5c6bd173da8ce8b87a.sig
  • O artefato 404 não foi encontrado. O registro pode ter esta aparência:
    http status code: 404, body: {"errors":[{"code":"NOT_FOUND","message":"artifact library/private-cloud-staging/goharbor/harbor-core@sha256:755d062eb3b310fa7f1dd0505a8047f1fc91864b04fdfc5c6bd173da8ce8b87a not found"}]}
  • Falha na distribuição de artefatos.

Alternativa:

Para resolver o problema, siga estas etapas:

  1. Atualize o recurso personalizado (CR) DistributionPolicy para definir Spec.Override como true.
  2. Para acionar uma replicação novamente, siga o runbook SAR-1005.
  3. Depois que a nova execução de replicação for concluída, atualize o CR ManualDistribution execution-ids em Annotation com o ID de execução bem-sucedida.
Hardware Security Module (HSM) 1.9.9

O servidor informa que o locatário do HSM não está íntegro

Os HSMs podem informar intermitentemente ServicesNotStarted, o que pode fazer com que os servidores bare metal não fiquem íntegros e mostrem a seguinte mensagem:

"message": "failed to get master key name"

Sintomas:

Você pode encontrar os seguintes problemas:

  • Execute o comando kubectl get server:
    kubectl get server zp-aa-bm08 -n gpc-system -o jsonpath='{.status.conditions}' | jq .

    A saída pode ser semelhante a esta:

    "message": "failed to get master key name: HSMTenant gpc-system/root does not have condition \"Ready\"=true"
  • Execute o comando kubectl get HSM:
    kubectl get hsm -A

    Os serviços podem estar travados em ServicesNotStarted.

Alternativa:

Para resolver o problema, siga estas etapas para reiniciar os HSMs travados:

  1. Instale a ferramenta kstl do primeiro HSM executando os seguintes comandos:
    export HSM_NAME=`kubectl get hsm \
      -n gpc-system -o jsonpath={.items[0].metadata.name} | tr -d '"'`
    
    export HSM_MGMT_IP=$(kubectl get hsm $HSM_NAME \
        --namespace gpc-system \
        --output jsonpath="{.spec.managementNetwork.ip}")
    
    
    
    curl --insecure \
      https://$HSM_MGMT_IP/downloads/ksctl_images.zip \
      --output ksctl_images.zip
    
    
    
    mkdir -p ~/bin
    
    unzip ksctl_images.zip -d ~/bin
    
    cp ~/bin/ksctl-linux-amd64 ~/bin/ksctl
    
    export PATH=$PATH:~/bin
    
    mkdir -p $HOME/.ksctl
    
    export ADMIN_SECRET_NAME=`kubectl get secrets -n hsm-system -o json | jq .items[].metadata.name | tr -d '"' | grep "admin" | grep -v "luna-admin" | grep -v "ksadmin"`
    export ADMIN_PW=$(kubectl get secrets $ADMIN_SECRET_NAME -n hsm-system -o jsonpath="{.data.password}" | base64 -d)
    
    
    export ADMIN_SSH_SECRET_NAME=`kubectl get secrets -n hsm-system -o json | jq .items[].metadata.name | tr -d '"' | grep "ssh"`
    kubectl get secret $ADMIN_SSH_SECRET_NAME \
        --namespace=hsm-system \
        --output jsonpath='{.data.ssh-privatekey}' \
        | base64 --decode > $HOME/.ksctl/ssh-privatekey
    chmod 0600 $HOME/.ksctl/ssh-privatekey
    
    
    cat << EOF > $HOME/.ksctl/config.yaml
    KSCTL_URL: https://$HSM_MGMT_IP:443
    KSCTL_USERNAME: admin
    KSCTL_PASSWORD: '$ADMIN_PW'
    KSCTL_NOSSLVERIFY: true
    EOF
  2. Confirme se algum HSM está com problemas para reiniciar. Para cada HSM preso em ServicesNotStarted, receba o $HSM_MGMT_IP e verifique se o serviço está inativo:
    ksctl services status  --url=https://$HSM_MGMT_IP
  3. Pause todos os HSMs, clusters de HSM e locatários de HSM:
    kubectl annotate hsm --all \
      --namespace=gpc-system \
      hsm.security.private.gdc.goog/paused=true
    
    kubectl annotate hsmcluster --all \
      --namespace=gpc-system \
      hsm.security.private.gdc.goog/paused=true
    
    kubectl annotate hsmtenant --all \
      --namespace=gpc-system \
      hsm.security.private.gdc.goog/paused=true
  4. Estabeleça uma conexão SSH com o HSM com o serviço inativo:
    ssh -i $HOME/.ksctl/ssh-privatekey ksadmin@$HSM_MGMT_IP
  5. Confira se você está no HSM correto. Verifique se você estabeleceu uma conexão SSH com o $HSM_MGMT_IP correto.
  6. Reinicialize o primeiro HSM de dentro dele:
    ksadmin@ciphertrust:~ sudo reboot
  7. Aguarde o primeiro HSM ficar íntegro fora do HSM:
    watch -c ksctl services status --url=https://$HSM_MGMT_IP

    Essa etapa pode levar cerca de cinco minutos para que os HSMs sejam reiniciados.

  8. Repita essas etapas para os outros HSMs com serviços inativos.
  9. Retome os HSMs, clusters de HSM e locatários de HSM:
    kubectl annotate hsm --all \
      --namespace=gpc-system \
      hsm.security.private.gdc.goog/paused-
    
    kubectl annotate hsmcluster --all \
      --namespace=gpc-system \
      hsm.security.private.gdc.goog/paused-
    
    kubectl annotate hsmtenant --all \
      --namespace=gpc-system \
      hsm.security.private.gdc.goog/paused-
  10. Verifique se tudo está conciliado. Pode levar de cinco a dez minutos para que os HSMs sejam reconciliados.
Monitoramento 1.9.0
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
1.9.7
1.9.8
1.9.9

Os alertas do alertmanager-servicenow-webhook em clusters do sistema da organização não chegam ao ServiceNow

Sintomas:

Os alertas alertmanager-servicenow-webhook não chegam ao ServiceNow no cluster do sistema da organização para versões do GDC anteriores à 1.11.3. Os registros contêm a mensagem de erro read: connection reset by peer. Esse problema ocorre devido à falta de um rótulo para ativar o tráfego de saída. Se o webhook precisar se comunicar entre organizações, ele terá que usar o NAT de saída.

Alternativa:

É necessário ativar o tráfego de saída para alertmanager-servicenow-webhook em clusters do sistema da organização. Para resolver o problema, siga estas etapas:

  1. Defina os pré-requisitos necessários:
    • Instale a interface de linha de comando (CLI) gdcloud.
    • Consiga os caminhos para os arquivos kubeconfig dos clusters de administrador raiz e de administrador da organização. Salve os caminhos nas variáveis de ambiente ROOT_KUBECONFIG e ORG_SYSTEM_KUBECONFIG, respectivamente.
    • Peça ao administrador de segurança para conceder a você o papel de administrador de observabilidade (observability-admin) no namespace obs-system para os clusters de administrador raiz e administrador da organização.
  2. Confirme se o problema existe no seu ambiente:
    1. Receba a implantação do alertmanager-servicenow-webhook:
      kubectl --kubeconfig "${ORG_SYSTEM_KUBECONFIG:?}" get deployment alertmanager-servicenow-webhook -n obs-system
    2. Confira os registros da implantação alertmanager-servicenow-webhook:
      kubectl --kubeconfig "${ORG_SYSTEM_KUBECONFIG:?}" logs deployment/alertmanager-servicenow-webhook -n obs-system

      Se os registros contiverem a mensagem de erro read: connection reset by peer, o problema existe e você precisa continuar com as etapas desta solução alternativa.

  3. Adicione o rótulo de saída:
    1. Extraia o arquivo YAML de implantação alertmanager-servicenow-webhook atual:
      kubectl --kubeconfig "${ORG_SYSTEM_KUBECONFIG:?}" get deployment alertmanager-servicenow-webhook -o yaml \
        -n obs-system > $HOME/alertmanager-servicenow-webhook-existing-deployment.yaml && \
      kubectl --kubeconfig "${ORG_SYSTEM_KUBECONFIG:?}" get deployment alertmanager-servicenow-webhook -o yaml \
        -n obs-system > $HOME/alertmanager-servicenow-webhook-new-deployment.yaml
    2. Adicione o rótulo de saída ao arquivo YAML de implantação alertmanager-servicenow-webhook:
      yq e -i '.spec.template.metadata.labels += {"egress.networking.gke.io/enabled": "true"}' $HOME/alertmanager-servicenow-webhook-new-deployment.yaml
    3. Substitua o arquivo YAML de implantação alertmanager-servicenow-webhook pelas atualizações:
      kubectl --kubeconfig "${ORG_SYSTEM_KUBECONFIG:?}" replace -f \
      $HOME/alertmanager-servicenow-webhook-new-deployment.yaml -n obs-system

      A implantação precisa ser reiniciada automaticamente.

  4. Para verificar se o problema foi corrigido, execute novamente as etapas em Confirmar se o problema existe no seu ambiente. A mensagem de erro dos registros não pode ser exibida. Caso contrário, encaminhe para a engenharia.

Estratégia de reversão:

Se as etapas da solução alternativa falharem ou se você notar alguma perda nas métricas, retorne o arquivo YAML de implantação alertmanager-servicenow-webhook ao estado original:

kubectl --kubeconfig "${ORG_SYSTEM_KUBECONFIG:?}" replace -f \
$HOME/alertmanager-servicenow-webhook-existing-deployment.yaml -n obs-system
Fazer upgrade 1.9.10

O NodeUpgradeTask do nó ficou travado na etapa NodeMaintainCompleted por um período mais longo (mais de 30 minutos).

Sintomas:

O upgrade está parado na etapa NodeMaintain.

gpc-system                org-1-admin-control-plane-node-poolphdzg          1                          in-progress                   3h58m
Status:                                                                                                                                                                              Tasks:
Name:          zp-aa-bm06                                                                                                                                                            Task Status:  finished
Name: zp-aa-bm04
Task Status:  finished
Name: zp-aa-bm05
Task Status: in-progress
Upgrade Status: in-progress
Events: none

O nodeupgradetask do pool de nós em andamento mostra:

Status:                                                                                                                                                                              Conditions:                                                                                                                                                                            Last Transition Time:  2023-11-09T18:26:31Z 
     Message:
     Observed Generation:1
     Reason:   Succeeded
     Status: True 
     Type: PreUpgradeValidationCompleted
  Last Transition Time:  2023-11-09T18:26:31Z 
     Message:  
     Observed Generation:1  
     Reason: InProgress
     Status:  False
     Type: NodeMaintainCompleted
  Last Transition Time:  2023-11-09T18:26:31Z
    Message:                                                                                                                                                                         Observed Generation:1
    Reason:  Reconciling
    Status:   Unknown
    Type: Succeeded
│   Data IP:10.249.20.4 bm-5f3d1782
│   Start Time: 2023-11-09T18:26:31Z  Events: none  

Alternativa:

Siga estas etapas:

  1. Consiga o nome da implantação do cap-controller-manager.
    kubectl --kubeconfig ${KUBECONFIG} get deployment -n kube-system | grep cap-controller-manager
    cap-controller-manager-1.28.0-gke.435    1/1     1            1           30h
  2. Especifique o nome do cap-controller-manager (por exemplo: cap-controller-manager-1.28.0-gke.435):
    export CAP_DEPLOYMENT_NAME=

  3. Reinicie o cap-controller-manager.
    kubectl --kubeconfig ${KUBECONFIG} rollout restart deployment ${CAP_DEPLOYMENT_NAME} -n kube-system
    deployment.apps/cap-controller-manager-1.28.0-gke.435 restarted
Fazer upgrade 1.9.10

O upgrade está travado na etapa de verificação pós-voo AdminClusterHealth.

Sintomas:

O upgrade está travado na etapa de verificação pós-voo AdminClusterHealth.

Events:
Type     Reason            Age                   From                 Message 
----     ------            ----                  ----                 -------
Warning  ReconcileBackoff  70s (x33 over 4h16m)  OrganizationUpgrade  admin cluster is not ready for org root

O objeto da organização mostra:

NAMESPACE         NAME          READY
gpc-system       org-1           True
gpc-system        root           False

Alternativa:

Siga estas etapas:

Use o comando a seguir para pular as verificações prévias:

kubectl delete organizationupgrade name -n gpc-system && kubectl annotate -n gpc-system organization name upgrade.private.gdc.goog/skip-preflight-check=ok

Fazer upgrade 1.9.9

O NodeUpgradeTask pode ter a condição failed to monitor failover registry recreation: failed to monitor job: job not complete

Sintomas:

O NodeUpgradeTask pode ter a condição failed to monitor failover registry recreation: failed to monitor job: job not complete que impede a conclusão de uma tarefa.

Alternativa:

Para resolver o problema, reinicie o job:

  1. Exclua o job chamado create-failover-registry-*** com conclusão "0/1".
  2. Exclua a anotação failover-registry-creation-job-name do objeto do servidor que está sendo atualizado.

O controlador cria o job automaticamente de novo.

Fazer upgrade 1.9.20

O nó falha no job backup-ipsec-for-upgrade-bm.

Sintomas:

O nó falha no job backup-ipsec-for-upgrade-bm.

I0512 01:05:55.949814       7 main.go:24] BuildDate: 2023-04-01T15:48:57Z
I0512 01:05:55.949920       7 main.go:25] Version: 1.9.2-gdch.135.dirty
"

Alternativa:

Exclua o job `backup-ipsec-for-upgrade-bm` e aguarde a recriação dele.

Google Distributed Cloud 1.9.9

A criação da organização pode ficar travada porque o pool de nós do plano de controle não fica pronto a tempo.

Sintomas:

Um pool de nós do plano de controle não fica pronto devido à falha na inicialização do cluster etcd. Você pode encontrar o seguinte problema:

--- FAIL: TestPlan (27563.26s)
    --- FAIL: TestPlan/TestMTSystemClusterHealth (3445.24s)
        k8s_mt_system_cluster_healthcheck_test.go:149: FATAL FLAKE: TestMTSystemClusterHealth: system cluster did not become ready in time: NodePool org-1-system-cluster/control-plane-node-pool didn't get ready: NodePool "control-plane-node-pool" is not ready
            Error Routing:
            {
              "Name": "NODEPOOL_NOT_READY_ERR",
              "Description": "NodePool is not ready",
              "OwnerTeam": "Cluster Management",
              "OwnerLDAP": "",
              "TrackingBug""
            }
FAIL

Alternativa:

Para resolver o problema, siga estas etapas:

  1. Verifique se a criação do cluster está travada no job de inicialização da máquina.
    A tarefa kubeadm join falhou devido a:
    error execution phase control-plane-join/etcd: error creating local etcd static pod manifest file: etcdserver: re-configuration failed due to not enough started members
    A tarefa kubeadm reset falhou devido a:
    panic: runtime error: invalid memory address or nil pointer dereference
  2. Use SSH para se conectar a um nó do painel de controle em funcionamento.
  3. Execute o comando etcdctl para limpar os dados obsoletos.
  4. Verifique a assinatura do etcd:
    # etcdctl --key=/etc/kubernetes/pki/etcd/peer.key --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/peer.crt member list
    5feb7ac839625038, started, vm-72fed95a, https://10.252.164.11:2380, https://10.252.164.11:2379, false
    99f09f145a74cb15, started, vm-8a5bc966, https://10.252.164.12:2380, https://10.252.164.12:2379, false
    bd1949bcb70e2cb5, unstarted, , https://10.252.164.10:2380, , false
  5. Remova a assinatura obsoleta:
    # etcdctl --key=/etc/kubernetes/pki/etcd/peer.key --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/peer.crt member remove bd1949bcb70e2cb5
    Member bd1949bcb70e2cb5 removed from cluster  9d70e2a69debf2f
Backup e restauração de VM 1.9.0
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
1.9.7
1.9.8
1.9.9
1.9.10
1.9.11

As configurações de webhook da VM impedem que os usuários iniciem procedimentos de backup e restauração de VMs

Sintomas:

O processo de backup e restauração de VMs não pode ser iniciado pelos usuários devido a configurações inadequadas de controle de acesso baseado em papéis (RBAC) e de esquema no gerenciador de VMs.
Os nomes dos planos de backup de VM não podem ter mais de 63 caracteres. Por exemplo, você pode ver esta mensagem de erro:

Internal error occurred: failed calling webhook
"vvirtualmachinebackupplantemplates.virtualmachine.gdc.goog":
failed to call webhook: Post "https://vmm-vm-controller-webhooks.vm-system.svc:443/validate-virtualmachine-gdc-goog-v1-virtualmachinebackupplantemplate?timeout=10s":
context deadline exceeded

Alternativa:

Os nomes dos planos de backup de VM são uma concatenação do nome VirtualMachineBackupPlanTemplate, do tipo de recurso (que é vm ou vm-disk) e do nome desse recurso. Essa string concatenada precisa ter menos de 63 caracteres.
Para isso, mantenha os nomes desses recursos curtos ao criá-los. Para detalhes sobre a criação desses recursos, consulte Criar e iniciar uma instância de VM e Criar um plano de backup para VMs.

Fazer upgrade 1.9.9

Falha no upgrade do SO do nó devido a um erro de modelo

Sintomas:

Um upgrade falha no job de backup ipsec com o seguinte erro de modelo:

 
      "msg": "An unhandled exception occurred while templating '{'changed': True, 'stdout': 'connections {\\n  # A connection id defined for this specific connection\\n  pol_client {\\n    children {\\n      pol_cli

Alternativa:

Siga estas etapas:

  1. Faça login no nó em que a tarefa de upgrade falha.

  2. Salve o swanctl.conf como backup.

  3. Remova a linha com chaves no arquivo /etc/swanctl/swanctl.conf.

  4. Exclua o job backup-ipsec-for-upgrade com falha e aguarde a recriação. Depois, o job subsequente será concluído.

  5. Adicione a linha removida na etapa 3 de volta a /etc/swanctl/swanctl.conf.

Plataforma do nó 1.9.6
1.9.7
1.9.8
1.9.9

O nó bare metal do administrador root rejeita o tráfego de rede de entrada após uma atualização de firmware

Quando um upgrade de firmware é iniciado no cluster de administrador raiz, depois que um dos nós conclui o upgrade, ele parece estar travado.

Sintomas:

  • O nodeupgradetask está travado na etapa NodeResumeCompleted.
  • O job machine-init falha, e o registro mostra que o kubeadm join falhou.
  • Não é possível estabelecer uma conexão SSH com o nó usando o endereço IP do plano de dados.

O problema é causado porque o nó atualizado não aceita mais o tráfego de rede de entrada.

Alternativa:

  1. Inspecione os registros de job/nodeupgradetask com falha para anotar os endereços IP e descobrir qual nó tem o problema.
  2. Reinicie o pod anetd-client do nó afetado.
  3. Verifique a conexão SSH no IP do plano de dados com o nó afetado.

Etapas opcionais para investigação mais detalhada:

  1. Coloque um shell em um contêiner de agente do cilium de qualquer um dos pods anetd em funcionamento.
  2. Execute o cilium-bugtool e aguarde cerca de 10 segundos. A ferramenta salva registros no diretório /var/log/network/policy_action.log.
  3. Procure deny para saber se o tráfego está sendo negado:
    grep -r "deny" /var/log/network/ to
    Observe quais servidores estão sendo negados, possivelmente os nós bare metal do administrador raiz.
Fazer upgrade 1.9.13
1.9.14
1.9.15
1.9.16
1.9.17
1.9.18
1.9.19

Falha no upgrade do complemento atat-webhooks

Sintomas:

  • Um upgrade falha no complemento atat-webhooks.
  • Os rótulos expirados do complemento ATAT podem causar falhas nos upgrades da organização. Exemplo:
     Invalid value: "TO1234": The current date 2024-05-06 is not within the valid range of this TaskOrder: 2023-12-16 - 2024-04-16.
  • Alternativa:

    Os usuários precisam atualizar os rótulos de complemento de ATAT do portfólio. Siga o runbook ATAT-R0003 para resolver o problema.

Fazer upgrade 1.9.13
1.9.14
1.9.15
1.9.16
1.9.17
1.9.18
1.9.19

Falha no upgrade do SO do nó em Bare Metal da organização locatária

Sintomas:

  • O upgrade do SO do nó em bare metal da organização do locatário falha ao fazer upgrade da versão 1.9.12 para a 1.9.13. A seguinte mensagem aparecerá:
     
           Reason:                Succeeded                                                                                                                          
           Status:                True                                                                                                                                
           Type:                  NodeMaintainCompleted                                                                                                              
           Last Transition Time:  2024-05-06T18:25:20Z                                                                                                               
           Message:               the ssh cert rotation job is still in progress                                                                                     
           Observed Generation:   1                                                                                                                                   
           Reason:                ReconcileBackoff                                                                                                                   
           Status:                Unknown                                                                                                                           
           Type:                  Succeeded                                                                                                                         
           Last Transition Time:  2024-05-06T18:27:42Z 
  • SSH generation fails. The following message appears:
      
           "tasks": [                                                                                                                                
                     {                                                                                                                                              
                         "hosts": {                                                                                                                               
                             "10.248.4.72": {                                                                                                                       
                                 "action": "gather_facts",                                                                                                          
                                 "changed": false,                                                                                                                  
                                 "msg": "Failed to connect to the host via ssh: Certificate invalid: name is not a listed principal\r\nHost key verification failed 
     .",                                                                                                                                                            
                                 "unreachable": true                                                                                                                
                             }                                                                                                                                      
                         },                                                                                                                                         
                         "task": {                                                                                                                                  
                             "duration": {                                                                                                                          
                                 "end": "2024-05-06T19:47:11.284055Z",                                                                                              
                                 "start": "2024-05-06T19:47:11.146536Z"                                                                                             
                             },                                                                                                                                     
                             "id": "98f2b32d-e15c-fe27-2225-00000000001c",                                                                                          
                             "name": "Gathering Facts"                                                                                                              
                         }                                                                                                                                          
                     }  ]
  • Alternativa:

    1. Remova a anotação cluster.private.gdc.goog/ssh-trusted-ca-versions no CR do administrador raiz e do administrador da organização.
    2. Exclua os jobs do Ansible com falha. Novos jobs são criados automaticamente porque a anotação cluster.private.gdc.goog/host-key-rotation-in-progress está marcada como "true" no CR do servidor.
    3. Após a rotação, a anotação cluster.private.gdc.goog/ssh-trusted-ca-versions é adicionada de volta ao CR do servidor.
Nó, upgrade 1.9.*

Os pods em máquinas bare metal podem mostrar o status CrashLoopBackOff devido a regras do cilium excluídas

Sintomas:

Após o upgrade, os pods em alguns nós bare metal ficam travados no estado CrashLoopBackOff, e iptables -L -v -n | grep CILIUM no nó retorna um resultado vazio.

Alternativa:

Para resolver o problema, siga estas etapas:

  1. Execute este comando: crictl pods --name anetd -o json | jq --raw-output '.items[].id' | xargs crictl rmp --force.
  2. Execute iptables -L -v -n | grep CILIUM novamente e verifique se há saída.
Logging 1.9.14
1.9.15

O pod audit-logs-loki-0 pode mostrar o status CrashLoopBackOff devido a um erro do Loki

Sintomas:

O pod audit-logs-loki-0 está no estado CrashLoopBackOff.

Verifique o status do pod:

      kubectl --kubeconfig $SYSTEM_KUBECONFIG get pod -n obs-system audit-logs-loki-0
      

em que SYSTEM_KUBECONFIG é o caminho para o arquivo kubeconfig.

O erro do Loki aparece na saída a seguir, em que CrashLoopBackOff é o status:

      NAME                READY   STATUS             RESTARTS       AGE
      audit-logs-loki-0   1/2     CrashLoopBackOff   9 (4m6s ago)   25m
      

Alternativa:

Para resolver o problema, siga estas etapas:

  1. Exporte o caminho para o arquivo kubeconfig para uma variável de ambiente chamada SYSTEM_KUBECONFIG.
  2. Reduza o operador Logmon:
          kubectl scale deployment -n obs-system logmon-operator --replicas 0
          
  3. Reduza a escala vertical dos recursos do Loki:
          kubectl scale loki -n obs-system --replicas 0
          kubectl scale statefulset audit-logs-loki -n obs-system --replicas 0
          
  4. Exclua as reivindicações de volume permanente (PVCs) audit-logs-loki-storage-audit-logs-loki-0 e loki-storage-loki-0.
  5. Exclua os volumes permanentes (PVs) obs-system/loki-storage-loki-0 e obs-system/audit-logs-loki-storage-audit-logs-loki-0.
  6. Faça o escalonamento vertical do operador Logmon:
          kubectl scale deployment -n obs-system logmon-operator --replicas 1
          
  7. Siga as etapas para atualizar a configuração de geração de registros da versão 1.9.
  8. Verifique se o pod audit-logs-loki-0 está em execução:
          kubectl --kubeconfig $SYSTEM_KUBECONFIG get pod -n obs-system audit-logs-loki-0
          

    O status Running precisa aparecer na saída, como no exemplo a seguir:

          NAME                READY   STATUS    RESTARTS   AGE
          audit-logs-loki-0   2/2     Running   0          15h
          
Infraestrutura como código 1.9.16

Falha na instalação do GitLab

Sintomas:

Ao fazer upgrade para a versão 1.9.16, a instalação do complemento do GitLab falha. Você pode encontrar um erro como este:

Error occurred during addon installation: failed to upgrade chart: an error occurred while rolling back the release. original upgr │
│ ade error: timed out waiting for the condition: deployments/gitlab-sidekiq-all-in-1-v2: release gitlab failed: client rate limiter Wait returned an error: ra │
│ te: Wait(n=1) would exceed context deadline

O pod do postgres, como gpc-system/gitlab-postgresql-0, está em um estado de encerramento.

Alternativa:

  1. Exclua à força o pod do postgres que está travado em um estado de encerramento:
    kubectl delete pod POD_NAME --grace-period=0 --force --namespace NAMESPACE 
  2. Verifique se o pod do postgres é recriado após a exclusão.
Gerenciamento de identidade e acesso 1.9.19
1.9.20

Falha na autenticação ao acessar o console

Sintomas:

Ao fazer upgrade da versão 1.9.18 e tentar acessar o console do GDC, talvez você veja a seguinte mensagem:

Authentication failed, please contact your system administrator

Alternativa:

  1. Acesse a CA necessária:
    export KUBECONFIG=ORG_ADMIN_KUBECONFIG
    kubectl get secret fakeoidcprovider-https -n istio-system -o jsonpath='{.data.ca\.crt}'
  2. Abra o arquivo de configuração do cliente para edição:
    kubectl edit clientconfig -n kube-public default
  3. Localize o certificateAuthorityData na configuração do cliente e atualize a CA necessária usando o seguinte caminho: spec > authentication > (fake-oidc-provider) > oidc > certificateAuthorityData