Problemas conhecidos do Google Distributed Cloud air-gapped 1.9.x

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

O iLO não consegue obter ocasionalmente a chave do HSM

Sintomas:

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

  • Existem pods com falhas com o nome `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 usar o SSH no pod devido a uma chave inválida.

Solução alternativa:

Para resolver o problema, siga os passos abaixo:

  1. Aceda à IU do iLO > Informações > Diagnósticos > Repor para repor o iLO.

  2. Se, durante a reposição, o iLO apresentar que o servidor está no autoteste de arranque (POST), reinicie o fluxo de aprovisionamento:

    1. Se a instalação do cluster de administrador tiver sido concluída:

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

      1. Obtenha a chave SSH pública atual (tenha em atenção que esta pode ter sido alterada e, por isso, 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
               

        Add IRONIC_RAMDISK_SSH_KEY: \

      3. Reiniciar ironic:

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

      1. Faça uma cópia de segurança do bmc-credential-$SERVER, uma vez que a eliminação do bmh também elimina o segredo

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

      3. Elimine o BareMetalHost:

        kubectl -n gpc-system delete bmh/$SERVER
               
      4. Obtenha o segredo bmc-credentials-$SERVER ou a cópia de segurança anterior de cellcfg e aplique-o.

    4. Dizer ao servidor para fazer algo diferente.

      1. Para remover o estado de BMH em cache:

        kubectl -n gpc-system annotate server/$SERVER baremetalhost.metal3.io/status-
  3. Aguarde até o servidor ser aprovisionado.

  4. Veja como os objetos do BMH são criados.

  5. Pode ter de eliminar tarefas de encriptação para as acionar novamente.

Operações 1.9.0
1.9.1
1.9.2

A utilização da classe de armazenamento standard-block pode impedir o início ou o reinício de máquinas virtuais (VMs)

Sintomas:

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

Solução alternativa:

Para resolver o problema, siga os passos abaixo:

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

    kubectl --kubeconfig SYSTEM_KUBECONFIG get gvm -n PROJECT

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

    PROJECT é o projeto da GDC no qual a VM reside.

    Opcional: obtenha detalhes adicionais do estado:

    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. Elimine a VM:

    kubectl --kubeconfig SYSTEM_KUBECONFIG delete gvm VM_NAME -n NAMESPACE_NAME

    NAMESPACE_NAME é o nome do seu espaço de nomes.

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

    kubectl --kubeconfig SYSTEM_KUBECONFIG get gvm VM_NAME -n PROJECT

    Um resultado semelhante ao seguinte confirma o êxito:

    Error from server (NotFound): virtualmachines.vm.cluster.gke.io "VM_NAME" not found
  4. Elimine 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 certifique-se de que todos os discos estão listados.

  6. Verifique se a eliminaçã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 êxito:

          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 uma atualização da versão 1.9.1 para a 1.9.2, as operações no Artifact Registry podem falhar com erros não autorizados

Sintomas:

gdcloud system container-registry load-oci falha com erros. Se executar novamente o comando, este é executado durante diferentes períodos e falha em diferentes pontos do processo, como o envio ou a reetiquetagem, mas com erros semelhantes.

Solução alternativa:

Para resolver o problema, siga os passos abaixo:

  1. Exporte o KUBECONFIG para o kubeconfig do administrador raiz:

    export KUBECONFIG=~/release/root-admin/root-admin-kubeconfig
  2. Emita este comando para reduzir a escala de deployment/root-admin-tftp-manager-controller para 0 réplicas:

    kubectl scale --replicas=0 deployment/root-admin-tftp-manager-controller -n gpc-system
  3. Realize as operações que estavam a falhar.
  4. Aumente a escala de deployment/root-admin-tftp-manager-controller para 1 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 etiquetas de seletor de suplementos para o cluster de administrador raiz

Sintomas:

gdcloud system container-registry load-oci falha com erros. Se executar novamente o comando, este é executado durante diferentes períodos e falha em diferentes pontos do processo, como o envio ou a reetiquetagem, mas com erros semelhantes.

Solução alternativa:

Ignorar a mensagem com segurança. Desaparece após algum tempo.

Operações 1.9.2

Não é possível obter registos de um pod devido a uma imagem em falta

Solução alternativa:

Para resolver o problema, reinicie o pod que tem o problema.

Operações 1.9.0
1.9.1
1.9.2

Um servidor está bloqueado no estado available e a respetiva tarefa de configuração de encriptação continua a falhar devido a um erro de chave SSH

Sintomas:

O estado da condição Server's Ready é "Falso" e a mensagem contém "job server-encrypt-and-create-logical-drive-... failed with reason ... and message ...". Os registos da tarefa com falha contêm "Failed to connect to the host via ssh ... Permission denied (publickey)."

Solução alternativa:

Para resolver o problema, siga os passos abaixo:

  1. Obtenha a chave SSH pública atual do cluster de administrador principal:

    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. E adicione ou substitua a chave IRONIC_RAMDISK_SSH_KEY existente:

    <SSH public key>
  4. Reinicie a implementaçã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 aprovisionamento de um cluster de utilizadores através da GUI fica bloqueado

Solução alternativa:

Para evitar o problema de escassez de endereços IP, defina o tamanho do CIDR do pod como /21 ou superior quando criar um cluster de utilizadores de alta disponibilidade.

Instalação 1.9.2

No arranque, o Google Distributed Cloud air-gapped 1.14.2 não devolve métricas do Cortex

Solução alternativa:

Para resolver o problema, reinicie os pods.

Consulte o runbook MON-R0001 para ver detalhes.

Autenticação da plataforma 1.9.13

As organizações recém-criadas não conseguem aceder aos IPs de dados do servidor

Sintomas:

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

Solução alternativa:

1. Verifique se o BGP VRF está inativo em aggswitch.

2. Verifique se existem alterações não comprometidas para a nova configuração de preparação na firewall.

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

Atualizar 1.9.1
1.9.2
1.9.11

Durante a atualização do SO do nó, o servidor fica bloqueado na anulação do aprovisionamento porque o URL boot.ipxe é inválido

Sintomas:

Server está .status.bareMetalHostStatus.provisionState preso(a) em deprovisioning há mais de 20 minutos.

O endereço IP de gestão do servidor que está a ser atualizado está incluído no resultado 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

Solução alternativa:

Para resolver o problema, execute o seguinte comando:

kubectl -n gpc-system rollout restart deploy/root-admin-controller
Atualizar 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 a atualização do SO do nó, um nó falha na tarefa machine-init

Sintomas:

Uma tarefa de atualização em NodeUpgrade permanece por concluir durante mais de 2 horas.

Uma NodeUpgradeTask correspondente fica pendente na condição NodeResumeCompleted durante mais de 1 hora.

bm-system-x.x.x.x-machine-init tarefas permanecem por concluir durante muito tempo. x.x.x.x é a morada do nó.

Solução alternativa:

Para encontrar o endereço de um nó não saudável, consulte o x.x.x.x do trabalho bm-system-x.x.x.x-machine-init pendente.

Para encontrar um nó do plano de controlo em bom estado para o nó em mau estado, siga estes passos:

  1. Encontre o nodepool do nó não saudável.
  2. Verifique o conjunto de nós do plano de controlo no mesmo cluster desse nó não saudável e selecione um endereço do .spec.address desse conjunto de nós do plano de controlo.

    1. No bootstrapper ou no 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 controlo saudável, 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
Atualizar 1.9.1
1.9.2

A atualização da versão 1.9.0 para a 1.9.1 está bloqueada porque a instalação do suplemento ods-fleet falhou

Sintomas:

O pod do operador de frota do ODS está em ciclo de falhas.

Para verificar o estado do pod, execute o seguinte comando:

ko get pods -n ods-fleet-operator

É apresentado um erro de eleição de líder semelhante ao seguinte nos registos 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 registos do ODS Fleet Operator, execute:

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

É apresentada a seguinte mensagem:

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.

Solução alternativa:

Para editar a implementação, execute o seguinte comando:

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

Certifique-se de que edita o campo resources do contentor manager da seguinte forma:

Antes:

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

Depois:

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

O suplemento vm-runtime está bloqueado durante a atualização do gpu-org-system-cluster de 1.9.1 para 1.9.2 porque os pods kubevm-gpu-driver-daemonset estão no estado CrashLoopBackOff

Sintomas:

É apresentada a seguinte mensagem de erro:

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

Solução alternativa:

Para corrigir o problema, siga estes passos:

  1. Inicie sessão em todos os nós de GPU aprovisionados:

    # 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. Elimine o pod kubevm-gpu-driver-daemonset bloqueado. Esta ação reinicia a instalação:

    # kug get pods -A | grep gpu | grep Init
  4. (Opcional) Se a instalação do suplemento excedeu o tempo limite, reinicie a instalação do suplemento:

    ku delete job vm-runtime-readiness -n gpu-org-system-cluster
Atualizar 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 ajustar o volume.

Verifique se o pod não está a conseguir associar o volume. Os exemplos seguintes usam o kubeconfig do cluster do sistema:

  • Descreva o pod:

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

    Se o pod estiver a falhar, é apresentado um resultado semelhante ao seguinte exemplo:

    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ó para o qual o pod está a falhar:

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

    Obtém um resultado semelhante ao seguinte 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]
  • Obtenha o pod netapp-trident no mesmo nó para o qual o pod gpcbackup-agent-0 falhou:

    kos get pod -o wide -n netapp-trident

    Obtém um resultado semelhante ao seguinte exemplo:

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

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

    Obtém um resultado semelhante ao seguinte 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

Solução alternativa:

Para resolver o problema, siga estes passos:

  1. Obtenha o nome do InventoryMachine:

    export ROOT_ADMIN_KUBECONFIG=[path to the root admin kubeconfig]
    
    export INV_MACH=vm-e2b9792a
  2. Confirme que o emprego 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}"

    Obtém um resultado semelhante ao seguinte:

    NAME                               COMPLETIONS   DURATION   AGE
    storage-ipsec-config-vm-e2b9792a   1/1           17s        19d
  3. Elimine a tarefa:

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

    Obtém um resultado semelhante ao seguinte:

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

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

    Obtém um resultado semelhante ao seguinte:

    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. Elimine o StorageEncryptionConnection:

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

    Obtém um resultado semelhante ao seguinte:

    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 que a nova tarefa foi recriada e executada com êxito:

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

    Obtém um resultado semelhante ao seguinte:

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

O nó zp-aa-bm08 do cluster de administrador principal apresenta um erro de aprovisionamento e não pode ser concluído porque o registo não está em bom estado.

Sintomas:

Um pod de registo do Harbor apresenta uma mensagem de erro semelhante à seguinte:

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

Solução alternativa:

Para resolver o problema, siga estes passos:

  1. Verifique a reivindicação de volume persistente (PVC) do registo do Harbor e tome nota do nome do volume da PVC:

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

    kubectl get volumeattachment | grep [volume-name]
  3. Se a associação de volume estiver num nó diferente do pod de registo do Harbor, remova o volumeattachment:

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

Agora, o registo do Harbor no cluster de administrador raiz tem de estar em bom estado e a atualização do nó é concluída com êxito.

Instalação 1.9.2
1.9.3
1.9.4
1.9.5

Um cluster de utilizadores não fica pronto a tempo

Sintomas:

É apresentada a seguinte mensagem de erro:

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

Um registo de pod contém o seguinte:

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

A versão do CoreDNS é 1.8.6.

Solução alternativa:

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

Assim que o KUBECONFIG estiver definido para o cluster correto, execute o seguinte comando:

kubectl rollout restart deployment coredns -n kube-system

O nome do cluster de utilizadores faz parte da mensagem de erro.

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

Se faltarem ficheiros kubeconfig, gere-os da seguinte forma:

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
Atualizar 1.9.2
1.9.3

Não é possível atualizar o estado de OrganizationUpgrade

Sintomas:

É apresentada a seguinte mensagem de erro:

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]]

Normalmente, este problema é temporário e deve ficar resolvido.

Instalação 1.9.3

A instalação do suplemento falha

A instalação de um suplemento 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.

Solução alternativa:

A instalação do suplemento pode falhar devido ao facto de os nós estarem no estado NotReady. Verifique se os nós estão no estado NotReady através do seguinte comando:

kubectl get nodes

Obtenha detalhes do nó que se encontra no estado NotReady:

$ kubectl describe node  | grep PodCIDRs

Para um cluster com este problema, um nó não tem PodCIDRs atribuídos, 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 implementação ipam-controller no cluster afetado:

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

Uma atualização do cluster de utilizadores não chama webhooks

Uma atualização 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.

Solução alternativa:

Atualize manualmente o campo abm-overrides's do AddOnSet <code.spec.addonsettemplateref< code="" dir="ltr" translate="no"> para o nome do AddOnSetTemplate da versão pretendida no mesmo espaço de nomes que o cluster a ser atualizado.</code.spec.addonsettemplateref<>

Instalação 1.9.3

Um controlador de administrador da frota fica bloqueado num ciclo 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 registos

Sintomas:

  1. Um controlador de administrador da frota não fica pronto, o que faz com que o teste TestCreateFleetAdminCluster ou TestSimOverlayCreateFleetAdminCluster falhe.

  2. O controlador do administrador da frota está bloqueado num ciclo de falhas.

  3. O seguinte erro encontra-se nos registos do controlador de administração da frota: Fleet admin controller manager stopped: failed to wait for auditloggingtarget caches to sync: timed out waiting for cache to be synced.

Solução alternativa:

  1. Implemente o LogmonCRD no cluster de administrador da organização.

  2. Reinicie o controlador de administração da frota.

Instalação 1.9.3

Um cluster do sistema não fica pronto a tempo

Sintomas:

É apresentada a seguinte mensagem de erro:

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] [...]

Solução alternativa:

Para resolver o problema, reinicie a implementaçã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

Nota: execute o seguinte comando antes de reiniciar a implementação e o daemonset para apontar para o cluster correto:

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

Um cluster de utilizadores com três nós de trabalho n2-standard-4 tem recursos de CPU insuficientes para a atualização

Sintomas:

Não é possível agendar um pod devido a CPU insuficiente.

Solução alternativa:

  1. Para um cluster de utilizadores existente criado com n2-standard-4 nós de trabalho, adicione um novo NodePool n2-standard-8 com três nós a este cluster antes da atualização.

  2. Para novos clusters de utilizadores, crie-os com um n2-standard-8 NodePool com o mínimo de três nós. Consulte o artigo Crie um cluster de utilizadores para cargas de trabalho de contentores para ver mais detalhes.

Operações 1.9.0
1.9.2
1.9.3
1.9.4

A IU permite-lhe selecionar configurações de GPU para tipo de VM incompatíveis

Sintomas:

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

Solução alternativa:

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

Os tamanhos de memória da VM superiores a 32 GB suscetíveis de cálculo incorreto da sobrecarga do QEMU requerem substituições do tamanho da memória

Sintomas:

Para pools de nós com instâncias de VM com tamanhos de memória superiores a 32 GB, a instância de VM pode parecer estar em execução, parar e voltar a ser executada; possivelmente, repetindo esta sequência. Eventualmente, é gerado um erro OOMKilled de falta de memória e a instância falha.
Seguem-se os três tipos de VMs 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

Solução alternativa:

  1. Valide 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 qualquer um dos três tipos indicados edite o configmap para incluir uma substituição de memória:
    kubectl --kubeconfig=SYSTEM_CLUSTER_KUBECONFIG \
          edit configmap NAME -n NAMESPACE
  4. Adicione uma secção memory.guest e resources.overcommitGuestOverhead , como pode ver no exemplo seguinte:
          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, altere 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 este processo para todas as VMs afetadas.
Atualizar 1.9.4

Um cliente SSH não pode atribuir um pseudoterminal

Sintomas:

Uma tarefa bm-system-* fica bloqueada no passo Gathering Facts. Quando tenta executar o SSH manualmente no servidor, é apresentado o erro PTY allocation request failed on channel 0.

Solução alternativa:

Reinicie o servidor através de uma das seguintes 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. IU do iLO

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

Atualizar 1.9.4
1.9.10

A atualização do nó não faz uma cópia de segurança da configuração do IPsec

Sintomas:

Uma atualização falha devido à falha da tarefa backup-ipsec-*.

Solução alternativa:

Siga os passos seguintes:

  1. Encontre as chaves pré-partilhadas no espaço de nomes gpc-system no cluster de administração da organização. As chaves têm o nome <node-name>-pre-shared-key.

    Para obter o hash da chave do YAML da chave pré-partilhada 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 }'.

    Tenha em atenção que tem de obter o hash da chave de um nó que não seja o nó onde a atualização do IPsec falhou.

  2. Aplique o hash desta chave pré-partilhada ao segredo da chave pré-partilhada do nó com falhas no gpc-system no cluster de administrador da organização.

  3. Elimine o objeto storageencryptionconnection que tem o mesmo nome que o nó com falhas no cluster de administrador raiz.

  4. Elimine a tarefa storage-ipsec-config-<node-name> associada no cluster de administrador da organização.

  5. Elimine a tarefa de atualização backup-ipsec-for-upgrade-<node-name> associada.

Atualizar 1.9.4

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

Sintomas:

A atualização dos clusters da organização demora muito tempo.

Solução alternativa:

Aguarde que o ClamAV seja encerrado naturalmente.

Atualizar 1.9.5

O harbor-cert-secret tem um CA diferente do CA "do lado do cliente"

Sintomas:

São apresentados diferentes certificados:

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-----

Solução alternativa:

Nota: rode o certificado harbor-harbor-https antes de seguir os passos abaixo.

Siga os passos seguintes:

Existem cópias dos dados do certificado armazenadas em segredos no cluster. Após rodar o certificado harbor-harbor-https, também tem de atualizar as cópias secretas.

  1. Obtenha 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 do segredo do certificado do Artifact Registry em cada espaço de nomes.

    Obtenha 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 segredo do certificado do Artifact Registry em cada espaço de nomes.

    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 tem de atualizar uma cópia secreta do certificado com um nome fixo denominada ca-cert-in-cluster-registry no espaço de nomes 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 espaço de nomes 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 estiver a rodar certificados para o cluster org-admin, também tem de atualizar as cópias secretas dos certificados existentes no cluster root-admin.
    Obtenha todos os espaços de nomes 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 segredo do certificado do Artifact Registry em cada espaço de nomes.

    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. .
Atualizar 1.10.0
1.10.1

A atualização de uma organização para a versão 1.10.x a partir da versão 1.9.1 ou anterior pode fazer com que os pods kube-apiserver não sejam apresentados durante uma atualização

Sintomas:

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

  1. Identifique o nó onde a atualização está bloqueada:
    kubectl get po -n kube-system -l component=kube-apiserver
          

    O resultado tem o seguinte aspeto:

    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 ligação SSH ao nó que acabou de ser atualizado:
    root@ah-ac-bm01:~# crictl ps -a | grep kube-api
         

    O estado do contentor é apresentado 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 registos do pod Exited:
    crictl logs f1771b8aad929

    O resultado tem o seguinte aspeto:

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

    O sinalizador está configurado no ficheiro /etc/kubernetes/manifests/kube-apiserver.yaml:

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

Solução alternativa:

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

  1. Faça uma cópia de segurança do ficheiro:
    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 que a linha é removida:
    root@ah-ac-bm01:~# diff /etc/kubernetes/manifests/kube-apiserver.yaml ~/kube-apiserver.yaml.bak
    35a36
    >     - --feature-gates=JobTrackingWithFinalizers=false
           
  4. Indique o contentor kube-apiserver:
    root@ah-ac-bm01:~# crictl ps --name kube-apiserver
           
    O kubelet deteta automaticamente a alteração e inicia o pod kube-apiserver:
    CONTAINER           IMAGE               CREATED             STATE               NAME                ATTEMPT             POD ID              POD
    e1344008dfed9       bd6ed897ecfe2       12 hours ago        Running    
  5. Repita estes passos para todos os nós afetados.
Atualizar 1.9.2
1.9.3
1.9.3
1.9.4
1.9.5
1.9.6

kube-state-metrics ciclos de falhas de implementação

Sintomas:

A implementação do kube-state-metrics entra em ciclos de falhas numa organização após a rotação de certificados. Este problema pode causar uma perda de dados de monitorização.

Atualizar 1.9.6

Nó de trabalho desequilibrado após a atualização

Sintomas:

Após a atualização, o nó de trabalho está desequilibrado.

Solução alternativa:

Equilibre manualmente o nó trabalhador:

  • Para uma carga de trabalho de pods, elimine os pods na implementação.
  • Para uma carga de trabalho de VM, elimine o virt-launcher sem modificar o objeto GVM do plano de controlo.
Atualizar 1.9.6

O plugin do dispositivo GPU não é iniciado

Quando atualiza da versão 1.9.5 para a 1.9.6, existe a possibilidade de o plug-in do dispositivo GPU não poder ser iniciado.

Sintomas:

Pode ver o seguinte erro que bloqueia a disponibilidade do tempo de execução da VM e o processo de atualização:

Failed to initialize NVML: could not load NVML library
      

Solução alternativa:

  1. Verifique se o nvidia-container-runtime está corretamente configurado no nó:
    1. Estabeleça uma ligação SSH ao nó que suspeita ter um problema.
    2. Obtenha a lista de pods:
      crictl pods
    3. Inspeção dos pods:
      crictl inspectp $pod_hash | grep runtimeOption -A1
      Se o resultado for semelhante a este, o nó está configurado corretamente. Se o resultado não for semelhante ao seguinte, significa que o nvidia-container-runtime não está 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
Atualizar 1.9.7

NodeUpgrade para a atualização de firmware do servidor fica bloqueada no estado in process

Quando atualiza para a versão 1.9.7, o firmware do node pool do cluster de administrador raiz permanece no estado in process.

Sintomas:

  • Para o lado NodeUpgrade, consulte a solução alternativa Tempo limite do servidor de artefactos:
    • NodeUpgrade está bloqueado no estado in process e a condição para NodeROMFirmwareUpgradeCompleted no estado Nodeupgradetask nunca é concluída.
    • O URL em spec.firmware.firmwarePackages.url no objeto NodeUpgrade pode ficar bloqueado quando estiver a ser associado, 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 artefactos não autorizado:
    • No registo do servidor de artefactos, pode ser apresentado um erro relacionado com o acesso não autorizado a um repositório: 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 tem de ter Spec.harborProjectConfig.accessLevel como private:
      kubectl get --kubeconfig ${KUBECONFIG} HarborProject -n gpc-system gdch-hpe-firmware -o yaml

Solução alternativa:

Redes inferiores 1.9.0 - 1.9.6

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

Sintomas:

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

Solução alternativa:

Altere explicitamente a sub-rede usada no {organization-name}-system-bgp-flat-ip-ipv4-apc AddressPoolClaim para não se sobrepor aos recursos AddressPoolClaim análogos de nenhuma outra organização.

  1. Investigue os sintomas:
    1. Para cada cluster do sistema de 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 utilização posterior.
  2. Determine se "System cluster BGP Sessions cannot be established due to overlapping ClusterIPs" é a causa principal:
    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. Pesquise o campo ClusterIP do resultado (3.ª coluna) para encontrar o LocalIPs indicado no passo 1.b. Anote os LocalIPs que correspondem às entradas na 3.ª coluna do resultado para mais tarde. Se existirem vários clusters de administrador da organização distintos, em que o resultado do passo 2.a contém os LocalIPs indicados no passo 1.b, avance para o passo 3.
  3. Resolva IPs sobrepostos usados para clusters de sistemas da organização.
    1. Corrida:
      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 devolvidos da consulta em 3.a. Este valor tem de ser igual ao número de organizações ativas.
    3. Para cada linha, anote o espaço de nomes (coluna 1) e o bloco CIDR (coluna 3). O bloco CIDR de cada linha deve ser igual ao bloco CIDR de todas as outras linhas.
    4. Para cada organização, siga estes passos:
      1. Navegue para o objeto {organization-name}-system-bgp-flat-ip-ipv4-apc AddressPoolClaim no cluster de administração da organização dessa organização.
      2. Calcular o Start IP da reivindicação do conjunto de endereços de nós de trabalho dessa organização. Para o fazer, use o bloco CIDR de 3.c e o campo Size no AddressPoolClaim de 3.d.i. Começando no penúltimo IP no bloco CIDR, conte para baixo Size IPs. Este é o novo Start IP para a primeira organização (usado no passo 3.d.iii). Para cada organização adicional, a contagem regressiva é de Size IP segundos, começando no novo Start IP da organização anterior. Por 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 do passo 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 tem de ter o seguinte aspeto se usar org-1 do ponto 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. Limpe para evitar sessões de BGP desnecessárias no hardware TORSwitch.
    1. Para apresentar uma lista de todos os recursos do TORSwitchInternal que precisam de atualização, execute o seguinte comando:
      kubectl get torswitchinternals --kubeconfig ROOT_ADMIN_KUBECONFIG -A
    2. Para cada um dos TORSwitchInternals apresentados no resultado 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 tenham NeighborIPs iguais a qualquer um dos LocalIPs do passo 2.b. Por exemplo, LocalIP de 2.2.2.2 foi registado no passo 2.b. Segue-se um exemplo TORSwitchInternal antes e depois do passo 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. Tenha em atenção 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. Valide executando o passo 1 e confirmando que todos os BGPSession objetos States regressaram a Established. A propagação de todas as modificações às configurações físicas do GDC TORSwitch pode demorar cerca de 10 minutos.
Atualizar 1.9.7 - 1.9.21

A atualização do nó e do sistema operativo não progride

Durante uma atualização, existe a possibilidade de a atualização do nó e do sistema operativo não progredir.

Sintomas:

Pode ver um nó com o estado Ready, SchedulingDisabled durante 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
      

Solução alternativa:

  1. Siga o runbook PLATAUTH-SSH 0001 para obter a chave SSH do nó em questão. Depois de se ligar ao nó com SSH, execute o seguinte comando:
    multipath -ll | grep fail
  2. Só avance para o passo seguinte se o resultado for semelhante ao seguinte:
    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
Atualizar 1.9.8-1.9.21

A drenagem de nós está bloqueada porque o pod está preso no estado de encerramento

Sintomas:

Se uma atualização do cluster ABM estiver bloqueada durante mais de 2 horas, a drenagem de nós pode estar bloqueada.

Solução alternativa:

As seguintes operações usam o cluster de administrador raiz como exemplo. ${TARGET_KUBECONFIG} refere-se ao `kubeconfig` do cluster do ABM de destino cuja drenagem de nós está bloqueada. ${KUBECONFIG} refere-se ao kubeconfig do cluster que gere o cluster do ABM de destino. Para o cluster de administrador raiz, ambos se referem ao kubeconfig de administrador raiz.

Conclua os passos seguintes para ver se a atualização do cluster do ABM está bloqueada:

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

    O resultado é o seguinte:

    {"10.200.0.2": 2}

    Isto significa que, para o nó "10.200.0.2", estão a ser esvaziados dois pods.

  2. Verifique se os pods continuam a ser esvaziados do nó (referido como ${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 tem de ser igual ao número de pods que estão a ser esvaziados, comunicado no passo anterior.

    Para cada agrupamento yetToDrain, conforme indicado no passo 1, verifique o estado do agrupamento:
    kubectl --kubeconfig=${TARGET_KUBECONFIG} get pods -n ${POD_NAMESPACE} ${POD_NAME} -o wide

    Se o pod estiver no estado Running ou se o pod estiver audit-logs-loki-0 ou loki-0 no espaço de nomes obs-system e o pod não tiver nenhum evento a reclamar unable to unmount volume, elimine explicitamente o pod com um grace-period.

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

  4. Para todos os outros casos em que um pod esteja bloqueado no processo de esgotamento, encaminhe o problema para os serviços de chamada.
  5. Monitorize se a drenagem do nó está concluída.
  6. Repita o passo um se outros nós estiverem bloqueados na drenagem.
Atualizar 1.9.6
1.9.7
1.9.8

A distribuição de artefactos falha após anexar assinaturas

Não é possível distribuir as versões 1.9 com artefactos assinados porque a flag Override em DistributionPolicy está definida como false, o que impede a distribuição quando existe um artefacto com o mesmo nome no registo de destino.

Sintomas:

Pode deparar-se com os seguintes problemas:

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

Solução alternativa:

Para resolver o problema, siga os passos abaixo:

  1. Atualize o recurso personalizado (CR) DistributionPolicy para definir o Spec.Override como true.
  2. Volte a acionar uma replicação seguindo o manual de procedimentos SAR-1005.
  3. Depois de a nova execução da replicação ser bem-sucedida, atualize o ManualDistribution CR execution-ids em Annotation com o ID de execução bem-sucedido.
Módulo de segurança de hardware (HSM) 1.9.9

O servidor comunica que o inquilino do HSM não está em bom estado

Os HSMs podem comunicar intermitentemente ServicesNotStarted, o que pode fazer com que os servidores bare metal não fiquem em bom estado e comuniquem a seguinte mensagem:

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

Sintomas:

Pode deparar-se com os seguintes problemas:

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

    O resultado pode ter o seguinte aspeto:

    "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 bloqueados em ServicesNotStarted.

Solução alternativa:

Para resolver o problema, siga os passos abaixo para reiniciar os HSMs bloqueados:

  1. Instale a ferramenta kstl a partir 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á a ter problemas ao reiniciar. Para cada HSM bloqueado em ServicesNotStarted, obtenha o $HSM_MGMT_IP e verifique se o serviço está em baixo:
    ksctl services status  --url=https://$HSM_MGMT_IP
  3. Pause todos os HSMs, clusters de HSMs e inquilinos de HSMs:
    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 ligação SSH ao HSM com o serviço inativo:
    ssh -i $HOME/.ksctl/ssh-privatekey ksadmin@$HSM_MGMT_IP
  5. Certifique-se de que está no HSM correto. Verifique se estabeleceu uma ligação SSH com o $HSM_MGMT_IP correto.
  6. Reinicie o primeiro HSM a partir do interior do HSM:
    ksadmin@ciphertrust:~ sudo reboot
  7. Aguarde que o primeiro HSM fique em bom estado a partir do exterior do HSM:
    watch -c ksctl services status --url=https://$HSM_MGMT_IP

    Este passo pode demorar cerca de cinco minutos para que os HSMs sejam reiniciados.

  8. Repita estes passos para os outros HSMs que têm serviços em baixo.
  9. Retome os HSMs, os clusters de HSMs e os inquilinos de HSMs:
    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 é reconciliado. A reconciliação dos HSMs pode demorar entre cinco e dez minutos.
Monitorização 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 alertmanager-servicenow-webhook nos clusters do sistema da organização não chegam ao ServiceNow

Sintomas:

Os alertas do 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 registos contêm a mensagem de erro read: connection reset by peer. Este problema deve-se a uma etiqueta em falta para ativar o tráfego de saída. Se o webhook precisar de comunicar entre organizações, tem de usar o NAT de saída.

Solução alternativa:

Tem de ativar o tráfego de saída para o alertmanager-servicenow-webhook em clusters de sistemas da organização. Para resolver o problema, siga os passos abaixo:

  1. Defina os pré-requisitos necessários:
    • Instale a interface de linhas de comando (CLI) gdcloud.
    • Obtenha os caminhos para os ficheiros kubeconfig dos clusters de administrador principal e administrador da organização. Guarde os caminhos nas variáveis de ambiente ROOT_KUBECONFIG e ORG_SYSTEM_KUBECONFIG, respetivamente.
    • Peça ao administrador de segurança para lhe conceder a função de administrador de observabilidade (observability-admin) no espaço de nomes obs-system para os clusters de administrador principal e administrador da organização.
  2. Confirme se o problema existe no seu ambiente:
    1. Obtenha a implementação do alertmanager-servicenow-webhook:
      kubectl --kubeconfig "${ORG_SYSTEM_KUBECONFIG:?}" get deployment alertmanager-servicenow-webhook -n obs-system
    2. Veja os registos da implementação alertmanager-servicenow-webhook:
      kubectl --kubeconfig "${ORG_SYSTEM_KUBECONFIG:?}" logs deployment/alertmanager-servicenow-webhook -n obs-system

      Se os registos contiverem a mensagem de erro read: connection reset by peer, o problema existe e tem de continuar com os passos desta solução alternativa.

  3. Adicione a etiqueta de saída:
    1. Obtenha o ficheiro YAML de implementaçã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 a etiqueta de saída ao ficheiro YAML de implementaçã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 ficheiro YAML de implementaçã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 implementação tem de ser reiniciada automaticamente.

  4. Valide se o problema está corrigido executando novamente os passos Confirme se o problema existe no seu ambiente. A mensagem de erro dos registos não deve ser apresentada. Caso contrário, encaminhe a situação para a equipa de engenharia.

Estratégia de reversão:

Se os passos da solução alternativa falharem ou se verificar alguma perda nas métricas, devolva o ficheiro YAML de implementação alertmanager-servicenow-webhook ao estado original:

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

O NodeUpgradeTask do nó ficou bloqueado no passo NodeMaintainCompleted durante um período mais longo (mais de 30 minutos).

Sintomas:

A atualização está bloqueada no passo 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 conjunto de nós em curso 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  

Solução alternativa:

Siga os passos seguintes:

  1. Obtenha o nome da implementaçã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 de 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
Atualizar 1.9.10

A atualização está bloqueada no passo de verificação pós-voo AdminClusterHealth.

Sintomas:

A atualização está bloqueada no passo 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

Solução alternativa:

Siga os passos seguintes:

Use o seguinte comando para ignorar 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

Atualizar 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.

Solução alternativa:

Para resolver o problema, reinicie a tarefa:

  1. Elimine a tarefa denominada create-failover-registry-*** que tem "0/1" de conclusão.
  2. Elimine a anotação failover-registry-creation-job-name do objeto Server que está a ser atualizado.

O controlador cria automaticamente a tarefa novamente.

Atualizar 1.9.20

O nó falha na tarefa backup-ipsec-for-upgrade-bm.

Sintomas:

O nó falha na tarefa 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
"

Solução alternativa:

Elimine a tarefa `backup-ipsec-for-upgrade-bm` e aguarde que seja recriada.

Google Distributed Cloud 1.9.9

A criação da organização pode ficar bloqueada porque o conjunto de nós do plano de controlo não fica pronto a tempo.

Sintomas:

Um conjunto de nós do plano de controlo não fica pronto devido à falha de início do cluster etcd. Pode deparar-se com 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

Solução alternativa:

Para resolver o problema, siga os passos abaixo:

  1. Verifique se a criação do cluster está bloqueada na tarefa de inicialização da máquina.
    A tarefa kubeadm join falhou devido ao seguinte:
    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 ao seguinte:
    panic: runtime error: invalid memory address or nil pointer dereference
  2. Use SSH para estabelecer ligação a um nó do painel de controlo funcional.
  3. Execute o comando etcdctl para limpar os dados obsoletos.
  4. Verifique a subscrição 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 subscrição 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
Cópia de segurança e restauro de VMs 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 definições de webhook da VM impedem que os utilizadores iniciem procedimentos de cópia de segurança e restauro de VMs

Sintomas:

Os utilizadores não podem iniciar o processo de cópia de segurança e restauro de VMs devido a definições de controlo de acesso baseado em funções (RBAC) e de esquema incorretas no gestor de VMs.
Os nomes dos planos de cópia de segurança de VMs não podem ter mais de 63 carateres. Por exemplo, 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

Solução alternativa:

Os nomes dos planos de cópia de segurança de VMs são uma concatenação do nome VirtualMachineBackupPlanTemplate, do tipo de recurso (que é vm ou vm-disk) e do nome desse recurso. Esta string concatenada tem de ter menos de 63 carateres.
Para o fazer, mantenha os nomes destes recursos curtos quando os criar. Para ver detalhes sobre a criação destes recursos, consulte os artigos Crie e inicie uma instância de VM e Crie um plano de cópia de segurança para VMs.

Atualizar 1.9.9

A atualização do SO do nó falha devido a um erro no modelo

Sintomas:

Uma atualização falha na tarefa de cópia de segurança 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

Solução alternativa:

Siga os passos seguintes:

  1. Inicie sessão no nó em que a tarefa de atualização falha.

  2. Guarde o swanctl.conf como uma cópia de segurança.

  3. Remova a linha com chavetas no ficheiro /etc/swanctl/swanctl.conf.

  4. Elimine a tarefa com falhas backup-ipsec-for-upgrade e aguarde a sua recriação. Em seguida, a tarefa subsequente é concluída com êxito.

  5. Adicione novamente a linha removida no passo 3 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 principal rejeita o tráfego de rede de entrada após uma atualização de firmware

Quando uma atualização de firmware é iniciada no cluster de administrador principal, depois de um dos nós concluir a atualização do nó, parece que fica bloqueado.

Sintomas:

  • O nodeupgradetask está bloqueado na fase NodeResumeCompleted.
  • A tarefa machine-init falha e o registo mostra que a tarefa kubeadm join falhou.
  • Não pode estabelecer uma ligação SSH ao nó através do endereço IP do plano de dados.

O problema é causado pelo facto de o nó atualizado deixar de aceitar tráfego de rede de entrada.

Solução alternativa:

  1. Inspeccione os registos de job/nodeupgradetask com falhas para anotar os endereços IP e descobrir que nó tem o problema.
  2. Reinicie o pod do nó afetado.anetd-client
  3. Valide a ligação SSH no IP do plano de dados ao nó afetado.

Passos opcionais para uma investigação mais detalhada:

  1. Aceda a um contentor de agente do Cilium de qualquer um dos pods anetd em funcionamento.
  2. Execute o comando cilium-bugtool e aguarde cerca de 10 segundos. A ferramenta guarda os registos no diretório /var/log/network/policy_action.log.
  3. Procure deny para ver se o tráfego está a ser recusado:
    grep -r "deny" /var/log/network/ to
    Tenha em atenção os servidores que estão a ser recusados, possivelmente os nós de metal puro do administrador principal.
Atualizar 1.9.13
1.9.14
1.9.15
1.9.16
1.9.17
1.9.18
1.9.19

A atualização falha no suplemento atat-webhooks

Sintomas:

  • Uma atualização falha no suplemento atat-webhooks.
  • As etiquetas de suplementos da ATAT expiradas podem fazer com que as atualizações da organização falhem. Por 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.
  • Solução alternativa:

    Os utilizadores têm de atualizar as etiquetas do suplemento ATAT do portefólio. Siga o runbook ATAT-R0003 para resolver o problema.

Atualizar 1.9.13
1.9.14
1.9.15
1.9.16
1.9.17
1.9.18
1.9.19

A atualização do SO do nó no bare metal da organização de inquilinos falha

Sintomas:

  • A atualização do SO do nó no metal em modo nativo da organização de inquilinos falha ao atualizar da versão 1.9.12 para a 1.9.13. É apresentada a seguinte mensagem:
     
           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"                                                                                                              
                         }                                                                                                                                          
                     }  ]
  • Solução alternativa:

    1. Remova a anotação cluster.private.gdc.goog/ssh-trusted-ca-versions no CR do servidor de administrador de raiz e administrador da organização.
    2. Elimine as tarefas do Ansible com falhas. As novas tarefas são criadas automaticamente porque a anotação cluster.private.gdc.goog/host-key-rotation-in-progress está marcada como verdadeira no CR do servidor.
    3. Após a rotação, a anotação cluster.private.gdc.goog/ssh-trusted-ca-versions é novamente adicionada ao CR do servidor.
Nó, atualização 1.9.*

Os pods em máquinas sem sistema operativo podem apresentar o estado CrashLoopBackOff devido a regras do Cilium eliminadas

Sintomas:

Após a atualização, os pods em alguns nós bare metal ficam bloqueados no estado CrashLoopBackOff e iptables -L -v -n | grep CILIUM no nó devolve um resultado vazio.

Solução alternativa:

Para resolver o problema, conclua os seguintes passos:

  1. Execute o seguinte 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 existe uma saída.
Registo 1.9.14
1.9.15

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

Sintomas:

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

Valide o estado do pod:

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

Em que SYSTEM_KUBECONFIG é o caminho para o ficheiro kubeconfig.

O erro do Loki é apresentado no seguinte resultado, em que CrashLoopBackOff é o estado:

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

Solução alternativa:

Para resolver o problema, conclua os seguintes passos:

  1. Exporte o caminho para o ficheiro kubeconfig para uma variável de ambiente denominada SYSTEM_KUBECONFIG.
  2. Reduza a escala do operador Logmon:
          kubectl scale deployment -n obs-system logmon-operator --replicas 0
          
  3. Reduza os recursos do Loki:
          kubectl scale loki -n obs-system --replicas 0
          kubectl scale statefulset audit-logs-loki -n obs-system --replicas 0
          
  4. Elimine as reivindicações de volume persistente (PVC) audit-logs-loki-storage-audit-logs-loki-0 e loki-storage-loki-0.
  5. Elimine os volumes persistentes (PV) obs-system/loki-storage-loki-0 e obs-system/audit-logs-loki-storage-audit-logs-loki-0.
  6. Aumente a escala do operador Logmon:
          kubectl scale deployment -n obs-system logmon-operator --replicas 1
          
  7. Siga os passos para atualizar a configuração de registo a partir 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 estado Running tem de ser apresentado no resultado, como no exemplo seguinte:

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

A instalação do Gitlab falha

Sintomas:

Quando atualiza para a versão 1.9.16, a instalação do suplemento do Gitlab falha. Pode ver 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 postgres, como gpc-system/gitlab-postgresql-0, está num estado de terminação.

Solução alternativa:

  1. Elimine à força o pod postgres que está bloqueado num estado de encerramento:
    kubectl delete pod POD_NAME --grace-period=0 --force --namespace NAMESPACE 
  2. Certifique-se de que o pod postgres é recriado após a eliminação.
Gestão de identidade e de acesso 1.9.19
1.9.20

A autenticação falha ao aceder à Play Console

Sintomas:

Quando atualiza a partir da versão 1.9.18 e tenta aceder à consola GDC, pode ver a seguinte mensagem:

Authentication failed, please contact your system administrator

Solução alternativa:

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