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

Categoria Versões identificadas Problema e solução alternativa
Cópia de segurança e restauro 1.12.1

A cópia de segurança de volumes não resolve os pontos finais de armazenamento de objetos ao nível da organização

O cluster de armazenamento para a cópia de segurança do volume usa o servidor DNS externo em vez do encaminhador, o que impede que a cópia de segurança do volume resolva os pontos finais de armazenamento de objetos ao nível da organização. Na versão 1.12, o tráfego de cópia de segurança requer novos trajetos para cada organização.

Solução alternativa:

Os IOs têm de atualizar o cluster de armazenamento para ativar a resolução DNS ao nível da organização e criar uma rota a partir das interfaces lógicas (LIFs) de replicação para os pontos finais de armazenamento de objetos em cada organização. Copie e cole os seguintes comandos do programa de arranque.

  1. Defina a variável de ambiente KUBECONFIG:
    export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
  2. Encontre o cluster de armazenamento:
    storage_cluster=$(kubectl get storagecluster -n gpc-system | awk 'NR == 2{print $1}')
  3. Encontre o CIDR externo da instância:
    instance_external_cidr=$(kubectl get cidrclaim -n gpc-system instance-external-cidr -ojsonpath='{.spec.ipv4Spec.staticCidrBlocks}')
  4. Atualize o cluster de armazenamento para usar um encaminhador e com uma rota para o CIDR externo da instância:
    kubectl patch storagecluster "${storage_cluster}" -n gpc-system --type='json' -p='[{"op": "replace", "path": "/spec/additionalNetworks/0/destinationSubnets", "value": '"${instance_external_cidr}"'}, {"op": "replace", "path": "/spec/dnsConfig/serviceRef/name", "value": "gpc-coredns-forwarder-udp"}]'
  5. Reinicie o comando para garantir que a alteração é implementada:
    kubectl rollout restart deploy/file-storage-backend-controller -n file-system
Cópia de segurança e restauro 1.12.1

A rota de cópia de segurança para organizações falha

Sintomas:

A obtenção do gateway de entrada do administrador da organização a partir de nós do ONTAP falha porque não existe um caminho da sub-rede de cópia de segurança para os planos de controlo da organização.

Solução alternativa:

Os IOs têm de atualizar o cluster de armazenamento para ativar a resolução DNS ao nível da organização e criar uma rota a partir das interfaces lógicas (LIFs) de replicação para os pontos finais de armazenamento de objetos em cada organização. Copie e cole os seguintes comandos do programa de arranque.

  1. Defina a variável de ambiente KUBECONFIG:
    export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
  2. Encontre o cluster de armazenamento:
    storage_cluster=$(kubectl get storagecluster -n gpc-system | awk 'NR == 2{print $1}')
  3. Encontre o CIDR externo da instância:
    instance_external_cidr=$(kubectl get cidrclaim -n gpc-system instance-external-cidr -ojsonpath='{.spec.ipv4Spec.staticCidrBlocks}')
  4. Atualize o cluster de armazenamento para usar um encaminhador e com uma rota para o CIDR externo da instância:
    kubectl patch storagecluster "${storage_cluster}" -n gpc-system --type='json' -p='[{"op": "replace", "path": "/spec/additionalNetworks/0/destinationSubnets", "value": '"${instance_external_cidr}"'}, {"op": "replace", "path": "/spec/dnsConfig/serviceRef/name", "value": "gpc-coredns-forwarder-udp"}]'
  5. Reinicie o comando para garantir que a alteração é implementada:
    kubectl rollout restart deploy/file-storage-backend-controller -n file-system
Cópia de segurança e restauro 1.12.4

Não é possível eliminar volumes persistentes dos quais é feita uma cópia de segurança

Sintomas:

Não é possível eliminar um volume persistente se estiver numa relação de espelhamento rápido.

Solução alternativa:

Um IO elimina as relações SnapMirror com o volume como destino.

  1. Defina a variável de ambiente KUBECONFIG:
    export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
  2. Armazene o nome do PV problemático numa variável:
    PV_NAME={ PV_NAME }
  3. Obtenha o nome do volume interno:
    volume_name=$(kubectl get pv ${PV_NAME?} -o jsonpath='{.spec.csi.volumeAttributes.internalName}')
  4. Aceda ao ONTAP seguindo os passos no manual de procedimentos FILE-A0006.
  5. Elimine as relações com este volume como origem, usando a palavra-passe recolhida anteriormente:
    ssh ${username?}@${mgmt_ip?} snapmirror delete -source-volume ${volume_name?} -destination-path "*"
    # enter the password collected from the breakglass secret
Cópia de segurança e restauro 1.12.0
1.12.1
1.12.2

O repositório de cópias de segurança está realmente em bom estado

Se o repositório de cópias de segurança não tiver nenhum tipo de estado de erro, mas for gerado um alerta para o mesmo, a métrica de alerta para o repositório pode ser gerada por engano. Este é um problema conhecido na versão 1.12.0 e foi corrigido na versão 1.12.4. A causa deste problema é que o repositório de cópias de segurança tenta periodicamente estabelecer ligação ao armazenamento de objetos como uma verificação do estado, e entra num estado não saudável se não conseguir estabelecer ligação. No entanto, se o repositório de cópia de segurança for recuperado, a métrica que indica o respetivo estado não é revertida corretamente, o que faz com que o alerta permaneça num estado de acionamento indefinido. Para resolver este problema, pode eliminar e recriar manualmente o repositório de cópias de segurança para repor a respetiva métrica de estado. Siga os passos no runbook BACK-R0003 para recriar o repositório de cópias de segurança.

Faturação 1.12.4

bil-storage-system-cluster - Reconciliation error: E0121 subcomponent fails

Sintomas:

Mensagem de erro: bil-storage-system-cluster - Reconciliation error: E0121- rollback chart: no Job with the name "billing-storage-system-init-job-628" found

O subcomponente bil-storage-system-cluster não é reconciliado devido a tarefas desatualizadas. Os billing-storage-system-init-job-628 e billing-storage-system-init-job-629 permanecem após a conclusão com êxito.

Solução alternativa:

Conclua os seguintes passos:

  1. Faça cópias de segurança das tarefas de faturação desatualizadas:
    cd /root/USERNAME
    kubectl --kubeconfig /root/release/gdchservices/gdchservices-system-kubeconfig get jobs billing-storage-system-init-job-628 -n billing-system -o yaml > billing-storage-system-init-job-628.yaml
    kubectl --kubeconfig /root/release/gdchservices/gdchservices-system-kubeconfig get jobs billing-storage-system-init-job-629 -n billing-system -o yaml > billing-storage-system-init-job-629.yaml
  2. Pause o subcomponente:
    export SUBCOMPONENT_NAME=bil-storage-system-cluster
    export SUBCOMPONENT_NAMESPACE=gdchservices-system-cluster
    
    kubectl annotate subcomponent "${SUBCOMPONENT_NAME:?}" -n "${SUBCOMPONENT_NAMESPACE:?}" lcm.private.gdc.goog/paused=true
  3. Elimine os trabalhos desatualizados.
  4. Reiniciar oclcm-backend-controller.
  5. Retome o subcomponente.
Armazenamento em bloco 1.12.4

Pods do Grafana bloqueados no estado Init devido a erros de montagem de volume.

Sintomas:

Os pods do Grafana nos espaços de nomes anthos-identity-service-obs-system e platform-obs-obs-system estão bloqueados no estado Init devido a erros de montagem de volume. A mensagem de erro nos registos do kubelet indica um problema de multi-attach. O problema tem origem num erro no Trident, em que não identifica nem valida corretamente o dispositivo subjacente para mapeamentos LUKS, o que leva a um erro de ligação múltipla.

Solução alternativa:

Verifique se o PVC tem um deletionTimestamp. Se não existir deletionTimestamp (migração de pods), siga estes passos:

  1. Verifique o VolumeAttachment do PVC para identificar onde o volume está atualmente associado.
  2. Isolar os Nodes no cluster que não correspondem a este valor.
  3. Elimine o Pod com falhas. Isto deve fazer com que seja migrado novamente para o Node original.

Após a verificação, se existir um deletionTimestamp (eliminação de volume), siga estes passos:

  1. Verifique o VolumeAttachment do PVC para identificar onde o volume está atualmente associado.
  2. No Node, apresente o conteúdo do respetivo ficheiro de acompanhamento:
    cat /var/lib/trident/tracking/PVC_NAME.json
  3. Valide se o dispositivo LUKS encontrado no campo devicePath do resultado do ficheiro de acompanhamento está efetivamente fechado. Este caminho não deve existir neste ponto:
    stat DEVICE_PATH
  4. Valide se o número de série está atualmente mapeado para algum dispositivo de vários caminhos.
    1. Copie o valor no campo iscsiLunSerial do ficheiro de acompanhamento.
    2. Converta este valor no valor hexadecimal esperado:
      echo 'iISCSILUNSERIAL>' | xxd -l 12 -ps
    3. Com este novo valor, verifique se a entrada de vários caminhos ainda existe:
      multipath -ll | grep SERIAL_HEX
    4. Se não existir, elimine o ficheiro de acompanhamento.
    5. Se existir, é apresentado um valor hexadecimal ligeiramente mais longo do que o pesquisado, denominado multipathSerial. Execute o seguinte e encontre os dispositivos de bloqueio:
      multipath -ll MULTIPATH_SERIAL
    6. Em seguida, execute os seguintes comandos, sendo que o último é executado exclusivamente para cada dispositivo de blocos:
                systemctl restart iscsid
                systemctl restart multipathd
                multipath -f MULTIPATH_SERIAL
                echo 1 > /sys/block/BLOCK_DEVICE_NAME/device/delete
                  
Gestão de clusters 1.12.0
1.12.1
1.12.2
1.12.4

A tarefa machine-init falha durante o aprovisionamento do cluster

Sintomas:

  1. Durante o aprovisionamento do cluster, a tarefa machine-init do segundo nó do plano de controlo falha com a seguinte mensagem:
    FAILED! => {"changed": true, "cmd": "/usr/bin/kubeadm join phase control-plane-prepare certs --config /dev/stdin --v 5".
  2. Ver os registos:
    kubectl --kubeconfig=ADMIN_KUBECONFIG logs -p kube-apiserver-{first_node_name} -n kube-system | grep "etcdmain: open /etc/kubernetes/pki/etcd/ca.crt: permission denied"

    A saída mostra um resultado não vazio.

Solução alternativa:

  1. Ative ou desative a autorização de /etc/kubernetes/pki/etcd/ca.crt. Esta é uma operação muito sensível ao tempo. A mudança de autorização tem de ocorrer após a execução anterior da tarefa machine-init, mas antes da execução seguinte da tarefa machine-init, uma vez que machine-init substitui a autorização de volta para a raiz.
  2. Reinicie o etcd no segundo nó para recuperar o etcd no primeiro nó do ciclo de falhas.

    Depois de concluir estes dois passos, o kube-apiserver no primeiro nó começa a ser executado e a tarefa machine-init seguinte é bem-sucedida.

Gestão de clusters 1.12.2

O IPv4 PodCIDR necessário não está disponível

Sintomas:

O agente do Cilium apresenta o seguinte aviso:

level=warning msg="Waiting for k8s node information" error="required IPv4 PodCIDR not available" subsys=k8s 

Solução alternativa:

  1. Descubra o endereço IP do nó que quer remover.
  2. Remova o endereço IP de spec.nodes no recurso personalizado NodePool.
  3. Aguarde até que o nó seja completamente removido do NodePool. Se o nó não for removido, faça o seguinte: force-remove
    1. Adicione a anotação baremetal.cluster.gke.io/force-remove=true ao recurso personalizado Machine:
      kubectl -n org-1-system-cluster annotate machine IP_ADDRESS baremetal.cluster.gke.io/force-remove=true 
  4. Adicione novamente o endereço IP a spec.nodes no recurso personalizado NodePool.
Registo 1.12.0
1.12.1

Os registos do servidor da API Kubernetes não são encaminhados para um destino SIEM

Sintomas:

Depois de concluir a configuração da exportação para um sistema SIEM externo, a entrada SIEM não é incluída no pipeline de processamento do Fluent Bit e os registos do servidor da API Kubernetes não estão presentes neste SIEM.

Redes 1.12.4

A tarefa machine-init falha durante a atualização

Sintomas:

Quando atualiza da versão 1.12.2 para a 1.12.4, se um nó for removido e, posteriormente, adicionado novamente, o processo machine-init desse nó pode falhar. Esta falha ocorre porque o tráfego de rede do nó adicionado novamente para os serviços essenciais do plano de controlo é recusado pela política ciliumclusterwidenetworkpolicy/base-node-policy-for-control-plane-nodes. Este erro é realçado pelas mensagens de estado neste exemplo de resultado:
      Feb 17 18:52:52.330: 30.0.0.9:41046 (world) <> 30.0.0.7:2379 (host) policy-verdict:none INGRESS DENIED (TCP Flags: SYN)
      Feb 17 18:52:52.330: 30.0.0.9:41046 (world) <> 30.0.0.7:2379 (host) Policy denied DROPPED (TCP Flags: SYN)

Solução alternativa:

Para mitigar este problema, siga estes passos:

  1. Para o cluster de administrador principal:
    1. Obtenha CIDRs de CIDRClaim/org-external-cidr -n root (especificamente o campo .status.ipv4AllocationStatus.allocatedCidrBlocks). Execute o seguinte comando no cluster de administrador raiz:
      ROOTCIDRs=$(ka get cidrclaim/org-external-cidr -n root -o json | jq '.status.ipv4AllocationStatus.allocatedCidrBlocks')
    2. Adicione estes CIDRs ao ciliumclusterwidenetworkpolicy/base-node-policy-for-control-plane-nodes, especificamente ao campo .spec.ingress.fromCIDR. Aplique esta alteração no cluster de administrador raiz com o comando:
      ka get ciliumclusterwidenetworkpolicy/base-node-policy-for-control-plane-nodes -o json \
        | jq '.spec.ingress += [{"fromCIDR":'"${ROOTCIDRs}"'}]' \
        | ka apply -f -
  2. Para o cluster de administrador organizacional:
    1. Obtenha CIDRs para a organização (por exemplo, org-1) de CIDRClaim/org-external-cidr -n org-1 (especificamente, o campo .status.ipv4AllocationStatus.allocatedCidrBlocks). Este comando é executado no cluster de administrador raiz para obter os CIDRs de "org-1":
      ORGCIDRs=$(ka get cidrclaim/org-external-cidr -n org-1 -o json | jq '.status.ipv4AllocationStatus.allocatedCidrBlocks')
    2. Adicione estes CIDRs ao ciliumclusterwidenetworkpolicy/base-node-policy-for-control-plane-nodes, especificamente ao campo .spec.ingress.fromCIDR. Aplique esta alteração no cluster de administração da organização respetivo com o comando:
      ko get ciliumclusterwidenetworkpolicy/base-node-policy-for-control-plane-nodes -o json \
        | jq '.spec.ingress += [{"fromCIDR":'"${ORGCIDRs}"'}]' \
        | ko apply -f -

Só tem de fazer esta alteração uma vez antes de iniciar a atualização.

Redes 1.12.0
1.12.1

Problemas com atualizações, rescisão e agendamento de VMs e contentores

Sintomas:

Num nó bare metal do cluster do sistema, não é possível terminar dois contentores anetd. Depois de parar o processo à força, reiniciar o kubelet e o containerd, o pod anetd é recriado, mas todos os contentores ficam bloqueados em podInit e o containerd apresenta a mensagem de erro:

`failed to create containerd task: failed to create shim task: context deadline exceeded: unknown`.

Isto impede o início da interface de rede de contentores (CNI) e impede o agendamento de outros pods.

Solução alternativa:

Realize estas mitigações para evitar este estado do nó:

  • Não agende mais de 10 PVCs de cada vez num único nó. Aguarde que sejam montados antes de agendar mais. Isto era mais percetível quando tentava criar VMs.
  • Atualize o ficheiro /etc/lvm/lvm.conf em todos os nós para incluir a linha: filter = [ "r|/dev/dm.|", "r|/dev/sg.|" ] no bloco devices{}

Se o nó entrar num estado em que apresenta tempos limite para anexos e montagens de volumes, ou não conseguir eliminar um volume, verifique o número de processos vgs pendentes no nó para identificar se o nó se encontra neste estado particularmente mau. A forma mais fiável de corrigir um nó neste estado é reiniciá-lo.

Existe outro modo de falha que pode ser experimentado. Esse modo de falha tem a seguinte assinatura na tentativa de montagem: mount(2) system call failed: No space left on device. Isto deve-se provavelmente à propagação da montagem no nó. Verifique isto executando cat /proc/mounts | grep devtmpfs | awk '{ print $2 }' | sort -n | uniq -c. Se algum destes mostrar um valor superior a um, elimine o pod que o está a usar. Isto deve acionar a desmontagem. Se não tiver êxito, desmonte manualmente esse caminho. Se continuar a ter problemas, reinicie o dispositivo.

Redes 1.12.2

O GDC não consegue criar ACLs de comutação a partir de políticas de tráfego durante o processo de arranque inicial

Em determinados cenários, devido a condições de concorrência, o Google Distributed Cloud (GDC) isolado não cria os recursos personalizados do Kubernetes ACLs do comutador necessários durante a inicialização inicial do Distributed Cloud.

Sintomas:

Liste os CRs de LCA do comutador:

kubectl get switchacls -n gpc-system --kubeconfig=/root/release/root-admin/root-admin-kubeconfig

O resultado deste comando indica que não foram criadas ACLs de comutador de gestão (mgmt-switch-acl).

No resources found in gpc-system namespace.

Solução alternativa:

  1. Liste os CRs de políticas de tráfego:
    kubectl get trafficpolicies -n gpc-system --kubeconfig=/root/release/root-admin/root-admin-kubeconfig

    O resultado devolve dois CRs do Kubernetes da política de tráfego:

    NAME                          AGE     NAME
    default-traffic-policy-data   4d17h   default-traffic-policy-data
    default-traffic-policy-mgmt   4d17h   default-traffic-policy-mgmt
  2. Edite o CR do Kubernetes da política de tráfego default-traffic-policy-mgmt:
    kubectl edit trafficpolicies default-traffic-policy-mgmt -n gpc-system --kubeconfig=/root/release/root-admin/root-admin-kubeconfig
  3. Aceder à última regra de política neste ficheiro, que pode estar no final do ficheiro.
  4. Identifique o campo de descrição da última regra da política. O campo pode ter o seguinte aspeto:
    Deny All rule for Management Network
  5. Edite esta descrição e adicione The ao início da linha de descrição:
    The Deny All rule for Management Network
  6. Guarde o ficheiro e saia.
  7. Liste novamente os CRs da ACL do comutador do Kubernetes:
    kubectl get switchacls -n gpc-system --kubeconfig=/root/release/root-admin/root-admin-kubeconfig
  8. A saída apresenta a LCA do comutador de gestão (mgmt-switch-acl):
    NAME              AGE   NAME
    mgmt-switch-acl   23h   mgmt-switch-acl
Servidores físicos 1.12.1
1.12.2

NodePool tem um servidor num estado desconhecido durante a criação

Sintomas:

Quando o aprovisionamento Server ocorre durante a criação de qualquer cluster, existe a possibilidade de o servidor ser marcado como aprovisionado, mas não ter a condição Provision-Ready. Como resultado, o NodePool não pode consumir este servidor. Uma mensagem de evento de erro de exemplo no NodePool pode ter o seguinte aspeto:

Events:
  Type     Reason          Age    From    Message
  ----     ------          ----   ----    -------
  Warning  ReconcileError  xxx    Server  policy failure PolicyPreflightCompleted(UnreachableError): {PolicyPreflightCompleted False 3 2023-11-07 22:10:56 +0000 UTC UnreachableError reachability err: Failed to connect to the host via ssh: ssh: connect to host xx.xx.xx.xx port 22: Connection timed out}
      

Solução alternativa:

Reponha o ILO executando o seguinte script:

      SERVER_NAME=
      ROOT_ADMIN_KUBECONFIG=
      ILO_IP=$(kubectl get servers ${SERVER_NAME} -n gpc-system --template={{.spec.bmc.ip}} --kubeconfig=${ROOT_ADMIN_KUBECONFIG})
      SECRET_NAME=$(kubectl get secrets -o go-template='{{range $index,$pod := .items}}{{.metadata.name}}{{"\n"}}{{end}}' -n gpc-system --kubeconfig=${ROOT_ADMIN_KUBECONFIG} | grep bmc | grep ${SERVER_NAME})
      ILO_USER=$(kubectl get secrets ${SECRET_NAME} -n gpc-system --template={{.data.username}} --kubeconfig=${ROOT_ADMIN_KUBECONFIG} | base64 -d)
      ILO_PASS=$(kubectl get secrets ${SECRET_NAME} -n gpc-system --template={{.data.password}} --kubeconfig=${ROOT_ADMIN_KUBECONFIG} | base64 -d)
      # Perform iLO Reset
      
      curl -k -u ${ILO_USER}:${ILO_PASS}  -H "Content-Type: application/json" -H "OData-Version: 4.0" https://${ILO_IP}/redfish/v1/Managers/1/Actions/Manager.Reset --data '{"ResetType":"ForceRestart"}' -X POST | jq
      
      # Perform server power cycle, start with power off target server
       
       curl -k -u ${ILO_USER}:${ILO_PASS} -H "Content-Type: application/json" -H "OData-Version: 4.0" -X POST https://${ILO_IP}/redfish/v1/Systems/1/Actions/ComputerSystem.Reset --data '{"ResetType":"ForceOff"}' | jq .
      
      # Verify target server powered off successfully
      
      curl -kqs -u ${ILO_USER}:${ILO_PASS} https://${ILO_IP}/redfish/v1/Systems/1 | jq '.PowerState'
       
      # Power server back
      
      curl -k -u ${ILO_USER}:${ILO_PASS} -H "Content-Type: application/jsonls " -H "OData-Version: 4.0" -X POST https://${ILO_IP}/redfish/v1/Systems/1/Actions/ComputerSystem.Reset --data '{"ResetType":"On"}' | jq .
       
      

Em casos raros, o procedimento de reposição do iLO anterior pode não resolver totalmente o problema. Nesse caso, é necessário voltar a aprovisionar o servidor. Consulte os runbooks OS-P0002 e OS-P0003 para ver os procedimentos detalhados.

Servidores físicos 1.12.2

A atualização do firmware do nó está a falhar na organização do inquilino

Sintomas:

A atualização do nó de metal exposto está bloqueada no estado in-progress há mais de três horas.

Solução alternativa:

Siga os passos no manual de procedimentos SERV-R0005.

Redes 1.12.1

O script de pré-instalação falha em vários comutadores

Sintomas:

O POAP continua a falhar e o registo do POAP mostra uma mensagem como esta:

2024 Feb 27 20:20:25 switch %$ VDC-1 %$ %USER-1-SYSTEM_MSG: S/N[FDO26391GHS]-MAC[98:A2:C0:F8:60:6A] - Running: 'nxos.10.3.1.bin' - /script.sh
2024 Feb 27 20:20:25 switch %$ VDC-1 %$ %USER-1-SYSTEM_MSG: S/N[FDO26391GHS]-MAC[98:A2:C0:F8:60:6A] - Target: 'nxos64-cs.10.3.4a.M.bin' - /script.sh

Não consegue encontrar nxos.10.3.1.bin, mas encontra algo semelhante, como nxos64-cs.10.3.1.F.bin, no diretório bootflash do comutador.

Solução alternativa:

Na máquina de arranque autónomo, conclua os seguintes passos. Tem de concluir estes passos quando o processo de pré-instalação estiver em curso. Se existirem várias pastas /tmp/preinstall-bootstrap-, aplique as alterações à pasta atual que o processo de pré-instalação está a usar. Para tal, verifique os registos do processo de pré-instalação. Se precisar de reiniciar o comando de pré-instalação, esta ação também cria uma nova pasta /tmp/preinstall-bootstrap-.

  1. Aceda à pasta /tmp/preinstall-bootstrap-RANDOM_NUMBER .
  2. Dentro da pasta, encontre o ficheiro poap.py.
  3. Remova completamente a linha com a soma de verificação MD5 neste ficheiro para que head -n 4 poap.py tenha este aspeto:
    #!/bin/env python3
    import glob
    import os
    import pkgutil
  4. No mesmo ficheiro, adicione as seguintes linhas a version_to_image_file:
        "nxos.10.2.1.bin": "nxos64.10.2.1.F.bin",
        "nxos.10.2.2.bin": "nxos64-cs.10.2.2.F.bin",
        "nxos.10.2.3.bin": "nxos64-cs.10.2.3.F.bin",
        "nxos.10.2.4.bin": "nxos64-cs.10.2.4.M.bin",
        "nxos.10.2.5.bin": "nxos64-cs.10.2.5.M.bin",
        "nxos.10.2.6.bin": "nxos64-cs.10.2.6.M.bin",
        "nxos.10.2.7.bin": "nxos64-cs.10.2.7.M.bin",
        "nxos.10.3.1.bin": "nxos64-cs.10.3.1.F.bin",
        "nxos.10.3.2.bin": "nxos64-cs.10.3.2.F.bin",

    A secção do ficheiro atualizado tem o seguinte aspeto:

    version_to_image_file = {
        "nxos.10.2.1.bin": "nxos64.10.2.1.F.bin",
        "nxos.10.2.2.bin": "nxos64-cs.10.2.2.F.bin",
        "nxos.10.2.3.bin": "nxos64-cs.10.2.3.F.bin",
        "nxos.10.2.4.bin": "nxos64-cs.10.2.4.M.bin",
        "nxos.10.2.5.bin": "nxos64-cs.10.2.5.M.bin",
        "nxos.10.2.6.bin": "nxos64-cs.10.2.6.M.bin",
        "nxos.10.2.7.bin": "nxos64-cs.10.2.7.M.bin",
        "nxos.10.3.1.bin": "nxos64-cs.10.3.1.F.bin",
        "nxos.10.3.2.bin": "nxos64-cs.10.3.2.F.bin",
        "nxos.10.3.3.bin": "nxos64-cs.10.3.3.F.bin",
        "nxos.10.3.4a.bin": "nxos64-cs.10.3.4a.M.bin",
    }
  5. Execute md5sum poap.py para obter a soma md5 e adicione-a novamente a poap.py para que head -n 4 poap.py tenha o seguinte aspeto:
    #!/bin/env python3
    #md5sum="396bed5a5f579b80da5fac6edf0b590c"
    import glob
    import os
Redes 1.12.1

A atualização da versão 1.11.x para a 1.12.1 falha porque o controlador pnet não gera com êxito o recurso personalizado (CR) hairpinlink.

Solução alternativa:

  1. Após a atualização, no cluster de administrador raiz, edite o ficheiro clusterroles/pnet-core-backend-controllers-role.
  2. Pesquise hairpinlinks e adicione autorizações create,update,delete ao recurso.
  3. Verifique se os CRs hairpinlinks e hairpinbgpsessions foram gerados.
Servidor NTP 1.12.1

O pod do servidor de transmissão NTP falha após o reinício

Sintomas:

  • Pode ver a seguinte mensagem quando executar o comando kubectl get pods:
    ntp-system                      ntp-relay-server-75bbf                                            1/2     CrashLoopBackOff    123 (5m12s ago)   24h
  • Pode ver um aviso de teste de vitalidade nos registos:
    Warning  BackOff    5m55s (x82 over 28m)      kubelet  Back-off restarting failed container ntp-image in pod ntp-relay-server-75bbf_ntp-system(28e4e28f-4f99-4c6e-8c26-d271f0c7995c)
    Warning  Unhealthy  <invalid> (x37 over 35m)  kubelet  Liveness probe failed: Leap status is Not synchronised

Este problema pode fazer com que os servidores tenham horas dessincronizadas.

Solução alternativa:

  1. Abra o conjunto de daemon ntp para edição:
    kubectl edit daemonset/ntp-relay-server -n ntp-system
  2. Remova a secção livenessProbe: até à linha timeoutSeconds: 30.
  3. Adicione a seguinte secção no contentor ntp-image:
    securityContext:
      capabilities:
        add:
        - SYS_TIME
  4. Isto resulta numa configuração com o seguinte aspeto:

    containers:
      - name: ntp-image
      image: "DOCKER_REGISTRY/DOCKER_REPOSITORY/ntp-relay-server:DOCKER_TAG"
      imagePullPolicy: Always
      securityContext:
        capabilities:
          add:
          - SYS_TIME
  5. Abra a política de NTP do SO para edição:
    kubectl edit ospolicy/bm-ntp-policy -n gpc-system
  6. Remova todos os endereços IP de NTP na secção de políticas. Posteriormente, a política tem o seguinte aspeto:
    policy:
      installPlaybook:
        extraVars:
          ntp_servers: {}
        name: server-ntp-config
        secrets: {}
          
Servidor NTP 1.12.1

ntp-relay-job-xxxx O pod falha após o reinício

Sintomas:

Pode ver a seguinte mensagem quando executar o comando kubectl get pods:

NAMESPACE                       NAME                                                              READY   STATUS              RESTARTS         AGE
ntp-system                      ntp-relay-job-1707869137-kd7p4                                    0/1     CrashLoopBackOff    3 (15s ago)      59s

Este problema é causado pela limpeza inadequada da tarefa de atualização. Não é necessária nenhuma ação, e a tarefa pode ser deixada no estado de ciclo de falhas.

Servidor NTP 1.12.2

O SO do nó tem a hora dessincronizada

Sintomas:

Pode ver a seguinte mensagem nos registos do cluster do sistema:

INFO: task umount:200725 blocked for more than 120 seconds.

Este é um problema para servidores que não mantêm a hora sincronizada. A configuração não está corretamente aplicada e tem de ser alterada para um espaço de nomes diferente para ser aplicada corretamente.

Solução alternativa:

Aplique os seguintes passos a todos os clusters:

  1. Apresente as políticas de SO existentes:
    kubectl get ospolicies -n ntp-system

    O resultado mostra admin-ntp-policy ou worker-ntp-policy.

  2. Com base no nome da política, guarde-a num ficheiro .yaml:
    kubectl get ospolicy/admin-ntp-policy -n ntp-system -o yaml > ntp-ospolicy.yaml
    kubectl get ospolicy/worker-ntp-policy -n ntp-system -o yaml > ntp-ospolicy.yaml
  3. Edite o ficheiro alterando metadata.namespace de ntp-system para gpc-system e removendo status: line e tudo o que se segue.
  4. Aplique o ficheiro editado ao cluster:
    kubectl apply -f ntp-ospolicy.yaml
  5. Aguarde alguns minutos para que o controlador aplique a política do SO.
  6. Estabeleça uma ligação SSH a um dos nós aos quais a OSPolicy se aplica e execute cat /etc/chrony.conf. O resultado mostra uma mensagem no início do ficheiro que indica que é gerido pelo ansible e tem os servidores nist.time.gov ou ntp.pool removidos da configuração.
Cópia de segurança e restauro de VMs 1.12.0

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.

Serviço de base de dados 1.12.0

As cargas de trabalho do serviço de base de dados operam no cluster do sistema

Sintomas:

As cargas de trabalho do serviço de base de dados são aprovisionadas e configuradas em projetos separados no cluster do sistema da nuvem distribuída. Embora os projetos sejam usados para aplicar limites administrativos na Distributed Cloud, não têm impacto na forma como e onde uma carga de trabalho é executada. Por conseguinte, estas cargas de trabalho podem partilhar a infraestrutura de computação subjacente com outras instâncias de base de dados e vários sistemas do plano de controlo.

Solução alternativa:

Para cargas de trabalho de base de dados que requerem isolamento adicional, os utilizadores podem pedir a criação de um conjunto de nós no cluster do sistema. Este conjunto de nós, que tem de ser referenciado durante a criação do projeto, garante que as cargas de trabalho da base de dados são aprovisionadas e executadas numa infraestrutura de computação dedicada. A configuração do conjunto de nós isolado tem de ser concluída pelo operador de infraestrutura.

Serviço de base de dados 1.12.2

AlloyDB Omni DBCluster bloqueado no estado de conciliação

Sintomas:

Para a versão 15.2.1 do AlloyDB Omni, quando são criados vários clusters do AlloyDB Omni no mesmo nó, o último cluster criado fica bloqueado num estado de conciliação. Obtenha registos do PostgreSQL com o comando

kubectl --kubeconfig $ORG_SYSTEM_KUBECONFIG exec -ti $DATABASE_POD_NAME -n $SHADOW_NS -- cat /obs/diagnostic/postgresql.log 
deve ver que a base de dados não consegue ser iniciada com rastreios de pilha semelhantes aos seguintes:

2024-08-19 21:20:15.594 UTC: [9400/walwriter] LOG:  [auxprocess.c:129]  BaseInit started for AuxProcType: walwriter
2024-08-19 21:20:15.595 UTC: [9400/walwriter] LOG:  [auxprocess.c:131]  BaseInit finished for AuxProcType: walwriter
*** SIGABRT received at time=1724102415 on cpu 25 ***
PC: @     0x7f03140a9d3c  (unknown)  (unknown)
2024-08-19 21:20:15.601 UTC: [9399/client backend] alloydbadmin@localhost(33906) [unknown] postgres 66c3b70f.24b7 57P03:FATAL:  [postmaster.c:2601]  the database system is not yet accepting connections
2024-08-19 21:20:15.601 UTC: [9399/client backend] alloydbadmin@localhost(33906) [unknown] postgres 66c3b70f.24b7 57P03:DETAIL:  Consistent recovery state has not been yet reached.
    @     0x5557f3b17e31        208  absl::AbslFailureSignalHandler()
    @     0x7f031405afd0    4677136  (unknown)
    @     0x7f0314e75b20  (unknown)  (unknown)
[PID: 9400] : *** SIGABRT received at time=1724102415 on cpu 25 ***
[PID: 9400] : PC: @     0x7f03140a9d3c  (unknown)  (unknown)
[PID: 9400] :     @     0x5557f3b17f75        208  absl::AbslFailureSignalHandler()
[PID: 9400] :     @     0x7f031405afd0    4677136  (unknown)
[PID: 9400] :     @     0x7f0314e75b20  (unknown)  (unknown)

Solução alternativa:

1. Aceda ao pod da base de dados através da shell

kubectl --kubeconfig $ORG_SYSTEM_KUBECONFIG exec -ti $DATABASE_POD_NAME -n $SHADOW_NS -- bash 
2. Crie manualmente um ficheiro de configuração em /mnt/disks/pgsql/data/postgresql.conf.d/
echo "enable_lux_wal_writer = off" > /mnt/disks/pgsql/data/postgresql.conf.d/55user.conf
3. Reinicie a base de dados para carregar o ficheiro de configuração
supervisorctl restart postgres
4. A base de dados é iniciada com êxito com um resultado semelhante ao seguinte:
Chose default config file: /etc/supervisor/supervisord.conf
postgres: ERROR (not running)
postgres: started

Firewall 1.12.0

Firewall bootstrap secret.yaml contém TO-BE-FILLED

Sintomas:

Durante a implementação do cliente, o nome de utilizador do administrador de ficheiros secret.yaml tem de ser admin. Em vez disso, o ficheiro contém TO-BE-FILLED após a primeira criação. O nome de utilizador admin tem de ser usado para inicializar a primeira configuração na firewall e através do IP de loopback admin\admin

Solução alternativa:

Verifique se TO-BE-FILLED não está presente nas seguintes credenciais da firewall:

  • CELL_ID/CELL_ID-secret.yaml
  • CELL_ID-ab-rack/CELL_ID-secret.yaml
  • CELL_ID-ac-rack/CELL_ID-secret.yaml
  • Verifique se todas as contas de administrador da firewall têm o nome de utilizador admin.

    Firewall 1.12.2

    bm-system-machine-init está a falhar no primeiro nó

    Sintomas:

    As políticas de firewall do IDPS predefinidas não suportam os IPs personalizados da organização para o Direct Connect (DX) Interconnect. Como resultado, a criação de organizações com IPs personalizados falha porque os IPs personalizados não conseguem estabelecer ligação ao Harbor no administrador principal.

    Solução alternativa:

    Para desbloquear o tráfego, crie manualmente um SecurityPolicyRule para os IPs personalizados da organização e implemente-o nas firewalls do IDPS. Siga os passos no runbook FW-G0002 para concluir os seguintes passos:

    1. Crie uma entrada SecurityPolicyRule no sistema virtual de firewall raiz para permitir que os IPs personalizados da organização acedam ao Harbor raiz

        apiVersion: firewall.private.gdc.goog/v1alpha2
        kind: SecurityPolicyRule
        metadata:
          labels:
            firewall.private.gdc.goog/policy-type: idps
          name: root-default-ingress-ORG_NAME-custom
          namespace: root
        spec:
          action: allow
          destination:
            addresses:
            - root-external-group
            zones:
            - vsys1-gpc
          firewallVirtualSystemRef:
            name: vsys1-root
          priority: 150
          profile:
            group: gdch-threat-profile-group
            type: group
          service:
            option: selected
            ports:
            - ports: "123"
              protocol: UDP
            - ports: "1122"
              protocol: TCP
            - ports: "5140"
              protocol: TCP
            - ports: "10443"
              protocol: TCP
          source:
            addresses:
            - org.customIPConfig.externalCIDRs # example: 30.0.0.0/22
            zones:
            - vsys1-cp
        

    2. Crie uma entrada SecurityPolicyRule no vsys da firewall da organização para permitir que a raiz aceda ao APIServer da organização.

        apiVersion: firewall.private.gdc.goog/v1alpha2
        kind: SecurityPolicyRule
        metadata:
          labels:
            firewall.private.gdc.goog/policy-type: idps
          name: ORG_NAME-custom-default-ingress-root
          namespace: ORG_NAME # example: gpu-org-1
        spec:
          action: allow
          destination:
            addresses:
            - org.customIPConfig.externalCIDRs # example: 30.0.0.0/22
            zones:
            - ORG_VSYS_ID-gpc # example: vsys3-gpc
          firewallVirtualSystemRef:
             name: ORG_VSYS_ID-ORG_NAME # example: vsys3-gpu-org-1
          priority: 110
          profile:
            group: gdch-threat-profile-group
            type: group
          service:
            option: selected
            ports:
            - ports: "22"
              protocol: TCP
            - ports: "5140"
              protocol: TCP
            - ports: "6443"
              protocol: TCP
            - ports: "10443"
              protocol: TCP
          source:
            addresses:
            - root-external-group
            zones:
            - ORG_VSYS_ID-cp # example: vsys3-cp
        

    3. Acione a substituição da configuração da firewall para implementar o SecurityPolicyRules.

    Módulo de segurança de hardware 1.12.0
    1.12.1
    1.12.2
    1.12.4

    As licenças de avaliação desativadas do HSM ainda são detetáveis

    Sintomas:

    Devido a um problema conhecido existente no CipherTrust Manager, as licenças de avaliação desativadas continuam a ser detetáveis e podem acionar avisos de expiração falsos.

    Solução alternativa:

    Consulte HSM-R0003 para verificar as licenças normais ativas e eliminar as licenças de avaliação desativadas.

    Módulo de segurança de hardware 1.12.0

    O módulo de segurança de hardware tem um desempenho inesperado ao eliminar um KMS

    Sintomas:

    O módulo de segurança de hardware (HSM) tem um comportamento inesperado quando elimina um KMS CTMKey. Por exemplo, o serviço KMS pode não ser iniciado para a organização.

    Solução alternativa:

    Os utilizadores podem destruir criptograficamente os dados eliminando as chaves do KMS em vez da chave raiz do KMS, o que se manifesta como um CTMKey.

    Módulo de segurança de hardware 1.12.0
    1.12.1
    1.12.2

    O segredo rotativo para módulos de segurança de hardware está num estado desconhecido

    Sintomas:

    Obtenha uma lista de segredos rotativos desconhecidos:

    kubectl get rotatablesecret -A | grep -i unknown

    O resultado pode ter o seguinte aspeto:

    gpc-system     yz-aa-hsm01-kmip-certificate                HSM-0016                                Unknown
    gpc-system     yz-aa-hsm01-nae-certificate                 HSM-0016       3d19h      <invalid>    Unknown
    gpc-system     yz-aa-hsm01-web-certificate                 HSM-0016       2d         <invalid>   Unknown

    Requisitos:

    1. Acesso ao cluster de administrador raiz
    2. A ferramenta jq
    3. Siga o erro IAM-R0004 para gerar o KUBECONFIG para o cluster de administrador raiz.
    4. Siga o erro IAM-R0005 para obter clusterrole/hsm-admin no cluster de administrador raiz.

    Solução alternativa:

    1. Obtenha uma lista dos endereços IP da rede de dados do HSM:
      kubectl --kubeconfig ${KUBECONFIG:?} get hsm -A -o json | jq -r '.items[] | "\(.spec.dataNetwork.ip)"'

      O resultado pode ter o seguinte aspeto:

      10.89.3.2
      10.89.3.3
      10.89.3.4
    2. Para cada um dos endereços IP da rede de dados do HSM do passo anterior:
      1. Exporte o endereço IP para uma variável denominada HSM_DATA_IP:
        export HSM_DATA_IP=HSM_DATA_IP_ADDRESS
      2. Obtenha os certificados do servidor Web (porta 443), nae (porta 9000) e kmip (porta 5696) e examine a validade do certificado:
        openssl s_client -showcerts -connect $HSM_DATA_IP:443 2>/dev/null | openssl x509 -text
        openssl s_client -showcerts -connect $HSM_DATA_IP:9000 2>/dev/null | openssl x509 -text
        openssl s_client -showcerts -connect $HSM_DATA_IP:5696 2>/dev/null | openssl x509 -text

        O resultado pode ter o seguinte aspeto:

        Validity
                    Not Before: Mar 12 20:36:58 2024 GMT
                    Not After : Jun 16 20:36:58 2026 GMT
    3. Siga os passos no manual de procedimentos HSM T0016 para renovar os certificados do servidor, se a data Not After estiver no prazo de 30 dias a partir de hoje.
    Monitorização 1.12.0

    Os certificados do Node Exporter podem não ficar prontos quando cria uma organização

    Sintomas:

    Os certificados não ficam prontos quando cria uma organização:

    $ kubectl --kubeconfig /root/release/user/org-1-system-user-kubeconfig get certificate -n mon-system
    NAME                                  READY   SECRET                                     AGE
    mon-node-exporter-backend-consumers   False   mon-node-exporter-backend-consumers-cert   20h
    mon-node-exporter-backend-providers   False   mon-node-exporter-backend-providers-cert   20h

    Os Secrets continuam a existir devido ao `SecretForwarder`:

    $ kubectl --kubeconfig /root/release/user/org-1-system-user-kubeconfig get secret -n mon-system | grep -E "node-exporter.+cert"
    mon-node-exporter-backend-consumers-cert                                            kubernetes.io/tls                          3      20h
    mon-node-exporter-backend-providers-cert                                            kubernetes.io/tls                          3      20h

    Solução alternativa:

    Pause o Lifecycle Manager para que não volte a criar nem elimine certificados:

    kubectl --kubeconfig /root/release/org-admin/org-1-admin-kubeconfig annotate subcomponent mon-node-exporter -n org-1-system-cluster lcm.private.gdc.goog/paused="true"
    kubectl --kubeconfig /root/release/org-admin/org-1-admin-kubeconfig annotate subcomponent mon-node-exporter -n user-vm-1-cluster lcm.private.gdc.goog/paused="true"
    kubectl --kubeconfig /root/release/org-admin/org-1-admin-kubeconfig annotate subcomponent mon-node-exporter -n user-vm-2-cluster lcm.private.gdc.goog/paused="true"
    kubectl --kubeconfig /root/release/user/org-1-system-user-kubeconfig delete certificate -n mon-system mon-node-exporter-backend-consumers mon-node-exporter-backend-providers

    Tenha em atenção que node-exporter não é reconciliado em clusters de utilizadores.

    Monitorização 1.12.0
    1.12.1
    1.12.2

    A configuração do webhook do ServiceNow faz com que o LCM reconcilie novamente e reverta as alterações feitas aos objetos ConfigMap e Secret no espaço de nomes mon-system.

    Sintomas:

    Configurar o webhook do ServiceNow faz com que a gestão do ciclo de vida (LCM) reconcilie novamente e reverta as alterações feitas ao objeto ConfigMap mon-alertmanager-servicenow-webhook-backend e ao objeto Secret mon-alertmanager-servicenow-webhook-backend no espaço de nomes mon-system.

    Solução alternativa:

    Pause o subcomponente da LCM para permitir que as alterações ocorram sem serem revertidas:

    1. 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_ADMIN_KUBECONFIG e ORG_ADMIN_KUBECONFIG, respetivamente.
    2. Pause o subcomponente LCM num dos seguintes clusters:
      • Pause o subcomponente LCM no cluster de administrador raiz:
        kubectl --kubeconfig $ROOT_ADMIN_KUBECONFIG annotate subcomponent mon-alertmanager-servicenow-webhook -n root lcm.private.gdc.goog/paused="true"
      • Pause o subcomponente LCM no cluster de administração da organização:
        kubectl --kubeconfig $ORG_ADMIN_KUBECONFIG annotate subcomponent mon-alertmanager-servicenow-webhook -n org-1-system-cluster lcm.private.gdc.goog/paused="true"
    Monitorização 1.12.0

    As métricas dos clusters de utilizadores não são recolhidas.

    Sintomas:

    Algumas métricas dos clusters de utilizadores não são recolhidas. Este problema afeta os clusters de VMs de utilizador, mas não o cluster do sistema.

    • Pode ver os seguintes registos do servidor Prometheus:
      prometheus-server ts=2024-02-21T16:07:42.300Z caller=dedupe.go:112 component=remote level=warn remote_name=cortex-remote-write url=http://cortex-tenant.mon-system.svc:9009/push msg="Failed to send batch, retrying" err="server returned HTTP status 500 Internal Server Error: 2 errors occurred:"
    • Pode ver os seguintes registos do inquilino do Cortex:
      cortex-tenant time="2024-02-23T18:03:44Z" level=error msg="proc: src=127.0.0.6:55021 lookup cortex.mon-system.svc on 172.25.38.10:53: no such host"

    Solução alternativa:

    Siga estes passos para resolver o problema:

    1. Obtenha o caminho para o ficheiro kubeconfig do cluster. Guarde o caminho na variável de ambiente KUBECONFIG.
    2. Implemente um serviço de teste nos clusters de VMs de utilizador:
            kubectl --kubeconfig $KUBECONFIG apply -f - &lt&ltEOF
            apiVersion: v1
            kind: Service
            metadata:
              labels:
                app: cortex
              name: cortex
            spec:
              ports:
              - protocol: TCP
                targetPort: 9009
                port: 9009
                name: cortex
              type: ClusterIP
              sessionAffinity: ClientIP
            EOF
            
    3. Reinicie a implementação do inquilino do Cortex:
      kubectl --kubeconfig $KUBECONFIG rollout restart deploy -n mon-system cortex-tenant
    Monitorização 1.12.0

    O Prometheus principal envia métricas para o inquilino do Cortex nos limites do cluster

    Sintomas:

    As métricas destinadas à instância do Grafana do operador de infraestrutura podem estar na instância do Grafana do administrador da plataforma e vice-versa. O problema é causado por pedidos de equilíbrio de carga do ASM em limites de clusters, que têm inquilinos predefinidos diferentes.

    Solução alternativa:

    A solução alternativa requer acesso à origem private-cloud e a capacidade de implementar uma atualização de componentes. Tem de alterar a configuração da malha para restringir o serviço cortex-tenant de modo a receber apenas tráfego do cluster local e implementar o componente ASM.

    1. Abra o ficheiro manifests/plain/asm/1.19/asm-primary-cluster-operator.yaml.
    2. Apresente o campo serviceSettings no campo meshConfig.

      O campo meshConfig tem originalmente o seguinte aspeto:

              ...
              profile: minimal
                revision: 1-19
                meshConfig:
                  localityLbSetting:
                      enabled: false
              ...
            

      Por conseguinte, tem de alterar o campo meshConfig para que se pareça com o seguinte exemplo:

              profile: minimal
                revision: 1-19
                meshConfig:
                  serviceSettings:
                    - settings:
                        clusterLocal: true
                      hosts:
                      - 'cortex-tenant.mon-system.svc.cluster.local'
                  localityLbSetting:
                      enabled: false
            
    3. Implemente o componente ASM no cluster.
    Atualizar 1.12.0

    A atualização do nó falha para NodeOSInPlaceUpgradeCompleted

    Sintomas:

    Durante a atualização da versão 1.11.0 para a 1.11.3, a atualização do nó falha para o NodeOSInPlaceUpgradeCompleted.

    ka logs -n gpc-system os-policy-preflight-os-upgrade-bm-86efcc8en8sh2-6h5cn | grep GDCH-OS-ANSIBLE-CHECK -A 50
    [GDCH-OS-ANSIBLE-CHECK]
    {
      "syntax": {
        "success": true,
        "msg": ""
      },
      "apply": {
        "reachablity": {
          "success": true,
          "msg": ""
        },
        "execution": {
          "success": false,
          "msg": "errors found when simluating play execution on host: 10.3.20.9",
          "tasks": [
            {
              "task": "os/upgrade : Copy GRUB file to BOOT location",
              "error": "Source /boot/efi/EFI/ubuntu/grubx64.efi not found"
            }
          ]
        }
      },
      "diff": null
    } 

    Solução alternativa:

    Inicie sessão na máquina de hardware simples que está a ser atualizada. Verifique se o fstab tem /boot/efi e se o diretório está montado:

    # cat /etc/fstab
           LABEL=cloudimg-rootfs   /        ext4   defaults        0 1
           LABEL=UEFI      /boot/efi       vfat    umask=0077      0 1
    lsblk
    NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda       8:0    0  3.5T  0 disk
    ├─sda1    8:1    0  3.5T  0 part /
    ├─sda2    8:2    0 64.3M  0 part
    ├─sda14   8:14   0    4M  0 part
    └─sda15   8:15   0  106M  0 part 

    Pausa o nodeupgradetask

    1. Execute mount -a e verifique se o diretório está montado:
      # mount -a
      root@mb-aa-bm04:~# ls /boot/efi/
      EFI
    2. Continue com as verificações aqui. Execute os seguintes comandos:
      C
      # Ensure all three cmds prints `Files are identical`
      if [ "$(sha256sum /boot/efi/EFI/ubuntu/shimx64.efi | awk '{ print $1 }')" == "$(sha256sum /boot/efi/EFI/BOOT/BOOTX64.EFI | awk '{ print $1 }')" ]; then echo "Files are identical."; else  echo "Files are different."; fi
      
      if [ "$(sha256sum /boot/efi/EFI/ubuntu/grubx64.efi | awk '{ print $1 }')" == "$(sha256sum /boot/efi/EFI/BOOT/grubx64.efi| awk '{ print $1 }')" ]; then echo "Files are identical."; else  echo "Files are different."; fi
      
      if [ "$(sha256sum /boot/efi/EFI/ubuntu/grub.cfg | awk '{ print $1 }')" == "$(sha256sum /boot/efi/EFI/ubuntu/grub.cfg | awk '{ print $1 }')" ]; then echo "Files are identical."; else  echo "Files are different."; fi
    3. Se nem todos os ficheiros forem idênticos, execute este comando no computador e repita as verificações.
      /usr/local/update-efi-files.sh
    4. Retomar nodeupgradetask
    Atualizar 1.12.0

    A atualização da mudança não consegue executar o comando install add bootflash://..

    Sintomas:

    A mudança de atualização não adiciona o bootflash:

    Conditions:
      Last Transition Time:  2024-01-10T20:06:30Z
      Message:               exception: add and activate package nxos.CSCwh72780-n9k_ALL-1.0.0-9.3.10.lib32_n9000.rpm: nx-api RPC request failed
      with status code 400 and body "{\n\t\"jsonrpc\":\t\"2.0\",\n\t\"error\":\t{\n\t\t\"code\":\t-32602,\n\t\t\"message\":\t\"Invalid params\",\n\t\
      t\"data\":\t{\n\t\t\t\"msg\":\t\"Adding the patch (/nxos.CSCwh72780-n9k_ALL-1.0.0-9.3.10.lib32_n9000.rpm)\\n\\n[###                 ]  10%\\n[#│ #                 []  10%\\n[#####               ]  20%\\n[#######             ]  30%\\n[#########           ]  40%\\n[#########           ]  4
      0%\\n[####################] 100%\\n[####################] 100%\\nInstall operation 21 failed because this patch already exists. at Wed Jan 10 2
      1:00:06 2024\\n\\n\"\n\t\t}\n\t},\n\t\"id\":\t1\n}" for requests "install add bootflash:///nxos.CSCwh72780-n9k_ALL-1.0.0-9.3.10.lib32_n9000.rpm
      activate forced"   

    Solução alternativa:

    Inicie sessão no comutador com falhas e execute o comando de ativação da instalação a partir do comutador no pacote:

    install activate nxos.CSCwh72780-n9k_ALL-1.0.0-9.3.10.lib32_n9000.rpm
    Atualizar 1.12.1, 1.12.2 e 1.12.4

    Quando atualiza da versão 1.11.x para a 1.12.1, a atualização do nó fica bloqueada com o MaintenanceModeHealthCheckReadyerro undrain

    Sintomas:

    A atualização do cluster está suspensa há mais de uma hora. O estado e a especificação do modo de manutenção da máquina de metal exposto não correspondem. Por exemplo, o comando:

    kubectl get baremetalmachines -A  -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name,MaintenanceMode:.spec.maintenanceMode,Status:.status.underMaintenance

    programas:

    root        10.252.135.4   false             true

    A tarefa de verificação prévia da máquina de metal exposto mostra a seguinte mensagem de erro:

    The error was: 'dict object' has no attribute 'stdout'\n\nThe error appears to be in '/playbook/roles/machine_check_common/tasks/main.yaml': line 215, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: Check if bypass the time check in node agent mode\n  ^ here\n"}

    Solução alternativa:

    Use o seguinte comando:

    export KUBECONFIG=${ROOT_OR_ORG_ADMIN_KUBECONFIG}
       kubectl get cluster -A
    kubectl annotate cluster ${CLUSTER_NAME} -n=${CLUSTER_NAMESPACE} "baremetal.cluster.gke.io/bypass-check=ntp"
    Node OS 1.11.3

    O nó de VM fica bloqueado no reinício após a solução manual para o pod os-policy

    Sintomas:

    Uma tarefa de reinício de VM falha após a solução alternativa manual para o pod os-policy. É apresentada a seguinte mensagem:

    ko logs os-policy-preflight-os-reboot-vm-b1fb94147x8r9-nqmvp -n gpc-system
    
    playbook: server-reboot.yaml
    {
        "custom_stats": {},
        "global_custom_stats": {},
        "plays": [
            {
                "play": {
                    "duration": {
                        "end": "2024-01-12T03:50:52.749714Z",
                        "start": "2024-01-12T03:50:42.694226Z"
                    },
                    "id": "5251f140-5a01-5cce-6150-000000000006",
                    "name": "Run OS Upgrade Tasks"
                },
                "tasks": [
                    {
                        "hosts": {
                            "172.20.128.10": {
                                "action": "setup",
                                "changed": false,
                                "msg": "Failed to connect to the host via ssh: ssh: connect to host 172.20.128.10 port 22: Connection timed out",
                                "unreachable": true
                            }
                        },
                        "task": {
                            "duration": {
                                "end": "2024-01-12T03:50:52.749714Z",
                                "start": "2024-01-12T03:50:42.704562Z"
                            },
                            "id": "5251f140-5a01-5cce-6150-00000000000b",
                            "name": "os/reboot : Gather OS distribution information"
                        }
                    }
                ]
            }
        ],
        "stats": {
            "172.20.128.10": {
                "changed": 0,
                "failures": 0,
                "ignored": 0,
                "ok": 0,
                "rescued": 0,
                "skipped": 0,
                "unreachable": 1
            }
        }
    }
    [GDCH-OS-ANSIBLE-CHECK]
    {
      "syntax": {
        "success": true,
        "msg": ""
      },
      "apply": {
        "reachablity": {
          "success": false,
          "msg": "Failed to connect to the host via ssh: ssh: connect to host 172.20.128.10 port 22: Connection timed out"
        },
        "execution": {
          "success": false,
          "msg": "",
          "tasks": null
        }
      },
      "diff": null
    }
    [GDCH-OS-ANSIBLE-CHECK]
    Error: reachability err: Failed to connect to the host via ssh: ssh: connect to host 172.20.128.10 port 22: Connection timed out

    Solução alternativa:

    Parar e iniciar a VM resolve o problema. Siga as instruções para iniciar e parar uma VM.

    Redes superiores 1.12.0

    Um cluster de VMs de utilizador fica bloqueado no estado ContainerCreating com o aviso FailedCreatePodSandBox

    Sintomas:

    Um cluster de VMs de utilizador fica bloqueado. A descrição do pod com o estado ContainerCreating mostra o seguinte aviso:

    # kubectl --kubeconfig path/to/usercluster_kubeconfig describe pods/bm-system-machine-preflight-check-172.204c807f67d2cab60d5d8q58q -n user-vm-1-cluster
    Events:
      Type     Reason                  Age                  From     Message
      ----     ------                  ----                 ----     -------
      Warning  FailedCreatePodSandBox  108s (x62 over 79m)  kubelet  (combined from similar events): Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox "ec4d2021ae9d76adf49a6d3c88d678b3b5d9
    50990daa6ffee3fcfeed8291dfa8": plugin type="cilium-cni" name="cilium" failed (add): Unable to create endpoint: [PUT /endpoint/{id}][429] putEndpointIdTooManyRequests 

    Solução alternativa:

    Siga os passos no manual de procedimentos NET-P0001 para reiniciar o anetd no cluster do sistema.

    Artifact Registry do sistema 1.12.1

    Harbor crash loops after an ABM upgrade

    Sintomas:

    Quando atualiza uma organização raiz de 1.11.1 para 1.12.1, a atualização pode falhar na fase do suplemento com erros de obtenção do Helm:

    harbor-system                   harbor-harbor-harbor-core-657d86bcf8-zl8d2                        1/1     Running             0                 14h
    harbor-system                   harbor-harbor-harbor-core-7d66b4c7c-7g6t4                         0/1     CrashLoopBackOff    155 (76s ago)     12h

    Solução alternativa:

    Envie uma solicitação de apoio técnico. Consulte o artigo Peça apoio técnico para ver detalhes.

    Atualizar 1.12.0

    Vários pods num cluster do sistema podem ficar bloqueados no estado TaintToleration

    Sintomas:

    Durante uma atualização, o subcomponente do Gatekeeper da OPA não é instalado no cluster do sistema. No entanto, as restrições são instaladas e o webhook para as aplicar também.

    Vários pods num cluster do sistema podem ficar bloqueados no estado TaintToleration:

    mon-system                              mon-cortex-pre-upgrade-job-mn29x                              0/1     TaintToleration     0                96m    <none>          zb-aa-bm07    <none>           <none>
    mon-system                              mon-kube-state-metrics-backend-d49b868dc-fmp62                0/2     TaintToleration     0                97m    <none>          zb-aa-bm07    <none>           <none>
    mon-system                              primary-prometheus-shard1-replica0-0                          0/3     TaintToleration     0                103m   <none>          zb-aa-bm07    <none>           <none>
    netapp-trident                          netapp-trident-controller-7ffb4c5f89-rvwjj                    0/5     TaintToleration     0                103m   <none>          zb-aa-bm07    <none>           <none>
    obs-system                              alertmanager-0                                                0/2     TaintToleration     0                98m    <none>          zb-aa-bm07    <none>           <none>
    obs-system                              audit-logs-loki-io-0                                          0/3     TaintToleration     0                97m    <none>          zb-aa-bm07    <none>           <none>
    obs-system                              log-audit-backend-failure-detector-6lgsq                      0/1     TaintToleration     0                105m   <none>          zb-aa-bm07    <none>           <none>
    obs-system                              meta-alertmanager-0                                           0/1     TaintToleration     0                102m   <none>          zb-aa-bm07    <none>           <none>
    obs-system                              meta-alertmanager-servicenow-webhook-5679f48895-ggkg6         0/2     TaintToleration     0                102m   <none>          zb-aa-bm07    <none>           <none>
    platform-obs-obs-system                 grafana-proxy-server-7b6b79f787-2x92t                         0/2     TaintToleration     0                103m   <none>          zb-aa-bm07    <none>           <none>
    vm-system                               gdch-rocky-yum-repo-distributor-zfwp6                         0/1     TaintToleration     0                97m    <none>          zb-aa-bm07    <none>           <none>
    vm-system                               gdch-rocky-yum-repo-server-568768c97b-c9hm2                   0/2     TaintToleration     0                97m    <none>          zb-aa-bm07    <none>           <none>
    Istio 1.12.1

    Pods no estado ImagePullBackOff com o evento Back-off pulling image "auto"

    Sintomas:

    O pod com o nome do contentor istio-proxy não está pronto e tem o estado ImagePullBackOff com o evento Back-off pulling image "auto".

    Solução alternativa:

    1. Verifique se o webhook de mutação istio-revision-tag-default está presente no cluster. Caso contrário, aguarde aproximadamente 10 minutos para ver se o sistema é recuperado automaticamente. Se não for o caso, encaminhe o problema.
    2. Se o webhook de mutação estiver presente, elimine o pod problemático e verifique se volta a ficar disponível. O elemento .spec.containers[].image não pode ser auto. Tem de ter o aspeto de uma imagem real semelhante à seguinte: gcr.io/gke-release/asm/proxyv2:<image version>.
    Registo 1.12.1

    A atualização dos componentes ValidatingWebhookConfigurations, MutatingWebhookConfigurations e MonitoringRules implementados pelo componente de registo pode falhar

    Sintomas:

    Quando atualizar da versão 1.11.1 para a 1.12.1, a atualização de ValidatingWebhookConfigurations, MutatingWebhookConfigurations e MonitoringRules implementados pelo componente de registo pode falhar.

    Solução alternativa:

    1. Certifique-se de que tem o kubectl e consegue aceder ao manual de procedimentos IAM-R0004 para obter o KUBECONFIG para o cluster de administrador raiz.

    2. Elimine ValidatingWebhookConfiguration root-admin-private-logging-validation-webhook do cluster de administrador raiz:

      kubectl delete validatingwebhookconfiguration root-admin-private-logging-validation-webhook
    3. Elimine MutatingWebhookConfiguration root-admin-private-logging-defaulter-webhook do cluster de administrador raiz:

      kubectl delete mutatingwebhookconfiguration root-admin-private-logging-defaulter-webhook
    4. Elimine ValidatingWebhookConfiguration root-admin-logging-webhook do cluster de administrador raiz:

      kubectl delete validatingwebhookconfiguration root-admin-logging-webhook
    5. Elimine MonitoringRule operational-logs-alerts do espaço de nomes infra-obs no cluster de administrador raiz:

      kubectl delete monitoringrule operational-logs-alerts -n infra-obs
    6. Elimine os MonitoringRules audit-logs-alerts, audit-logs-sli-syslog-prober, audit-logs-sli-filelog-prober, audit-logs-sli-fluentbit-to-loki, audit-logs-sli-fluentbit-to-splunk, audit-logs-sli-fluentbit-backlog, audit-logs-sli-loki-ingester-failed-rate, audit-logs-sli-loki-io-up e audit-logs-sli-loki-pa-up do infra-obs namespace no cluster de administrador raiz:

      kubectl delete monitoringrule audit-logs-alerts audit-logs-sli-syslog-prober audit-logs-sli-filelog-prober audit-logs-sli-fluentbit-to-loki audit-logs-sli-fluentbit-to-splunk audit-logs-sli-fluentbit-backlog audit-logs-sli-loki-ingester-failed-rate audit-logs-sli-loki-io-up audit-logs-sli-loki-pa-up -n infra-obs
    7. Confirme que o subcomponente log-admin está pronto no cluster de administrador raiz:

      export RECONCILING="`kubectl get subcomponent log-audit -n root -o json | jq '.status.conditions | .[] | select(.type == "Reconciling") | .status'`" ; if [[ $RECONCILING =~ "False" ]]; then echo "log-audit is ready"; else echo "log-audit is not ready"; fi

      Se for bem-sucedido, o comando imprime log-audit is ready. Caso contrário, a saída é log-audit is not ready.

    8. Confirme que o subcomponente log-admin está pronto no cluster de administrador raiz:

      export RECONCILING="`kubectl get subcomponent log-operational -n root -o json | jq '.status.conditions | .[] | select(.type == "Reconciling") | .status'`" ; if [[ $RECONCILING =~ "False" ]]; then echo "log-operational is ready"; else echo "log-operational is not ready"; fi

      Se for bem-sucedido, o comando imprime log-operational is ready. Caso contrário, a saída é log-operational is not ready.

    Registo 1.12.1

    Registos de auditoria e registos operacionais não recolhidos

    Devido a um problema na tarefa log-infra-backend-preinstall, os registos de auditoria e os registos operacionais do Loki não estão instalados e os registos não são recolhidos.

    Sintomas:

    Pode ver um CrashLoopBackoff no cluster do sistema:

    obs-system                      anthos-log-forwarder-5ghbm                                        2/3     CrashLoopBackOff              135 (3m52s ago)   15h
    Registo 1.12.1

    O agrupamento cortex-ingester mostra um estado OOMKilled

    Sintomas:

    Pode ver um estado OOMKilled para o pod no espaço de nomes mon-system:

    NAMESPACE          NAME                           READY   STATUS      RESTARTS         AGE
    mon-system         cortex-ingester-0              1/2     OOMKilled   6 (3h5m ago)     11h
          

    Solução alternativa:

    Aumente a memória em cada carregador, aumente o número de carregadores ou ambos. Pode fazê-lo implementando um SubcomponentOverride no cluster de administração da organização, conforme mostrado no exemplo seguinte:

    apiVersion: lcm.private.gdc.goog/v1
    kind: SubcomponentOverride
    metadata:
      name: mon-cortex-ingester-override
      namespace: org-1-system-cluster
    spec:
      backend:
        operableParameters:
          ingester:
            resourcesLimit:
              memory: "6Gi" # 6Gi is the default, increase to add more memory to each ingester
            replicas: 4     # 4 is the default, increase to create more ingester instances.
      subComponentRef: mon-cortex
          
    Atualizar 1.12.1

    Quando atualiza da versão 1.11.x para a 1.12.1, um nó do cluster pode não sair do modo de manutenção devido a uma falha na verificação de estado de funcionamento para registy_mirror

    Sintomas:

    Quando atualiza de 1.11.x para 1.12.1, a atualização do nó falha com a seguinte mensagem de erro:

    {
        "lastTransitionTime": "2024-02-13T22:53:36Z",
        "message": "following checks failed, ['check_registry_mirror_reachability_pass']",
        "observedGeneration": 3,
        "reason": "JobStatus",
        "status": "False", <----
        "type": "MaintenanceModeHealthCheckReady"
      },
      

    Solução alternativa:

    Use o seguinte comando:

    kubectl --kubeconfig=${ROOT_OR_ORG_ADMIN_KUBECONFIG} annotate cluster ${CLUSTER_NAME} -n=${CLUSTER_NAMESPACE}  "baremetal.cluster.gke.io/maintenance-mode-ignore-healthcheck=true"
    Atualizar 1.12.1, 1.12.2 e 1.12.4

    A atualização da organização está bloqueada nas fases anthosBareMetal, addOn ou node com falha na verificação check_registry_mirror_reachability_pass.

    Sintomas:

    1. A atualização da organização está bloqueada nas fases anthosBareMetal, addOn ou node, mostrando o estado Unknown para a condição Succeeded.

    kubectl --kubeconfig=${ROOT_ADMIN_KUBECONFIG} get organizationupgrade -n gpc-system ${ORG_NAME} -o yaml
        addOn: {}
        anthosBareMetal:
          conditions:
          - lastTransitionTime: "2024-09-12T12:10:55Z"
            message: 'UPG1300: ABM upgrade expected to finish within 2h0m0s but hasn''t
              after 39h18m50.606521473s, last message was: Cluster upgrade for root-admin
              cluster: in-progress'
            observedGeneration: 1
            reason: ABMUpgradeTimeout
            status: Unknown
            type: Succeeded
          startTime: "2024-09-12T12:10:55Z"
        node:{}
      
    2. O estado da máquina bare metal mostra uma falha na verificação check_registry_mirror_reachability_pass.
    kubectl --kubeconfig=${ROOT_ADMIN_OR_ORG_ADMIN_KUBECONFIG} get baremetalmachines -A -o json | jq '.items[] | select(.status.underMaintenace != .spec.maintenanceMode) | .metadata.name as $name | .status.underMaintenace as $statm | .spec.maintenanceMode as $specm | .status.conditions[] | select(.status == "False") | select(.type == "MaintenaceModeHealthCheckReady")'
        {
          "lastTransitionTime": "2024-02-13T19:17:27Z",
          "message": "following checks failed, ['check_registry_mirror_reachability_pass']",
          "observedGeneration": 3,
          "reason": "JobStatus",
          "status": "False",
          "type": "MaintenaceModeHealthCheckReady" 
        },

    Solução alternativa:

    Use o seguinte comando:

    export KUBECONFIG=${ROOT_OR_ORG_ADMIN_KUBECONFIG}
    kubectl get cluster -A
    kubectl annotate cluster ${CLUSTER_NAME} -n=${CLUSTER_NAMESPACE}  "baremetal.cluster.gke.io/maintenance-mode-ignore-healthcheck=true"
    Atualizar 1.12.1, 1.12.2 e 1.12.4

    A atualização da organização está bloqueada nas fases anthosBareMetal, addOn ou node com um erro de verificação do estado a encontrar netutil.

    Sintomas:

    1. A atualização da organização está bloqueada nas fases anthosBareMetal, addOn ou node, mostrando o estado Unknown para a condição Succeeded.

    kubectl --kubeconfig=${ROOT_ADMIN_KUBECONFIG} get organizationupgrade -n gpc-system ${ORG_NAME} -o yaml
        addOn: {}
        anthosBareMetal:
          conditions:
          - lastTransitionTime: "2024-09-12T12:10:55Z"
            message: 'UPG1300: ABM upgrade expected to finish within 2h0m0s but hasn''t
              after 39h18m50.606521473s, last message was: Cluster upgrade for root-admin
              cluster: in-progress'
            observedGeneration: 1
            reason: ABMUpgradeTimeout
            status: Unknown
            type: Succeeded
          startTime: "2024-09-12T12:10:55Z"
        node:{}
      
    2. As verificações de saúde mostram o erro "netutil" em falta.
    kubectl --kubeconfig=${ROOT_ADMIN_OR_ORG_ADMIN_KUBECONFIG} get healthchecks -n kube-system -o json | jq '.items[].status | select(.lastHealthcheck.lastStatus == "Error")'
    {
      "lastHealthcheck": {
        "error": {
          "code": "500",
          "reason":  "[Errno 2] No such file or directory: /usr/local/bin/abm-tools10.5.23.4/netutil"
        },
        "lastCompletedTime": "2024-09-14T05:11:39Z",
        "lastStatus": "Error",
        "monitoredComponentVersion": "1.28.900-gke.112",
        "version": "1.28.900-gke.112"
      },
      "lastScheduledTime": "2024-09-14T05:26:00Z"
      }

    Solução alternativa:

    Elimine a tarefa do Kubernetes correspondente à verificação de funcionamento com falha

    kubectl --kubeconfig=${ROOT_ADMIN_OR_ORG_ADMIN_KUBECONFIG} get job -A -l Command=machine-health-check --field-selector status.successful=0
    NAMESPACE   NAME                                    COMPLETIONS   DURATION   AGE
    root        bm-system-10.200.0.2-machine-28771464   0/1           67m        67m
    root        bm-system-10.200.0.2-machine-28771524   0/1           7m33s      7m33s
    kubectl --kubeconfig=${ROOT_ADMIN_OR_ORG_ADMIN_KUBECONFIG} delete job -A -l Command=machine-health-check --field-selector status.successful=0
    job.batch "bm-system-10.200.0.2-machine-28771464" deleted
    job.batch "bm-system-10.200.0.2-machine-28771524" deleted
    VM Manager 1.12.1

    Quando atualiza de 1.11.x para 1.12.x, uma VM pode não estar pronta devido a um número excessivo de pods

    Sintomas:

    Quando atualiza de 1.11.x para 1.12.x, uma VM pode não estar pronta devido a um número excessivo de pods, o que bloqueia a drenagem de um nó de metal exposto.

    Solução alternativa:

    Reinicie a VM.

    Servidores físicos 1.12.1

    NodeUpgrade contém várias versões para o mesmo modelo de hardware, o que bloqueia a validação da atualização do firmware

    Sintomas:

    Quando atualiza da versão 1.11.x para a 1.12.1, o ficheiro NodeUpgrade contém várias versões para o mesmo modelo de hardware, o que bloqueia a validação da atualização de firmware.

    Solução alternativa:

    Siga os passos abaixo para modificar a NodeUpgrade CR spec:

    1. Se a atualização for para servidores HPE Gen10 (GDC-4D), remova o firmware do modelo ilo6. Caso contrário, remova o firmware do modelo ilo5.
    2. Secção para preservar a entrada com o redfishVersion mais recente para cada descrição.
      Por exemplo, se existirem ambas as entradas seguintes, mantenha apenas a que tem 2.98 Oct 10 2023:
      - description: SystemBMC
              model: ilo5
              redfishVersion: 2.98 Oct 10 2023
            - description: SystemBMC
              model: ilo5
              redfishVersion: 2.95 Jul 19 2023
    Servidores físicos 1.12.1

    Os servidores estão bloqueados no estado de aprovisionamento

    Sintomas:

    O Ironic atingiu um limite de tempo enquanto aguardava que um servidor fosse ativado. O estado muda de cleaning para clean failed e, em seguida, para available:

    2024-02-23 18:53:00.659 1 DEBUG ironic.api.method [req-3a22ed15-d5cd-4d77-bb0b-0e7a3042e793 - - - - -] Client-side error: Node facc133f-898c-46d4-974b-92e3560892d5 is locked by host 10.128.120.2, please retry after the current operation is completed. format_exception /usr/lib/python3.6/site-packages/ironic/api/method.py:124

    Determine se o interruptor está ativado:

    curl -kqs -u ${ILO_USER}:${ILO_PASS} https://${ILO_IP}/redfish/v1/Systems/1 | jq '.PowerState'

    Se o comutador estiver ativado, a saída devolve "On".

    Solução alternativa:

    Remova o bloco image dos servidores problemáticos e aguarde até que os servidores voltem ao estado disponível. Depois de estarem disponíveis, volte a adicionar o bloco image.

    Servidores físicos 1.12.2

    O arranque do servidor falha

    Sintomas:

    Pode ver uma mensagem de depuração com o seguinte aspeto:

    [DEBUG] GET https://172.22.240.103/redfish/v1/
                2024/03/22 21:46:46 [DEBUG] GET https://172.22.240.111/redfish/v1/Systems/1/
                panic: runtime error: invalid memory address or nil pointer dereference

    Este problema ocorre quando os erros do iLO são ignorados e a resposta HTTP é lida em vez de ser devolvida imediatamente, o que resulta numa desreferenciação de ponteiro nulo.

    Artifact Registry do sistema 1.12.1

    Quando atualiza de 1.11.x para 1.12.1, o estado do cluster do Harbor pode ser unhealthy

    Sintomas:

    Quando atualiza da versão 1.11.1 para a 1.12.1, o estado do cluster do Harbor pode tornar-se unhealthy com o seguinte erro:

    root@abc-bootstrapper:/home/ubuntu# ka get harborclusters -A
    NAMESPACE       NAME     PUBLIC URL                    STATUS
    harbor-system   harbor   https://10.252.119.11:10443   unhealthy

    Passos para o diagnóstico:

    1. Verifique o estado de harborclusters:

      root@abc-bootstrapper:/home/ubuntu# ka get harborclusters -A
      NAMESPACE       NAME     PUBLIC URL                    STATUS
      harbor-system   harbor   https://10.252.119.11:10443   unhealthy
    2. Se estiver em mau estado, verifique o estado dos componentes do Harbor:

      root@abc-bootstrapper:~# ka get pods -n harbor-system
      NAME                                               READY   STATUS    RESTARTS   AGE
      harbor-harbor-harbor-core-68d9764d8c-rgg4h         0/1     Running   0          3d2h
      harbor-harbor-harbor-exporter-54d559fdb8-nzjk7     1/1     Running   0          3d2h
      harbor-harbor-harbor-jobservice-6f5db4779-sqmlc    1/1     Running   0          3d2h
      harbor-harbor-harbor-portal-8458c847dc-z2l6n       1/1     Running   0          3d4h
      harbor-harbor-harbor-registry-7577f5d9d6-qp45c     3/3     Running   0          3d4h
      harbor-operator-harbor-operator-755b5cfc96-x2bxh   1/1     Running   0          3d4h
      harbor-operator-redisoperator-bf96ffc59-5d457      1/1     Running   0          3d4h
      harbor-operator-redisoperator-bf96ffc59-tbd8j      1/1     Running   0          3h38m
      harbor-operator-redisoperator-bf96ffc59-vlqfl      1/1     Running   0          3h38m
      pg-harbor-db-0                                     0/3     Pending   0          3h37m
      pg-harbor-db-monitor-776b946c74-c7pt9              0/1     Pending   0          3h38m
      rfr-harbor-redis-0                                 1/1     Running   0          3d4h
      rfr-harbor-redis-1                                 1/1     Running   0          3d4h
      rfr-harbor-redis-2                                 1/1     Running   0          3h37m
      rfs-harbor-redis-64d9d8df4f-fds79                  1/1     Running   0          3d4h
      rfs-harbor-redis-64d9d8df4f-p9l9h                  1/1     Running   0          3d3h
      rfs-harbor-redis-64d9d8df4f-x5x8c                  1/1     Running   0          3h38m
    3. Se harbor-core e pg-harbor-db não estiverem prontos, verifique o estado de harbor-db:

      root@abc-bootstrapper:~# ka get dbclusters.postgresql.dbadmin.gdc.goog harbor-db -n harbor-system
      NAME        PRIMARYENDPOINT   PRIMARYPHASE   DBCLUSTERPHASE
      harbor-db   172.20.0.146      InProgress     DBClusterReconciling
    4. Se o harbor-db estiver no modo InProgress, verifique se algum nó root-admin-control-plane está no modo UNDERMAINTENANCE.

      root@abc-bootstrapper:~# ka get nodepool -A
      NAMESPACE   NAME                            READY   RECONCILING   STALLED   UNDERMAINTENANCE   UNKNOWN
      org-1       admin-control-plane-node-pool   0       0             0         0                  0
      root        root-admin-control-plane        3       0             0         1                  0

      Espera-se que os nós estejam no modo de manutenção durante uma atualização. Se um nó estiver em manutenção, pode não ter recursos suficientes para agendar harbor-db.

    Solução alternativa:

    Para corrigir o problema, siga estes passos:

    1. Definir KUBECONFIG

      :
      export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
    2. Reduza a escala dos controladores de DBs:

      kubectl scale --replicas=0 deployment -n dbs-fleet-system fleet-controller-manager
      kubectl scale --replicas=0 deployment -n dbs-postgres-system pg-controller-manager
    3. Defina o nome da classe de prioridade como system-cluster-critical ou system-node-critical no modelo de agrupamento:

      kubectl patch statefulset pg-harbor-db -n harbor-system --type='json' \
        -p='[{"op": "add", "path": "/spec/template/spec/priorityClassName", "value": "system-cluster-critical"}]'
    4. Reiniciar o pod pg-harbor-db:

      kubectl delete pods -n harbor-system pg-harbor-db-0
    5. Depois de verificar se o harborcluster está em bom estado, aumente novamente a escala dos controladores dbs:

            kubectl scale --replicas=1 deployment -n dbs-fleet-system fleet-controller-manager
            kubectl scale --replicas=1 deployment -n dbs-postgres-system pg-controller-manager
    Artifact Registry do sistema 1.12.2

    O pod do serviço de tarefas não está pronto

    Sintomas:

    O pod do serviço de tarefas tem problemas em ficar pronto:

    Events:
      Type     Reason     Age                       From     Message
      ----     ------     ----                      ----     -------
      Warning  Unhealthy  35m (x8153 over 3d16h)    kubelet  Readiness probe failed: Get "https://172.16.1.142:8443/api/v1/stats": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
      Warning  Unhealthy  10m (x60 over 13h)        kubelet  Readiness probe failed: Get "https://172.16.1.142:8443/api/v1/stats": context deadline exceeded
      Normal   Pulled     5m47s (x1733 over 3d16h)  kubelet  Container image "gcr.io/private-cloud-staging/goharbor/harbor-jobservice:v2.8.4-gke.7" already present on machine
      Warning  BackOff    43s (x21352 over 3d16h)   kubelet  Back-off restarting failed container jobservice in pod harbor-harbor-harbor-jobservice-6f59fbf974-q9h9g_harbor-system(51ab9697-98b9-4315-9ab9-f67b19a28d0a)

    Solução alternativa:

    1. Reinicie o pod do serviço de tarefas.
      kubectl delete pod POD_NAME -n NAMESPACE

      O resultado tem o seguinte aspeto:

      Events:
        Type    Reason     Age    From               Message
        ----    ------     ----   ----               -------
        Normal  Scheduled  2m20s  default-scheduler  Successfully assigned harbor-system/harbor-harbor-harbor-jobservice-6f59fbf974-p872s to zx-ab-bm02
        Normal  Pulling    2m15s  kubelet            Pulling image "gcr.io/private-cloud-staging/goharbor/harbor-jobservice:v2.8.4-gke.7"
        Normal  Pulled     2m12s  kubelet            Successfully pulled image "gcr.io/private-cloud-staging/goharbor/harbor-jobservice:v2.8.4-gke.7" in 3.25s (3.25s including waiting)
        Normal  Created    2m12s  kubelet            Created container jobservice
        Normal  Started    2m12s  kubelet            Started container jobservice
    2. No programa de arranque, obtenha o estado da organização:
      kubectl get org -A

      O resultado pode ter o seguinte aspeto:

      NAMESPACE    NAME    CURRENT VERSION   DESIRED VERSION   READY
      gpc-system   org-1   1.12.1-gdch.402   1.12.1-gdch.402   True
      gpc-system   org-2   1.12.1-gdch.402   1.12.1-gdch.402   True
      gpc-system   root    1.12.1-gdch.402   1.12.1-gdch.402   True
    Monitorização 1.12.1

    Quando atualiza da versão 1.11.x para a 1.12.1, a eliminação do contentor do Cortex pode falhar

    Sintomas:

    Quando atualiza da versão 1.11.1 para a 1.12.1, a eliminação do contentor do Cortex pode falhar com o seguinte erro:

            upgrade_post_root_org_validation.go:74: unable to create cortex client to check metrics creating Cortex client failed: can't make a metrics API because of an error getting the Cortex pod: unable to find any matching cortex pods using list options / label selector: {TypeMeta:{Kind: APIVersion:} LabelSelector:app=cortex FieldSelector: Watch:false AllowWatchBookmarks:false ResourceVersion: ResourceVersionMatch: TimeoutSeconds: Limit:0 Continue: SendInitialEvents:}
            upgrade_post_root_org_validation.go:117: Bucket(s) not ready: 3 errors occurred:
                    * Bucket "obs-system/cortex-metrics-alertmanager" not ready
                    * Bucket "obs-system/cortex-metrics-blocks" not ready
                    * Bucket "obs-system/cortex-metrics-ruler" not ready

    Solução alternativa:

    Siga os passos abaixo para eliminar à força buckets:

    1. Conclua os passos na tarefa de esforço MON-R0017 para aceder à IU do StorageGRID.
    2. Navegue para os bucket na IU.
    3. Clique no botão Eliminar objetos no contentor para eliminar os dados.
    Monitorização 1.12.0
    1.12.1
    1.12.2

    A classe de armazenamento de métricas está definida incorretamente na configuração

    Sintomas:

    O objeto StatefulSet do Prometheus está configurado incorretamente com a classe de armazenamento standard em vez de standard-rwo. Este problema faz com que o arranque do objeto StatefulSet do Anthos Prometheus do componente de monitorização falhe.

    O problema ocorre porque o reconciliador ObservabilityPipeline só define este valor na primeira instalação e o reconciliador ObsProjectInfra monitoriza os recursos personalizados do cluster.

    Solução alternativa:

    Reinicie a implementação do fleet-admin-controller no cluster de administrador da organização para resolver o problema.

    Monitorização 1.12.2

    O subcomponente mon-common não implementa a telemetria do Istio

    Sintomas:

    O subcomponente mon-common tem de implementar um objeto de telemetria do Istio no cluster de administrador da organização para impedir o registo de auditoria de todos os pedidos do Cortex. No entanto, o ficheiro de manifesto não está incluído no ficheiro de compilação.

    Solução alternativa:

    Siga os passos abaixo para implementar o objeto de telemetria do Istio no cluster de administrador da organização:

    1. Crie um ficheiro YAML que defina o recurso personalizado (CR) de telemetria do Istio no espaço de nomes mon-system do cluster de administrador da organização:

      # Disable access logging from workloads internal to GDCH.
      # Telemetry CR to disable Istio access logs from obs-system namespace.
      apiVersion: telemetry.istio.io/v1alpha1
      kind: Telemetry
      metadata:
        name: disable-audit-logging
        namespace: mon-system
      spec:
        accessLogging:
          - providers:
            - name: otel
            disabled: true
    2. Aplique o ficheiro de manifesto ao cluster de administrador da organização no espaço de nomes mon-system:

      kubectl apply -f disable-audit-logging.yaml
    Monitorização 1.12.0
    1.12.1
    1.12.2

    O ConfigMap é repostomon-prober-backend-prometheus-config

    Sintomas:

    • O alerta MON-A0001 é acionado.
    • O ConfigMap mon-prober-backend-prometheus-config é reposto para não incluir tarefas de sondagem, por exemplo:
            apiVersion: v1
            data:
              prometheus.yaml: |
                remote_write:
                - url: http://cortex-tenant.mon-system.svc:9009/push
                  name: cortex-tenant
            kind: ConfigMap
            metadata:
              creationTimestamp: "2024-06-26T14:55:07Z"
              name: mon-prober-backend-prometheus-config
              namespace: mon-system
              resourceVersion: "6606787"
              uid: 1a495af0-1fdc-40b8-845b-4976e3b0f899
            

    Solução alternativa:

    Siga estes passos para resolver o problema:

    1. Defina as seguintes variáveis de ambiente:
      • KUBECONFIG: o caminho para o ficheiro kubeconfig no cluster.
      • TARGET_CLUSTER: o nome do cluster onde está a resolver o problema.
    2. Pause o subcomponente mon-prober em todos os clusters:
            kubectl --kubeconfig $KUBECONFIG annotate subcomponent mon-prober -n $TARGET_CLUSTER lcm.private.gdc.goog/paused=true
            

      Por exemplo:

            kubectl --kubeconfig ~/root-admin-kubeconfig annotate subcomponent mon-prober -n my-org lcm.private.gdc.goog/paused=true
            
    3. Reinicie o controlador do administrador do MON em cada cluster de administrador:
            kubectl --kubeconfig $KUBECONFIG rollout restart deploy -n obs-system mon-admin-backend-controller
            

      O Prober ConfigMap é preenchido à medida que cada teste é registado.

    4. Siga o manual de procedimentos MON-R2009 para silenciar o alerta MON-A0001, Blackbox monitoring metrics pipeline down, porque este alerta vai continuar a ser acionado.
    Plataforma do nó 1.12.1

    Quando atualiza da versão 1.11.x para a 1.12.x, um pod de transferência de imagens de comutação pode ficar bloqueado no estado ErrImagePull

    Sintomas:

    Quando atualiza de 1.11.x para 1.12.x, um pod de transferência de imagens de comutação pode ficar bloqueado no estado ErrImagePull com o seguinte aviso:

     Warning  Failed   145m (x4 over 169m)   kubelet  Failed to pull image "gcr.io/private-cloud-staging/switch-image-downloader:1.12.1-gdch.330": failed to pull and unpack image "gcr.io/private-cloud-staging/switch-image-downloader:1.12.1-gdch.330": failed to resolve reference "gcr.io/private-cloud-staging/switch-image-downloader:1.12.1-gdch.330": failed to do request: Head "https://10.252.119.4:5000/v2/library/private-cloud-staging/switch-image-downloader/manifests/1.12.1-gdch.330?ns=gcr.io": dial tcp 10.252.119.4:5000: connect: no route to host
      Warning  Failed   45m (x262 over 25h)   kubelet  Failed to pull image "gcr.io/private-cloud-staging/switch-image-downloader:1.12.1-gdch.330": failed to pull and unpack image "gcr.io/private-cloud-staging/switch-image-downloader:1.12.1-gdch.330": failed to resolve reference "gcr.io/private-cloud-staging/switch-image-downloader:1.12.1-gdch.330": pulling from host 10.252.119.11:10443 failed with status code [manifests 1.12.1-gdch.330]: 401 Unauthorized
      Normal   Pulling  40m (x287 over 26h)   kubelet  Pulling image "gcr.io/private-cloud-staging/switch-image-downloader:1.12.1-gdch.330"
      Normal   BackOff  22s (x6504 over 25h)  kubelet  Back-off pulling image "gcr.io/private-cloud-staging/switch-image-downloader:1.12.1-gdch.330"

    Solução alternativa:

    Para corrigir o problema, reetiquete a imagem pnet-core-switch-image-downloader para switch-image-downloader.

    Plataforma do nó 1.12.1

    Quando atualiza da versão 1.11.x para a 1.12.1, a firewall do anfitrião bloqueia a transferência da imagem do comutador

    Sintomas:

    Quando atualiza da versão 1.11.x para a 1.12.1, a firewall do anfitrião bloqueia a transferência da imagem do comutador devido a uma incompatibilidade das interfaces usadas pela firewall do anfitrião.

    Solução alternativa:

    Aplique a seguinte solução alternativa antes de fazer a atualização, apenas se estiver a atualizar da versão 1.11.x para a 1.12.x.

    1. Atualize os clusters de administrador principal e de administrador da organização.
      1. Obtenha o nome e o espaço de nomes do conjunto de nós para os nós bare metal do administrador raiz e os nós bare metal do administrador da organização. Para o cluster root-admin, use o kubeconfig root-admin. O comando seguinte apresenta um inventário das máquinas e filtra a lista por máquinas de metal nu:
        kubectl --kubeconfig=KUBECONFIG  get inventorymachines -l cluster.private.gdc.goog/provisioner=baremetal-provisioner.cluster.private.gdc.goog -o json | jq -c -r '.items[].spec.nodePoolRef | [.name, .namespace] | @csv | sub("\"";"";"g")' | sort | uniq
        O resultado mostra o nome do conjunto de nós e o espaço de nomes:
        admin-control-plane-node-pool,org-1
        root-admin-control-plane,root

        Os valores na saída correspondem ao seguinte:

        • ORG_ADMIN_NODEPOOL_NAME: admin-control-plane-node-pool
        • ORG_ADMIN_NODEPOOL_NAMESPACE: org-1
        • ROOT_ADMIN_NODEPOOL_NAME: root-admin-control-plane
        • ROOT_ADMIN_NODEPOOL_NAMESPACE: root
      2. Crie os seguintes objetos no cluster root-admin e org-admin para mudar o nome de eth0 para mgmt0 nos nós:

        apiVersion: system.private.gdc.goog/v1alpha1
        kind: AnsiblePlaybook
        metadata:
          name: eth0-to-mgmt0-int-rename
          namespace: gpc-system
        spec:
          playbook: |
            - name: Rename interface from eth0 to mgmt0
              hosts: all
              gather_facts: no
              tasks:
              - name: Rename interface in netplan file
                ansible.builtin.lineinfile:
                  path: /etc/netplan/50-cloud-init.yaml
                  regexp: '^(.*)set-name: eth0(.*)$'
                  line: '\1set-name: mgmt0\2'
                  backrefs: true
                register: netplan
              - name: Disable cloud-init network configuration
                ansible.builtin.lineinfile:
                  path: /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
                  line: 'network: {config: disabled}'
                  state: present
                  create: true
              - name: Restart netplan
                command: netplan apply
                when: netplan.changed
        ---
        apiVersion: system.private.gdc.goog/v1alpha1
        kind: OSPolicy
        metadata:
          name: interface-renaming
          namespace: gpc-system
          labels:
            ospolicy.system.private.gdc.goog/override-maintenance: "true"
        spec:
          interval:
            period: 1m
          inventory:
          - apiVersion: baremetal.cluster.gke.io/v1
            kind: NodePool
            name: ${ORG_ADMIN_NODEPOOL_NAME}
            namespace: ${ORG_ADMIN_NODEPOOL_NAMESPACE}
          - apiVersion: baremetal.cluster.gke.io/v1
            kind: NodePool
            name: ${ROOT_ADMIN_NODEPOOL_NAME}
            namespace: ${ROOT_ADMIN_NODEPOOL_NAMESPACE}
          policy:
            installPlaybook:
              name: eth0-to-mgmt0-int-rename
              
      3. Os campos NODEPOOL_NAME e NODEPOOL_NAMESPACE são preenchidos com a lista de todos os nodepools no cluster respetivo quando o ficheiro YAML anterior é implementado.

        Um exemplo de um ficheiro YAML para o cluster de administrador raiz com os nomes reais do grupo de nós do administrador raiz e do grupo de nós do administrador da organização pode ter o seguinte aspeto:

        apiVersion: system.private.gdc.goog/v1alpha1
        kind: AnsiblePlaybook
        metadata:
          name: eth0-to-mgmt0-int-rename
          namespace: gpc-system
        spec:
          playbook: |
            - name: Rename interface from eth0 to mgmt0
              hosts: all
              gather_facts: no
              tasks:
              - name: Rename interface in netplan file
                ansible.builtin.lineinfile:
                  path: /etc/netplan/50-cloud-init.yaml
                  regexp: '^(.*)set-name: eth0(.*)$'
                  line: '\1set-name: mgmt0\2'
                  backrefs: true
                register: netplan
              - name: Disable cloud-init network configuration
                ansible.builtin.lineinfile:
                  path: /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
                  line: 'network: {config: disabled}'
                  state: present
                  create: true
              - name: Restart netplan
                command: netplan apply
                when: netplan.changed
        ---
        apiVersion: system.private.gdc.goog/v1alpha1
        kind: OSPolicy
        metadata:
          name: interface-renaming
          namespace: gpc-system
          labels:
            ospolicy.system.private.gdc.goog/override-maintenance: "true"
        spec:
          interval:
            period: 1m
          inventory:
          - apiVersion: baremetal.cluster.gke.io/v1
            kind: NodePool
            name: admin-control-plane-node-pool
            namespace: org-1
          - apiVersion: baremetal.cluster.gke.io/v1
            kind: NodePool
            name: root-admin-control-plane
            namespace: root
          policy:
            installPlaybook:
              name: eth0-to-mgmt0-int-rename
      4. Aplique o ficheiro YAML ao cluster de administrador raiz:
        kubectl --kubeconfig=ROOT_ADMIN_KUBECONFIG  -f YAML_FILE_NAME
    2. Atualize o cluster do sistema:
      1. Obtenha um inventário das máquinas e filtre a lista por máquinas de metal nu:
        kubectl --kubeconfig=_ORG_ADMIN_KUBECONFIG  get inventorymachines -l cluster.private.gdc.goog/provisioner=baremetal-provisioner.cluster.private.gdc.goog -o json | jq -c -r '.items[].spec.nodePoolRef | [.name, .namespace] | @csv | sub("\"";"";"g")' | sort | uniq
        O resultado tem o seguinte aspeto:
        worker-node-pool-o1-highgpu1-48-gdc-metal,org-1-system-cluster

        Os valores na saída correspondem ao seguinte:

        • SYSTEM_CLUSTER_NODEPOOL_NAME: worker-node-pool-o1-highgpu1-48-gdc-metal
        • SYSTEM_CLUSTER_NODEPOOL_NAMESPACE: org-1-system-cluster
      2. Os campos NODEPOOL_NAME e NODEPOOL_NAMESPACE são preenchidos a partir da lista de resultados do comando anterior.

      3. Crie os seguintes objetos no cluster do sistema para mudar o nome de eth0 para mgmt0 nos nós e atualizar a política do SO:
        apiVersion: system.private.gdc.goog/v1alpha1
        kind: AnsiblePlaybook
        metadata:
          name: eth0-to-mgmt0-int-rename
          namespace: gpc-system
        spec:
          playbook: |
            - name: Rename interface from eth0 to mgmt0
              hosts: all
              gather_facts: no
              tasks:
              - name: Rename interface in netplan file
                ansible.builtin.lineinfile:
                  path: /etc/netplan/50-cloud-init.yaml
                  regexp: '^(.*)set-name: eth0(.*)$'
                  line: '\1set-name: mgmt0\2'
                  backrefs: true
                register: netplan
              - name: Disable cloud-init network configuration
                ansible.builtin.lineinfile:
                  path: /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
                  line: 'network: {config: disabled}'
                  state: present
                  create: true
              - name: Restart netplan
                command: netplan apply
                when: netplan.changed
        ---
        apiVersion: system.private.gdc.goog/v1alpha1
        kind: OSPolicy
        metadata:
          name: interface-renaming
          namespace: gpc-system
          labels:
            ospolicy.system.private.gdc.goog/override-maintenance: "true"
        spec:
          interval:
            period: 1m
          inventory:
          - apiVersion: baremetal.cluster.gke.io/v1
            kind: NodePool
            name: ${SYSTEM_CLUSTER_NODEPOOL_NAME}
            namespace: ${SYSTEM_CLUSTER_NODEPOOL_NAMESPACE}
          policy:
            installPlaybook:
              name: eth0-to-mgmt0-int-rename

        Um exemplo de ficheiro YAML para o cluster do sistema com os nomes reais dos conjuntos de nós pode ter o seguinte aspeto:

        apiVersion: system.private.gdc.goog/v1alpha1
        kind: AnsiblePlaybook
        metadata:
          name: eth0-to-mgmt0-int-rename
          namespace: gpc-system
        spec:
          playbook: |
            - name: Rename interface from eth0 to mgmt0
              hosts: all
              gather_facts: no
              tasks:
              - name: Rename interface in netplan file
                ansible.builtin.lineinfile:
                  path: /etc/netplan/50-cloud-init.yaml
                  regexp: '^(.*)set-name: eth0(.*)$'
                  line: '\1set-name: mgmt0\2'
                  backrefs: true
                register: netplan
              - name: Disable cloud-init network configuration
                ansible.builtin.lineinfile:
                  path: /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
                  line: 'network: {config: disabled}'
                  state: present
                  create: true
              - name: Restart netplan
                command: netplan apply
                when: netplan.changed
        ---
        apiVersion: system.private.gdc.goog/v1alpha1
        kind: OSPolicy
        metadata:
          name: interface-renaming
          namespace: gpc-system
          labels:
            ospolicy.system.private.gdc.goog/override-maintenance: "true"
        spec:
          interval:
            period: 1m
          inventory:
          - apiVersion: baremetal.cluster.gke.io/v1
            kind: NodePool
            name: worker-node-pool-o1-highgpu1-48-gdc-metal
            namespace: org-1-system-cluster
          policy:
            installPlaybook:
              name: eth0-to-mgmt0-int-rename
      4. Aplique o ficheiro YAML ao cluster de administrador da organização:
        kubectl --kubeconfig=ORG_ADMIN_KUBECONFIG  -f YAML_FILE_NAME
    Redes inferiores 1.12.2

    Os comutadores de rede pré-carregados com uma versão inferior a 9.3.10 podem não conseguir arrancar

    Sintomas:

    Os comutadores de rede pré-carregados com uma versão inferior a 9.3.10 não conseguem arrancar, uma vez que a versão esperada do comutador é 10.3(4a).

    Solução alternativa:

    Atualize manualmente o firmware do comutador de 9.3.5 para 9.3.10 e, em seguida, de 9.3.10 para 10.3.4a.

    Redes inferiores 1.12.2

    Algumas ligações ao nó org-admin excedem o tempo limite

    Sintomas:

    As ligações são interrompidas no comutador porque os comutadores não têm a configuração mais recente devido a certificados expirados no comutador.

    Solução alternativa:

    1. Rode os certificados no comutador.
    2. Ative os novos certificados:
      1. nxapi certificate httpskey keyfile bootflash:api-private-key.pem
      2. nxapi certificate httpscrt certfile bootflash:api-certificate.pem
      3. nxapi certificate enable
    Armazenamento de ficheiros e blocos 1.12.1
    1.12.2
    1.12.4

    Quando atualizar da versão 1.11.1 para a 1.12.1, 1.12.2 ou 1.12.4, a implementação do subcomponente file-netapp-trident pode falhar

    Sintomas:

    O subcomponente de configuração de chaves unificada do Linux (LUKS) não é reimplementado durante a atualização. Para verificar o subcomponente file-netapp-trident:

    1. Definir aliases:
      alias ka='kubectl --kubeconfig=/path/to/root-admin/root-admin-kubeconfig' 
      alias ko='kubectl --kubeconfig=/path/to/org-admin/org-admin-kubeconfig'
    2. Obtenha o subcomponente:
      ka get subcomponent -n root file-netapp-trident -o yaml
      ko get subcomponent -n root file-netapp-trident -o yaml

    O resultado pode ter o seguinte aspeto:

    conditions:
      - lastTransitionTime: "2024-03-28T01:37:20Z"
        message: 'Reconciliation error: E0100 - deploy: failed to install chart: release
          file-netapp-trident-backend failed, and has been uninstalled due to atomic being
          set: cannot patch "standard-rwo" with kind StorageClass: StorageClass.storage.k8s.io
          "standard-rwo" is invalid: parameters: Forbidden: updates to parameters are
          forbidden. && cannot patch "standard-block" with kind StorageClass: StorageClass.storage.k8s.io
          "standard-block" is invalid: parameters: Forbidden: updates to parameters are
          forbidden.'
        observedGeneration: 1
        reason: ReconciliationError
        status: "True"
        type: Reconciling 

    Neste exemplo, falharam duas classes de armazenamento: standard-rwo e standard-block.

    Solução alternativa:

    1. Elimine o StorageClasses que a tarefa não conseguiu criar, como standard-rwo, standard-block, standard-rwo-non-luks e standard-block-non-luks.
    2. Acione a recriação do StorageClasses reiniciando o oclcm-backend-controller para o seu cluster (controlador de administrador principal para clusters de administrador principal e de organização, controlador de administrador de organização para clusters de sistema e de utilizador).
    3. Para a versão 1.12.4, confirme que as classes de armazenamento instaladas têm a anotação disk.gdc.goog/luks-encrypted: definida como verdadeira (excluindo as classes de armazenamento não LUKS). Se a anotação não estiver definida como verdadeira, repita os passos 1 e 2.
    4. Reinicie a implementação do netapp-trident e o netapp-trident DaemonSet no cluster.
    5. Verifique se o segredo LUKS foi criado para os seus recursos PersistentVolumeClaim (PVC). Cada PVC tem de ter um segredo no formato g-luks-$pvc_name.
    6. Verifique se o subcomponente file-netapp-trident não tem nenhum erro no estado.
    Armazenamento de objetos 1.12.2

    Os contentores de armazenamento de objetos podem não estar prontos após a atualização da organização raiz

    Sintomas:

    Após atualizar a organização raiz de 1.12.1 para 1.12.x, a validação pós-atualização falha com o seguinte erro:

    upgrade_post_root_org_validation.go:121: Bucket(s) not ready: 8 errors occurred:
                    * Bucket "atat-system/invoice-export-bucket" not ready
                    * Bucket "mon-system/cortex-metrics-alertmanager" not ready
                    * Bucket "mon-system/cortex-metrics-blocks" not ready
                    * Bucket "mon-system/cortex-metrics-ruler" not ready
                    * Bucket "obs-system/audit-logs-loki-io" not ready
                    * Bucket "obs-system/cortex-metrics-alertmanager" not ready
                    * Bucket "obs-system/cortex-metrics-blocks" not ready
                    * Bucket "obs-system/cortex-metrics-ruler" not ready
          

    Solução alternativa:

    Adicione manualmente o finalizador antes de iniciar a atualização.

    Gestão de clusters 1.12.1 e 1.12.2

    Os clusters de utilizadores com a versão 1.27.x do Kubernetes podem ter node pools que não são inicializados

    Sintomas:

    Os conjuntos de nós nos clusters de utilizadores executados na versão 1.27.x do Kubernetes podem não ser inicializados, o que faz com que o cluster de utilizadores não processe cargas de trabalho de contentores.

    Solução alternativa:

    Não crie um cluster de utilizador com a versão 1.27.x do Kubernetes.

    Máquinas virtuais 1.12.0

    A tradução de imagens não consegue obter pacotes quando a imagem de origem tem predefinições

    Sintomas:

    A importação de imagens de VMs falha no passo de tradução de imagens se uma imagem de origem do Ubuntu contiver origens de APT predefinidas em sources.list.

    Solução alternativa:

    Certifique-se de que o diretório /var/lib/apt/lists/ está vazio na imagem de origem.

    Máquinas virtuais 1.12.2

    Os pods do importador estão a falhar ou estão bloqueados

    Sintomas:

    Aceda a uma lista de pods do importador:

    kubectl get pods -A | grep import 

    O resultado pode ter o seguinte aspeto:

    user-vm-1-cluster               importer-vm-1b19e25c-disk-8dwzz                                   0/1     ContainerCreating      0                2d9h
    user-vm-1-cluster               importer-vm-72b96d39-disk-frv4f                                   0/1     CreateContainerError   124 (43h ago)    2d9h
    user-vm-1-cluster               importer-vm-c7a7a320-disk-qjgt2                                   0/1     CreateContainerError   124 (43h ago)    2d9h
    user-vm-2-cluster               importer-vm-06ca7e94-disk-b66fz                                   0/1     CreateContainerError   124 (43h ago)    2d9h
    user-vm-2-cluster               importer-vm-7e63b71b-disk-jxqfz                                   0/1     CreateContainerError   116 (43h ago)    2d9h
    user-vm-2-cluster               importer-vm-e0651556-disk-k8scf                                   0/1     CreateContainerError   123 (43h ago)    2d9h

    O registo pode apresentar um evento como o seguinte:

    Events:
      Type     Reason              Age                      From                     Message
      ----     ------              ----                     ----                     -------
      Warning  FailedAttachVolume  2m14s (x1630 over 2d9h)  attachdetach-controller  AttachVolume.Attach failed for volume "pvc-2000efe0-b4a0-4856-899b-7e0c9fd33405" : rpc error: code = Unknown desc = error publishing ontap-san driver: problem mapping LUN /vol/trident_pvc_2000efe0_b4a0_4856_899b_7e0c9fd33405/lun0: results: {http://www.netapp.com/filer/admin results}
    status,attr: failed
    reason,attr: No such LUN exists
    errno,attr: 9017
    lun-id-assigned: nil

    Solução alternativa:

    1. Obtenha o nome PersistentVolumeClaim (PVC) na mensagem de erro, como pvc-2000efe0-b4a0-4856-899b-7e0c9fd33405.
    2. Procure o PersistentVolume (PV) com este nome e tome nota do spec.csi.volumeAttributes.internalName para usar mais tarde.
    3. Estabeleça uma ligação SSH ao cluster de armazenamento através dos passos no manual de instruções FILE-A0006.
    4. Mostre o volume e tome nota do nome do vserver que o comando devolve:
      volume show -volume INTERNAL_NAME
    5. Desativar o volume offline:
      volume offline -volume INTERNAL_NAME -vserver VSERVER_NAME
    6. Elimine o volume:
      volume delete -volume INTERNAL_NAME -vserver VSERVER_NAME
    Máquinas virtuais 1.12.1
    1.12.2

    O VMRuntime pode não estar pronto devido a uma falha na instalação do network-controller-manager

    Sintomas:

    O VMRuntime no cluster de destino (pode ser um cluster de administrador ou de sistema) tem o estado VMRuntime.ready = false e network-controller-manager no espaço de nomes kube-system está pendente

    kubectl --kubeconfig=${TARGET_CLUSTER_KUBECONFIG} get vmruntime vmruntime
    
    apiVersion: virtualmachine.private.gdc.goog/v1
    kind: VMRuntime
    metadata:
      ...
    spec:
      ...
    status:
      ready: false
    
          
    kubectl --kubeconfig=${TARGET_CLUSTER_KUBECONFIG} describe deploy network-controller-manager -n kube-system
    
    ...
    Events:
      Type     Reason       Age                      From     Message
      ----     ------       ----                     ----     -------
      Warning  FailedMount  3m36s (x122 over 3h55m)  kubelet  MountVolume.SetUp failed for volume "cert" : secret "network-webhook-server-cert" not found
          

    Solução alternativa:

    A eliminação da implementação network-controller-manager deve recriar automaticamente a implementação com os certificados necessários pelo operador da VMM. A implementação deve entrar no estado Running e, posteriormente, o estado do VMRuntime deve mudar para ready=true.

    kubectl --kubeconfig=${TARGET_CLUSTER_KUBECONFIG} delete deploy network-controller-manager -n kube-system
    Máquinas virtuais 1.12.2

    Tempo de aprovisionamento longo para discos de máquinas virtuais

    Sintomas:

    Os pods do importador de VMs entram num ciclo de falhas e o volume de dados fica bloqueado no estado de importação durante mais de 90 minutos. O estado dos pods pode ter o seguinte aspeto:

    test-vm-project                           importer-disk-ops-test-vm-boot-disk-tbdtz                     0/1     CrashLoopBackOff   14 (47s ago)     90m     172.16.20.94    zb-aa-bm08    <none>           <none>
    test-vm-project                            importer-test-vm-1-boot-disk-plsxk         1/1     Running            1 (2m53s ago)    8m59s   172.16.22.244   zb-ab-bm09   <none>           <none>
    test-vm-project                            importer-test-vm-2-boot-disk-npjc8                          1/1     Running            6 (12m ago)      40m     172.16.22.180   zb-ab-bm09    <none>           <none>

    Todas as importações de discos são concluídas no prazo de três horas.

    Atualizar 1.12.2

    Quando atualiza da versão 1.11.1 para a 1.12.2, o subcomponente unet-nodenetworkpolicy-infra não é reconciliado

    Sintomas:

    A mensagem de falha pode ter o seguinte aspeto:

         message: 'Reconciliation error: E0111 - upgrade chart: release unet-nodenetworkpolicy-infra-assets
          failed, and has been rolled back due to atomic being set: cannot patch "mgmt-network"
          with kind Network: admission webhook "vnetwork.networking.gke.io" denied the
          request: Network.networking.gke.io "mgmt-network" is invalid: Spec.NodeInterfaceMatcher:
          Forbidden: Field is immutable'
          observedGeneration: 2

    Solução alternativa:

    1. Se a falha estiver na raiz, nos passos seguintes, substitua KUBECONFIG pela configuração kubeconfig do administrador raiz.
    2. Se a falha for na organização, nos passos seguintes, substitua KUBECONFIG pela configuração kubeconfig do administrador da organização.
    3. Execute o seguinte:
               alias k="kubectl --kubeconfig=KUBECONFIG"
               k get networks mgmt-network -o json | jq '.spec.nodeInterfaceMatcher.interfaceName'
    4. Se a saída for eth0, execute:
      k patch network mgmt-network -p '{"metadata":{"finalizers":null}}' --type=merge
    5. Eliminar mgmt-network.
      k delete network mgmt-network
    6. Verifique se o estado de unet-nodenetworkpolicy-infra não tem um erro.

      Por exemplo:

               alias k="kubectl kubeconfig=KUBECONFIG"
               k get subcomponent unet-nodenetworkpolicy-infra -n org-1

      O resultado tem o seguinte aspeto:

               NAME                           AGE   STATUS
               unet-nodenetworkpolicy-infra   34d   ReconciliationCompleted

    Atualizações 1.12.2

    O cluster do sistema falha durante a atualização da versão 1.11.x para a 1.12.2

    Sintomas:

    Durante ou após a atualização da versão 1.11.x para a 1.12.2, as tarefas com o nome bm-system-add-ons-* podem falhar com o seguinte erro:

       E0326 17:04:22.997270       1 main.go:180] configdrift: Config drift health check failed
    
       F0326 17:04:22.997365       1 main.go:184] One or more checks failed.

    Solução alternativa:

    Aplique as seguintes anotações a todos os clusters do Kubernetes antes de iniciar uma atualização da versão 1.11 para a 1.12.2.

          # To bypass preflight check errors:
          baremetal.cluster.gke.io/bypass-check="vip_subnet"

    Por exemplo, num cluster de administrador principal, use:

       kubectl annotate -n root cluster root-admin baremetal.cluster.gke.io/bypass-check="vip_subnet" --kubeconfig=ROOT_ADMIN_KUBECONFIG
       

    Atualizar 1.12.2

    O subcomponente file-observability falha no org-1-system-cluster

    Sintomas:

    Este problema ocorre quando atualiza a versão de 1.11.1 para 1.12.2.

    Consulte o ficheiro .yaml para o subcomponente file-observability :

    kubectl get subcomponent file-observability -n org-1-system-cluster -o yaml

    O ficheiro pode ter a seguinte mensagem na secção backendStatus.

    message: 'E0100 - deploy: failed to install chart: release file-observability-backend
            failed, and has been uninstalled due to atomic being set: deployments.apps
            "file-observability-backend-controller" not found'

    Solução alternativa:

    1. Verifique o espaço de nomes file-system para confirmar que não termina em org-admin cluster:
      kubectl --kubeconfig ORG_ADMIN_KUBECONFIG get namespace file-system
    2. Se estiver a terminar, elimine todos os destinos de monitorização no espaço de nomes file-system:
      kubectl --kubeconfig ORG_ADMIN_KUBECONFIG delete monitoringtarget -n file-system --all
    3. Pause o subcomponente file-observability até que o subcomponente mon-admin esteja disponível, adicionando as seguintes anotações ao subcomponente file-observability:
      kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG annotate -n org-1 subcomponent file-observability lcm.private.gdc.goog/paused='true'
      kubectl --kubeconfig ORG_ADMIN_KUBECONFIG annotate -n org-1-system-cluster subcomponent file-observability lcm.private.gdc.goog/paused='true'
    4. Remova a anotação para pausar o subcomponente após a conclusão da atualização:
      kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG annotate -n org-1 subcomponent file-observability lcm.private.gdc.goog/paused-
      kubectl --kubeconfig ORG_ADMIN_KUBECONFIG annotate -n org-1-system-cluster subcomponent file-observability lcm.private.gdc.goog/paused-
    Atualizar 1.12.2

    A HSMupgrade falha porque o hsmcluster não está pronto

    Sintomas:

    Este problema ocorre quando atualiza a versão de 1.11.1 para 1.12.2.

    Quando todos os passos de atualização para o hsmupgraderequest e o ctmclusterupgraderequest estiverem concluídos, é apresentado o seguinte erro:

    HSMCluster "hsmcluster" is not ready. 

    Por exemplo:

     - lastTransitionTime: "2024-04-08T15:18:45Z" message: HSMCluster "hsmcluster" is not ready observedGeneration:
       2 reason: ziabhsm01PostUpgradeCheckFailed status: "False" type: AllComplete

    Solução alternativa:

    1. Verifique se a atualização está concluída no HSM e obtenha o endereço IP de cada HSM:
      kubectl get hsm -A --kubeconfig=ROOT_ADMIN_KUBECONFIG

      O resultado tem o seguinte aspeto:

      NAMESPACE    NAME          AGE   IP              READY   REASON
      gpc-system   zi-aa-hsm01   11d   10.252.96.192   True    ReconcileHSMSuccess
      gpc-system   zi-ab-hsm01   11d   10.252.97.192   True    ReconcileHSMSuccess
      gpc-system   zi-ac-hsm01   11d   10.252.98.192   True    ReconcileHSMSuccess
    2. Transfira e configure a app ksctl.
    3. Execute ksctl system info get --url=https://HSM_MANAGEMENT_IP para verificar se todas as versões do HSM foram atualizadas para .Spec.TargetVersion de ctmclusterupgraderequest:

      O resultado tem o seguinte aspeto:

            ksctl system info get
          {
            "name": "zi-aa-hsm01",
            "version": "2.13.1+10196",
            "model": "CipherTrust Manager k570",
            "vendor": "Thales Group",
            "crypto_version": "1.7.0",
            "uptime": "0 days, 1 hours, 20 minutes",
            "system_time": "2024-04-08T19:51:27Z"
          }

    4. Atualize o campo Status.FirmwareVersion de cada HSM para a versão atualizada, conforme obtido no passo anterior:

      Por exemplo:

          kubectl edit-status hsm HSM_NAME -n gpc-system
    5. Atualize o estado da última condição de ctmclusterupgraderequest.status.conditions de False para True. Depois disso, o estado da última condição hsmupgraderequest.status.conditions também passa a ser verdadeiro.

      Por exemplo:

         kubectl edit-status ctmclusterupgraderequest CTM_VERSION -n gpc-system
         kubectl get ctmclusterupgraderequest CTM_VERSION -n gpc-system -o yaml

    Atualizar 1.12.2
    1.12.4

    IP de gestão inacessível

    Durante uma atualização o IP de gestão de um servidor fica inacessível, especificamente após uma atualização do SO do comutador.

    Com o Rocky Linux, quando são adicionadas rotas estáticas, o IP de destino usado para alcançar as rotas estáticas tem de estar acessível antes de adicionar as rotas estáticas. Se o comutador estiver a ser reiniciado após uma atualização do SO, esse IP de gestão pode estar temporariamente inacessível.

    Solução alternativa:

    Estabeleça uma ligação SSH ao servidor através do endereço IP de dados e reinicie o serviço de rede para recriar as rotas estáticas em falta:

    systemctl restart NetworkManager.service
    Sistema de venda de bilhetes 1.12.2

    A sincronização da base de conhecimentos do sistema de emissão de bilhetes falha

    Sintomas:

    Durante uma sincronização da base de conhecimentos, pode ver o seguinte erro:

    Error: Article creation request failed status:400, body:map[error:map[detail:Rejected large REST payload with content-length = 10725676 bytes. Max allowed: 10485760 bytes. 

    Solução alternativa:

    Adicione uma propriedade do sistema para aumentar o comprimento máximo:

    1. Na plataforma ServiceNow, introduza sys_properties.list no filtro de navegação.
    2. Clique em Novo.
    3. No campo Nome, introduza glide.rest.max_content_length.
    4. No campo Tipo, selecione string.
    5. No campo Valor, introduza 15.
    6. Clique em Enviar.
    7. Sincronize novamente a base de conhecimentos.
    Sistema de venda de bilhetes 1.12.2

    O sistema de emissão de bilhetes não tem um upstream saudável

    Sintomas:

    Quando implementa a organização gdchservices manualmente, o sistema de pedidos não tem upstream saudável, não são criadas VMs e o pod do servidor intermédio não está saudável no cluster gdchservices-system no espaço de nomes support.

    Solução alternativa:

    Crie um novo recurso personalizado TicketingSystem com a imagem de VM correta no cluster gdchservices-admin:

    apiVersion: ticketing.private.gdc.goog/v1
    kind: TicketingSystem
    metadata:
      name: as-replacement
      namespace: support
    spec:
      replicas: 2
      spec:
        image: ts-controller-app-server-2024-02-07-231907
        imagenamespace: vm-system
        memory: 12G
        size: 100G
        vcpus: 8
      version:
        name: glide-vancouver-07-06-2023__patch5-12-01-2023_12-11-2023_2006.zip
    Atualizar 1.12.2

    O SSH para uma VM com o IP de gestão e os registos do Cilium falha

    Sintomas:

    O acesso de início de sessão não funciona numa VM com um IP de gestão. Pode ver um erro semelhante a este nos registos do pod anetd:

    Unable to create endpoint:[PUT /endpoint/{id}][400] putEndpointIdInvalid failed setting up layer2 interface

    Solução alternativa:

    Elimine o pod virt-launcher para a VM.

    Atualizar 1.12.2

    As atualizações do subcomponente mz-etcd spec.deployTarget e spec.Namespace fazem com que a atualização da versão 1.11.x para a 1.12.x falhe

    Sintomas:

    Durante a atualização da versão 1.11x para a 1.12.x, pode ser apresentado um erro semelhante ao seguinte:

          kubectl --kubeconfig PATH_TO_ROOT_ADMIN_KUBECONFIG get subcomponent -n root mz-etcd -o yaml
          kubectl --kubeconfig PATH_TO_ROOT_ADMIN_KUBECONFIG get subcomponent -n org-1 mz-etcd -o yaml

    O subcomponente mz-etcd tem a seguinte especificação antes de uma atualização:

                  spec:
              crds:
                helmManifestSpec:
                  chartURL: gcr.io/mz-etcd-crds:1.11.1-gdch.260
                  upgradeHookPolicy: OnVersionChange
              deployTarget: Local
              namespace: ""

    Solução alternativa:

    1. Elimine os seguintes subcomponentes no cluster de administrador raiz:
            kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG delete subcomponent -n root mz-etcd
            kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG delete subcomponent -n org-1 mz-etcd
    2. Verifique o subcomponente nos espaços de nomes raiz e org:
            kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get subcomponent -n root mz-etcd -o yaml
            kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get subcomponent -n org-1 mz-etcd -o yaml
    3. O novo subcomponente tem de ter a seguinte especificação, e o chatURL tem de mostrar a versão para a qual os clusters já foram atualizados:
                backend:
              helmManifestSpec:
                chartURL: gcr.io/mz-etcd-backend:1.12.2-gdch.785
          ...
            dash:
              helmManifestSpec:
                chartURL: gcr.io/mz-etcd-dash:1.12.2-gdch.785
          ...
            deployTarget: Remote
            namespace: mz-system
            mon:
              helmManifestSpec:
                chartURL: gcr.io/mz-etcd-mon:1.12.2-gdch.785
                upgradeHookPolicy: OnVersionChange
          ...
            targetClusterName: root-admin
            targetClusterNamespace: root
            webhooks:
              helmManifestSpec:
                chartURL: gcr.io/mz-etcd-webhooks:1.12.2-gdch.785
                upgradeHookPolicy: OnVersionChange
    Atualizar 1.12.2

    A atualização do armazenamento de objetos mostra um erro durante a verificação prévia ou posterior ao voo

    Sintomas:

    As verificações pré-publicação ou pós-publicação falham com um erro. Verifique os registos:

    kubectl logs -n gpc-system upgrade-managed-check-objectstorageupgrade-87698-rrjhrW0410

    O erro pode ter o seguinte aspeto:

     03:42:05.701163       1 upgrade_check.go:276] 1 error occurred:
          * Group "/rbac.sysstd.role.vm-system.wtwf7txfmbhvujhpxrfampnrkdwqsvzro6i7rmo5tsfst4wbxldq" not ready for RBAC resource {Role vm-system g-vm-image-bucket-reader    }
    
       Error: check "ObjectStorageUpgrade" preflight check failed: 1 error occurred:
          * Bucket "gpc-system/range-read-internal" not ready
    
      F0410 03:42:05.701901       1 main.go:80] check "ObjectStorageUpgrade" preflight check failed: 1 error occurred:
          * Bucket "gpc-system/range-read-internal" not ready

    Solução alternativa:

    Se o erro ocorrer durante as verificações pós-voo e todas as outras verificações forem concluídas sem erros, ignore as verificações pós-voo. Quando a atualização for reiniciada, também tem de ignorar as verificações prévias com o kubeconfig de administrador raiz:

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

    Por exemplo, se o erro ocorrer na organização org-1, o comando tem o seguinte aspeto:

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

    Se o erro ocorrer durante as verificações prévias e todas as outras verificações prévias forem concluídas sem erros, ignore as verificações prévias:

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

    Por exemplo, se o erro ocorrer na organização org-1, o comando tem o seguinte aspeto:

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

    Pode ter de aplicar esta solução alternativa mais do que uma vez se não for aplicada.

    Portefólio da ATAT 1.12.0
    1.12.1
    1.12.2
    1.12.4

    O portefólio não está a ser sincronizado

    Sintomas:

    O ConfigSync termina com a mensagem:

     KNV2009: failed to apply Portfolio.atat.config.google.com, atat-system/***: failed to create typed patch object (atat-system/***; atat.config. ││ google.com/v1alpha1, Kind=Portfolio): .spec.portfolioName: field not declared in schema. 

    Solução alternativa:

    O esquema Portfolio foi alterado na versão 1.12 do GDC. O campo portfolioName foi refatorado para portfolioID. Encontre o ficheiro YAML que contém o recurso personalizado de portefólio mencionado na mensagem de erro. Mude o nome do campo portfolioName para portfolioID.

    Atualizar 1.12.2

    A falha do NTP OSPolicy impede a execução de todos os outros OSPolicies

    Sintomas:

    Seguem-se os potenciais motivos pelos quais não é criada uma tarefa em execução para uma tarefa de aplicação de patches que concluiu apenas tarefas de pré-teste:

    1. A falha do NTP impede a execução de todas as outras tarefas de aplicação de patches.
    2. O nó está num estado não saudável.
    3. O agente de configuração do SO não está em execução.
    4. O agente de configuração do SO não consegue comunicar com o serviço de configuração do SO.
    5. Existe um problema com o serviço OS Config.

    Solução alternativa:

    1. Verifique o CR `NodeTargetPolicy` do nó.
    2. Pesquise `.spec.osPolicies` do CR `NodeTargetPolicy` que tem `ref.name=admin-ntp-policy` e `type: Ready` com o estado falso:
            # Enter the node InventoryMachine name.
            NAME=
            kubectl get nodetargetpolicy -n gpc-system $NAME -ojsonpath="{.spec.osPolicies}" | jq
    3. O resultado tem o seguinte aspeto:
       - conditions:
                - lastTransitionTime: "2024-04-19T19:12:01Z"
                  message: ""
                  observedGeneration: 7
                  reason: Complete
                  status: "True"
                  type: PolicyPreflightCompleted
                - lastTransitionTime: "2024-04-19T19:12:01Z"
                  message: ""
                  observedGeneration: 7
                  reason: None
                  status: "True"
                  type: PolicyConflictNone
                - lastTransitionTime: "2024-04-19T19:56:35Z"
                  message: ""
                  observedGeneration: 7
                  reason: Reconciled
                  status: "True"
                  type: Ready
                diff: os-policy-preflight-admin-ntp-policymf2w4-dpbxw
                playbookName: server-ntp-config
                ref:
                  name: admin-ntp-policy
                  namespace: gpc-system
    4. Elimine todas as condições destas `osPolicies` e mantenha apenas a seguinte parte:
      - conditions:
                diff: os-policy-preflight-admin-ntp-policymf2w4-dpbxw
                playbookName: server-ntp-config
                ref:
                  name: admin-ntp-policy
                  namespace: gpc-system
    Atualizar 1.12.3
    1.12.4

    O NodeUpgrade apresenta o Rocky Linux

    Sintomas:

    O NodeUpgrade CR menciona version: rocky-86-xyz na respetiva especificação, mesmo que o nó a ser atualizado seja o Ubuntu.

    Solução alternativa:

    Não precisa de uma solução alternativa porque estas informações são benignas. O nó é atualizado corretamente para uma versão mais recente do Ubuntu.

    SIEM 1.12.0
    1.12.1
    1.12.2
    1.12.3
    1.12.4

    Falha nos trabalhos de pré-instalação do SIEM

    Sintomas:

    As tarefas siem-*-preinstall no espaço de nomes root e org-1 falham repetidamente.

    Solução alternativa:

    Espera-se que as tarefas falhem quando o feature gate SIEMComponent estiver desativado. As falhas não indicam que o componente está avariado. A conciliação do componente SIEM pode ser pausada se o ruído for disruptivo, mas, geralmente, recomenda-se que deixe o componente ativado, se possível. Se a conciliação de componentes estiver pausada, tem de ser reativada manualmente quando a instalação do componente SIEM deixar de estar restrita em atualizações futuras.

    Atualização de nós 1.12.0
    1.12.1
    1.12.2

    A atualização do nó falha devido a um ficheiro lvm.conf desatualizado

    Sintomas:

    Podem existir problemas com vgs, blkid e o gather_facts do Ansible não está a responder. Este problema afeta os sistemas operativos Rocky e Ubuntu.

    Execute estes passos se os nós já tiverem sido atualizados. O processo para atualizar o ficheiro lvm.conf consiste nos seguintes passos:

    1. Obter uma lista de todos os nós para que esta correção possa ser aplicada a todos eles.
    2. Crie um ficheiro de política do SO e um guia interativo do Ansible.
    3. Aplique a correção aos nós.
    4. Verifique se a correção foi aplicada.

    Pré-requisitos:

    1. Siga os passos no manual de procedimentos IAM-R0004 para gerar o ROOTCONFIG para o cluster de administrador raiz e o ORGCONFIG para o cluster de administrador da organização.
    2. Siga os passos no manual de procedimentos IAM-R0005 para obter as seguintes funções da organização.

    Solução alternativa:

    1. Identifique os InventoryMachines que correspondem aos clusters:
      kubectl --kubeconfig=$ROOTCONFIG get inventorymachines
          kubectl --kubeconfig=$ORGCONFIG get inventorymachines

      Manter a saída separada. Corrija um cluster de cada vez. O resultado pode ter o seguinte aspeto:

          NAME
          bm-2bca8e3f
          bm-4caa4f4e
    2. Crie um ficheiro de política e um guia:
      apiVersion: system.private.gdc.goog/v1alpha1
          kind: AnsiblePlaybook
          metadata:
            name: lvm-conf-device-filter-node-update
            namespace: gpc-system
          spec:
            playbook: |
              - name: Add a device filter to /etc/lvm/lvm.conf
                hosts: all
                gather_facts: no
                tasks:
                  # Change lvm.conf
                  - name: Configure lvm for filtering out "dm" and "sg" devices
                    ansible.builtin.lineinfile:
                      path: /etc/lvm/lvm.conf
                      insertafter: '^(\s+|)devices(\s+|)\{'
                      line: '  filter = [ \"r|/dev/dm.|\", \"r|/dev/sg.|\" ]'
      
          ---
          apiVersion: system.private.gdc.goog/v1alpha1
          kind: OSPolicy
          metadata:
            name: lvm-conf-device-filter-node-update
            namespace: gpc-system
          spec:
            interval:
              period: 1m
            inventory:
               # this is the inventory from step 1 above,
               # see the syntex below
            policy:
              installPlaybook:
                name: lvm-conf-device-filter-node-update
    3. A secção de inventário anterior tem de ser preenchida como neste exemplo. Adicione um parágrafo por nó encontrado no passo 1. Vai fazer um cluster de cada vez, por isso, preencha a secção de inventário com nós para um cluster.
      inventory:
            # Node: bm-2bca8e3f
            - apiVersion: baremetal.cluster.gke.io/v1
              kind: InventoryMachine
              name: bm-2bca8e3f
      
            # Node: bm-4caa4f4e
            - apiVersion: baremetal.cluster.gke.io/v1
              kind: InventoryMachine
              name: bm-4caa4f4e
    4. Aplique a correção ao cluster de administrador raiz:
      kubectl --kubeconfig=$ROOTCONFIG apply -f PRECEDING_FILENAME_WITH_ROOT_NODES
    5. Aplique a correção ao cluster de administrador da organização:
      kubectl --kubeconfig=$ORGCONFIG  apply -f PRECEDING_FILENAME_WITH_ORG_NODES
    6. Reinicie o servidor para que a nova definição entre em vigor.
    7. Siga os passos no manual de procedimentos OS-P0005 para validar se os nós foram atualizados.
    8. Depois de confirmar que a política foi concluída com êxito, elimine a política através da ferramenta k9s:
      1. Navegue para as políticas do SO, como :ospolicies.
      2. Encontre e selecione a política lvm-conf-device-filter-node-update.
      3. Prima Ctrl + d.
      4. Confirme a eliminação.

    Para encaminhar este problema, registe um pedido através do manual de procedimentos SUPP-G0008. O pedido deve incluir informações como:

    1. Comandos executados e respetivas mensagens de saída
    2. Detalhes como InventoryMachineName e clusters
    3. Mensagens de registo
    Sistema operativo (SO) 1.12.0
    1.12.1
    1.12.2
    1.12.4

    O Rocky OS está selecionado incorretamente para novos clusters ou organizações

    Sintomas:

    Este problema ocorre se o ambiente tiver sido implementado anteriormente com a versão 1.11 e, em seguida, atualizado para a versão 1.12. Quando cria um novo cluster ou organização numa versão 1.12.x, o Rocky OS em vez do Ubuntu OS é selecionado para o aprovisionamento de nós de metal puro e de máquinas virtuais devido à versão do Rocky OS especificada nos CRs ReleaseMetadata e Userclustermetadata.

    Solução alternativa:

    Aplique a seguinte solução alternativa antes de criar uma nova organização:

    1. Verifique se existem OrganizationUpgrade CRs que não estão no estado Succeeded: true:
      for item in $(kubectl --kubeconfig=KUBECONFIG get OrganizationUpgrade -A -o custom-columns=NAME:.metadata.name,NAMESPACE:.metadata.namespace --no-headers); do
        NAME=$(echo $item | awk '{print $1}')
        NAMESPACE=$(echo $item | awk '{print $2}')
        STATUS=$(kubectl --kubeconfig=KUBECONFIG get organizationupgrade ${NAME} -n ${NAMESPACE} -o json | jq '.status.conditions[] |  select(.type=="Succeeded") | .status')
        if [[ "$STATUS" != "True" ]]; then
           echo "Not in Succeeded: true state, stop following operations"
        fi
      done

      Se for esse o caso, encaminhe o problema para a equipa de engenharia antes de avançar para os passos seguintes.

    2. Remova todos os CRs existentes para evitar atualizações acidentais do SO dos nós:OrganizationUpgrade
      for item in $(kubectl --kubeconfig=KUBECONFIG get OrganizationUpgrade -A -o custom-columns=NAME:.metadata.name,NAMESPACE:.metadata.namespace --no-headers); do
        NAME=$(echo $item | awk '{print $1}')
        NAMESPACE=$(echo $item | awk '{print $2}')
        echo "Deleting OrganizationUpgrade $NAME in namespace $NAMESPACE"
        kubectl --kubeconfig=KUBECONFIG delete OrganizationUpgrade $NAME -n $NAMESPACE
      done
    3. Defina a versão do GDC de destino para a criação da nova organização. Deve existir um ReleaseMetadata correspondente para esta versão de destino:
      TARGET_RELEASE=
    4. Identifique o CR mais recente para o SO Ubuntu de destino no cluster de administrador principal e defina a variável OS_VERSION:OSImageMetadata
      OS_VERSION=$(kubectl --kubeconfig=KUBECONFIG get osimagemetadata --sort-by=.metadata.creationTimestamp | grep -wv rocky | tail -1 |  awk '{print $1}' |  sed 's/gdch-node-os-//g')
      
      echo $OS_VERSION

      O resultado pode ter o seguinte aspeto:

      1.12.4-gdch.4

      Certifique-se de que a variável usa a mesma versão principal.secundária.patch, como 1.12.4, que a TARGET_RELEASE. Caso contrário, encaminhe o problema para a equipa de engenharia antes de avançar para os passos seguintes.

    5. Atualize o destino ReleaseMetadata para usar o Ubuntu OS_VERSION no cluster de administrador raiz:
      kubectl --kubeconfig=KUBECONFIG patch releasemetadata "${TARGET_RELEASE}" --type='json' -p='[{"op": "replace", "path": "/spec/adminCluster/bmNodeImage", "value": '"${OS_VERSION}"'}, {"op": "replace", "path": "/spec/adminCluster/vmNodeImage", "value": '"${OS_VERSION}"'}, {"op": "replace", "path": "/spec/systemCluster/bmNodeImage", "value": '"${OS_VERSION}"'}, {"op": "replace", "path": "/spec/systemCluster/vmNodeImage", "value": '"${OS_VERSION}"'}]'
    6. Identifique a lista UserclusterMetadata mapeada para o destino ReleaseMetadata:
      UCMS=$(kubectl --kubeconfig=KUBECONFIG get releasemetadata  "${TARGET_RELEASE}" -o json | jq -r '.spec.userClusters[].name')
    7. Atualize o destino UserclusterMetadata para usar o Ubuntu OS_VERSION no cluster de administrador raiz e no cluster de administrador da organização para cada organização. Execute o seguinte comando para cada cluster:
      for UCM in ${UCMS}; do
        echo "Updating UserclusterMetadata $UCM"
        kubectl --kubeconfig=KUBECONFIG patch userclustermetadata.upgrade.private.gdc.goog "${UCM}" --type='json' -p='[{"op": "replace", "path": "/spec/vmNodeImage", "value": '"${OS_VERSION}"'}]'
      done
    Máquinas virtuais 1.12.1
    1.12.2
    1.12.4

    A importação de imagens BYO falha para imagens qcow2 e raw

    Sintomas:

    Quando as imagens de VMs locais são importadas através da CLI gdcloud compute images import, o estado de importação fica bloqueado em WaitingForTranslationVM ou ImportJobNotCreated. Isto deve-se ao facto de o disco temporário criado para traduzir ou importar usar o tamanho exato da imagem qcow2 ou raw, mas o LUKS adiciona uma sobrecarga de alguns MiBs que faz com que o aprovisionamento do disco falhe.

    Solução alternativa:

    Crie um novo VirtualMachineImageImport manualmente com o mesmo nome de imagem, mas com um spec.minimumDiskSize maior. Por exemplo, se este foi o comando usado para importar a imagem:

    gdcloud compute images import $IMPORT_NAME --project $PROJECT --source-file=$LOCAL_FILENAME --os=$OS

    Se o original VirtualMachineImageImport criado automaticamente pela CLI tiver minimumDiskSize como X Gi, crie um novo com X+1 Gi. O valor baseia-se no tamanho da imagem que está a ser importada. No caso de qcow2, seria o tamanho virtual. Por exemplo, 20 Gi devem ser substituídos por 21 Gi.

    Substitua os valores dos marcadores de posição com base na forma como a CLI foi chamada.

    1. Encontre o VirtualMachineImageImport:
      kubectl get virtualmachineimageimport $IMPORT_NAME -n $PROJECT -o yaml

      Se o objeto não estiver presente, acione novamente o comando gdcloud compute images import .... Depois de a saída da consola passar de Uploading image to ... para Image import has started for ..., prima CTRL + C para que a imagem local seja carregada para o armazenamento de objetos e o VirtualMachineImageImport seja preservado para referência para criar um novo.

    2. Crie um novo VirtualMachineImageImport com um minimumDiskSize maior:
      apiVersion: virtualmachine.gdc.goog/v1
      kind: VirtualMachineImageImport
      metadata:
        name: $IMPORT_NAME_NEW
        namespace: $NAMESPACE
      spec:
        imageMetadata:
          minimumDiskSize: $NEW_SIZE
          name: $IMAGE_NAME
          operatingSystem: $OS
        source:
           objectStorage:
            bucketRef:
              name: vm-images-bucket
            objectName: $LOCAL_FILENAME
    Máquinas virtuais 1.12.0
    1.12.1
    1.12.2
    1.12.3

    A importação de imagens está bloqueada em TranslationInProgress

    Sintomas:

    O pod importer-image-import-$VMII no espaço de nomes do projeto do cluster do sistema falha com o seguinte erro: Unable to process data: Unable to transfer source data to target file: unable to write to file: stream error: stream ID 1; NO_ERROR; received from peer`). O objeto VirtualMachineImageImport VMII tem o tipo de condição Ready com o estado False e o motivo TranslationInProgress após 2 horas do início da importação.

    Solução alternativa:

    Para melhorar a velocidade, modifique o tamanho mínimo do disco da imagem para 200 Gi da seguinte forma:

    kubectl get validatingwebhookconfiguration vmm-image-controller-v1-webhook -oyaml > /tmp/vmm-image-controller-v1-webhook.yaml
    kubectl delete validatingwebhookconfiguration vmm-image-controller-v1-webhook
    kubectl patch virtualmachineimageimport $VMII -n $PROJECT -p '{"spec": {"imageMetadata": {"minimumDiskSize": "200Gi"}}}'
    kubectl apply -f /tmp/vmm-image-controller-v1-webhook.yaml

    Tenha em atenção que, para eliminar e aplicar o ValidatingWebhookConfiguration, precisa do kubeconfig do administrador do cluster para o cluster do administrador da organização. Pode obter o seguinte manual de procedimentos IAM-R0004.

    Se usar gdcloud para iniciar a importação, tenha em atenção que não existe forma de fornecer o parâmetro minimumDiskSize. Tem de criar um objeto VMII e modificá-lo conforme mostrado no comando anterior.

    O processo de VirtualMachineImageImport continua, mas volta a ficar bloqueado num passo subsequente. No espaço de nomes do projeto no cluster do sistema, vê que a tarefa image-import-$VMII falha continuamente com o erro: error: stream error: stream ID x; NO_ERROR; received from peer. Neste ponto, a importação de imagens é concluída. A imagem final é carregada para o armazenamento de objetos, mas o ícone VirtualMachineImage está em falta. Pode criar manualmente um VirtualMachineImage da seguinte forma:

    kubectl apply -f - <<EOF
    apiVersion: virtualmachine.gdc.goog/v1
    kind: VirtualMachineImage
    metadata:
      name: $NAME
      namespace: $PROJECT
    spec:
      minimumDiskSize: 200Gi
      operatingSystem:
        name: $OS_NAME
    EOF

    `$NAME` deve corresponder a `VMII.ImageMetadata.Name`, e `$OS_NAME` pode ser um de [`ubuntu-2004`, `ubuntu-2204`, `windows-2019`, `rhel-8`] e deve corresponder ao tipo de imagem importada.

    Istio 1.12.4

    A implementação de istio-eastwestgateway no espaço de nomes istio-system está bloqueada

    Sintomas:

    A implementação do istio-eastwestgateway no espaço de nomes istio-system está bloqueada, com eventos de pods a apresentar um erro Back-off pulling image "auto" de kubelet.

    Para diagnosticar o problema, verifique se o mutatingwebhookconfiguration com o nome istio-revision-tag-default existe no mesmo cluster que a implementação do gateway bloqueada.

    kubectl --kubeconfig=KUBECONFIG get mutatingwebhookconfiguration istio-revision-tag-default

    Solução alternativa:

    • Se a configuração existir, reinicie a implementação istio-eastwestgateway no espaço de nomes istio-system.
      kubectl --kubeconfig=KUBECONFIG rollout restart deployment/istio-eastwestgateway -n istio-system
    • Se a configuração não existir, aguarde até que o webhook exista, o que deve acontecer em breve, uma vez que está num ciclo de conciliação.
    Monitorização 1.12.2

    cortex-store-gateway reiniciar com erro de limites de divisão fora do intervalo

    Sintomas:

    Os pods cortex-store-gateway são reiniciados com a seguinte mensagem de erro nos registos:

    panic: runtime error: slice bounds out of range

    Solução alternativa:

    1. Pause o subcomponente mon-cortex no cluster do sistema.
      kubectl --kubeconfig $ORG_ADMIN_CONFIG annotate subcomponent mon-cortex -n $SYSTEM_CLUSTER_NAMESPACE lcm.private.gdc.goog/paused=true
    2. Modifique o cortex-configconfigMap no cluster do sistema e defina o limite de tempo para o memcached na index_cache para dois segundos, de modo que a configuração da index_cache tenha o seguinte aspeto:
       index_cache:
            backend: memcached
            memcached:
              addresses: dnssrvnoa+_memcached._tcp.cortex-index-memcached.mon-system.svc.cluster.local
              timeout: 2s
    3. Reinicie os pods cortex-store-gateway no cluster do sistema para que usem a configuração atualizada.
    Atualizar 1.12.4

    O reinício do nó de administrador principal durante a atualização provoca uma falha de subcomponente

    Sintomas:

    O nó de metal exposto é apresentado como NotReady e o servidor fica bloqueado no ecrã de arranque com a última mensagem a indicar Retrieving encryption keys.

    Solução alternativa:

    1. Reinicie o iLO.
    2. Depois de o iLO estar novamente em funcionamento, reinicie o servidor.
    Atualizar 1.12.4

    O número da versão de storagecluster não é apresentado durante a atualização

    Sintomas:

    Após a atualização, o StorageCluster CR não mostra nenhum valor para o campo de estado StorageVersion. Verifique a versão:

    kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get StorageCluster -n gpc-system
    Siga os passos na solução alternativa se o campo da versão estiver vazio.

    Solução alternativa:

    Reinicie a implementação do file-storage-backend-controller:

    kubectl --kubeconfig  ROOT_ADMIN_KUBECONFIG rollout restart deployment -n file-system file-storage-backend-controller

    Infraestrutura do Operations Suite (OI) 1.12.4

    O caminho do instalador do Fluent Bit está incorreto

    Sintomas:

    A localização do instalador do fluent-bit foi alterada para operations_center\bin\fluent-bit-win64.msi. O Copy-ConfigHostFiles.ps1 espera que o instalador do cliente fluent-bit corresponda ao padrão fluent-bit-*-win64.*. O instalador não consegue encontrar o instalador porque esse padrão já não corresponde.

    Solução alternativa:

    1. Abra o ficheiro Copy-ConfigHostFiles.ps1.
    2. Encontre a seguinte linha:
      $(Get-Item -Path 'H:\operations_center\bin\fluent-bit-*-win64.*').FullName
    3. Edite a linha anterior para adicionar a localização correta do instalador:
      $(Get-Item -Path 'H:\operations_center\bin\fluent-bit-win64.*').Name
    Infraestrutura do Operations Suite (OI) 1.12.4

    O caminho do instalador do Nessus está incorreto

    Sintomas:

    A localização do instalador do Nessus foi alterada para operations_center\bin\NessusAgent-x64.msi. O Copy-ConfigHostFiles.ps1 espera que o instalador do cliente corresponda ao nome do ficheiro /NessusAgent-10.4.1-x64.msi. O instalador não consegue encontrar o instalador porque esse padrão já não corresponde.

    Solução alternativa:

    1. Abra o ficheiro Copy-ConfigHostFiles.ps1.
    2. Encontre as seguintes linhas:
      [pscustomobject]@{source = "H:\operations_center\bin\Nessus-10.4.1-x64.msi"; destination = "C:\config\nessus_mgr\Nessus-10.4.1-x64.msi" }
      [pscustomobject]@{source = "H:\operations_center\bin\Nessus-10.4.1-x64.msi"; destination = "C:\config\nessus_oob\Nessus-10.4.1-x64.msi" }
    3. Edite as linhas anteriores para adicionar a localização correta do instalador, alterando Nessus-10.4.1-x64.msi para NessusAgent-x64.msi:
      [pscustomobject]@{source = "H:\operations_center\bin\NessusAgent-x64.msi"; destination = "C:\config\nessus_mgr\NessusAgent-x64.msi" }
      [pscustomobject]@{source = "H:\operations_center\bin\NessusAgent-x64.msi"; destination = "C:\config\nessus_oob\NessusAgent-x64.msi" }
    Armazenamento de objetos 1.12.4

    A criação de uma nova organização fica bloqueada no estado VMImageDistributing

    Sintomas:

    Pode ver uma mensagem como esta:

    Reason:                NamespaceCreated
    Status:                True
    Type:                  ObjectNamespaceReady
    Last Transition Time:  2024-07-12T00:49:29Z
    Message:               awaiting images distribution to be finished
    Observed Generation:   1
    Reason:                VMImageDistributing
    Status:                Unknown
    Type:                  Ready  

    Este problema é causado por uma configuração de ponto final do S3 em falta para a nova organização.

    Solução alternativa:

    Crie manualmente um grupo de HA para a nova organização.

    1. Através do procedimento de acesso de emergência, adquira um kubeconfig do cluster de administrador raiz que tenha acesso de leitura aos seguintes recursos:
      • Organização
      • ObjectStorageAdminNode
      • SubnetClaim
      • ObjectStorageSite
      • Secreto
    2. Tome nota do nome da organização:
      kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG_ABSOLUTE_PATH get Organization -A
    3. Tenha em atenção os endereços IP do cliente dos ObjectStorageAdminNode CRs no cluster de administrador raiz.
      kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG_ABSOLUTE_PATH get ObjectStorageAdminNode

      Para cada CR AdminNode:

      kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG_ABSOLUTE_PATH get ObjectStorageAdminNode NODE_NAME -o jsonpath='{.spec.network.clientIP}'
    4. Tenha em atenção o intervalo de endereços IP disponíveis e os IPs reservados nesse intervalo:
      kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG_ABSOLUTE_PATH get SubnetClaim -n root external-objectstorage-client-lif-subnet -o jsonpath='{.status.ipv4SubnetStatus}'
    5. Obtenha as credenciais de início de sessão da IU de gestão do StorageGRID a partir do segredo gpc-system/objectstorage-breakglass-root-level1 no cluster root-admin.
    6. Inicie sessão na IU de gestão do StorageGRID com as credenciais do passo anterior. O URL está no estado ObjectStorageSite:
      kubectl --kubeconfig /root/release/root-admin/root-admin-kubeconfig get ObjectStorageSite -n gpc-system mb-obj-site-1 -o jsonpath='{.status.managementAPIEndpointURL}'
    7. Aceda ao separador Configuração e clique em Grupos de alta disponibilidade.
    8. Abra a vista de detalhes de cada grupo de HA e anote o respetivo endereço IP virtual (VIPs).
    9. Crie um novo grupo de HA:
      1. Nome do grupo: o padrão de nome é ORGANIZATION_NAME-ha . Neste caso, é org-2-ha.
      2. Descrição do grupo: use grupos de HA existentes para o padrão de descrição.
      3. Interfaces: selecione todas as eth2.
      4. A ordem de prioridade: a interface principal deve ter a prioridade mais elevada.
      5. SubnetCIDR: este campo é preenchido automaticamente pelo StorageGRID. Confirme se a sub-rede corresponde ao status.ipv4SubnetStatus.cidrBlock no SubnetClaim external-objectstorage-client-lif-cidr.
      6. IP virtual: o próximo IP no intervalo de IPs disponíveis. O IP não pode entrar em conflito com o IP reservado, o IP do cliente do nó de administração e os VIPs dos grupos de HA existentes.
    10. Rode as credenciais de acesso de emergência do StorageGRID.
    Atualizar 1.12.4

    Conciliação em curso no subcomponente

    Sintomas:

    Quando atualiza a organização raiz de 1.12.2 para 1.12.4, o subcomponente iac-gitlab tem um estado de conciliação em curso. Para diagnosticar o problema, verifique os registos do Prometheus, por exemplo:

    kubectl logs gitlab-prometheus-server-5d6d9599f-l2l7s -n gitlab-system -c prometheus-server

    Os registos podem incluir um erro como este:

    unexpected fault address 0x7f217cf26000
    fatal error: fault
    [signal SIGBUS: bus error code=0x2 addr=0x7f217cf26000 pc=0x46c302]
    
    goroutine 1 [running]:
    runtime.throw({0x3018bed?, 0x0?})
        /usr/local/go/src/runtime/panic.go:992 +0x71 fp=0xc000a3b098 sp=0xc000a3b068 pc=0x438431

    Solução alternativa:

    1. Execute sleep 3600 para obter um shell no contentor em execução, por exemplo.
      kubectl exec --stdin --tty POD_NAME -n gitlab-system -c prometheus-server -- /bin/sh
      /prometheus $ df -h

      Substitua POD_NAME pelo nome do pod, como gitlab-prometheus-server-d7969c968-hppsl.

    2. Verifique o resultado para ver se a pasta /data está cheia:
      Filesystem                Size      Used Available Use% Mounted on
      overlay                 866.4G    147.1G    719.3G  17% /
      tmpfs                    64.0M         0     64.0M   0% /dev
      tmpfs                    94.3G         0     94.3G   0% /sys/fs/cgroup/dev/mapper/luks-trident_pvc_6fb4dc48_72df_4bf1_825f_267818e3fefd
                                7.8G      7.3G         0 100% /data
    3. Se este problema ocorrer durante a atualização, elimine a tarefa de migração, uma vez que tem um limite de tempo de 3600 segundos, e, em seguida, avance com a atualização:
      kubectl delete job gitlab-migrations-1-fe7-2 -n gitlab-system
    Atualizar 1.12.4

    A verificação prévia de IAM falha

    Sintomas:

    Para diagnosticar o problema, verifique os registos de atualização do IAM, por exemplo:

    kubectl logs -n gpc-system upgrade-managed-check-iamupgrade-qbdm5-tl264 

    O resultado pode ter o seguinte aspeto:

    I0724 21:57:20.456782       1 upgrade_check.go:39] IAM preflight check failed after 60000000000: Org iam-system deployments not ready: Deployment iam-authzpdp-backend-server is not ready; ready replicas 2,replicas 3

    Solução alternativa:

    1. Consulte a mensagem de erro anterior e tome nota do espaço de nomes e do nome da implementação. Neste exemplo, NAME é iam-authzpdp-backend-server e NAMESPACE é iam-system.
    2. Obtenha a lista de pods:
      kubectl get pods -n NAMESPACE | grep NAME
    3. Repare no resultado no seguinte formato:
      iam-authzpdp-backend-server-6875654c4b-64h4t            2/2     Running   0             29h
      iam-authzpdp-backend-server-6875654c4b-pvscg            1/2     Running   0             29h
      iam-authzpdp-backend-server-6875654c4b-v7jnl            2/2     Running   0             29h

      Tenha em atenção o pod que não tem todos os contentores prontos. Neste caso o POD_NAME é iam-authzpdp-backend-server-6875654c4b-pvscg que tem um dos dois contentores não pronto, indicado pelo estado 1/2. Se existir mais do que um pod como este, repita o passo seguinte para cada pod afetado.

    4. Elimine o pod que não está totalmente em bom estado:
      kubectl delete pod -n NAMESPACE POD_NAME>
    5. Execute novamente o comando do passo 2. Repare que todos os pods devem estar agora em bom estado. Este passo pode demorar alguns minutos.
    6. Se o pod eliminado não for substituído por um pod em bom estado, abra um pedido de apoio técnico.
    Atualizar 1.12.1
    1.12.2
    1.12.4

    O estado de OrganizationUpgrade é Unknown

    Sintomas:

    O estado OrganizationUpgrade é Unknown após a conclusão de uma atualização.

    Solução alternativa:

    Se o campo de versão no Organization corresponder ao campo targetVersion, é seguro ignorar o estado Desconhecido.

    Atualizar 1.12.4

    Falha na atualização do subcomponente para opa gatekeeper

    Sintomas:

    Durante a atualização da organização de inquilinos de 1.12.2 para 1.12.4, a atualização do subcomponente opa gatekeeper falha com um ReconciliationError.

    Solução alternativa:

    1. Edite o mutatingwebhookconfiguration objeto edr-sidecar-injector-webhook-cfg do cluster de utilizadores afetado. Se existirem mais do que um cluster de utilizadores afetados, repita os passos para cada cluster de utilizadores afetados:
           kubectl edit mutatingwebhookconfiguration edr-sidecar-injector-webhook-cfg
    2. Edite a secção webhooks > (edr-sidecar-injector.gpc-system.internal) > namespaceSelector > matchExpressions > (key: kubernetes.io/metadata.name) > values para lhe adicionar os seguintes dois valores:
      • opa-system
      • cert-manager

      O objeto atualizado deve ter o seguinte aspeto:

                  apiVersion: admissionregistration.k8s.io/v1
              kind: MutatingWebhookConfiguration
              ...
              webhooks:
              - admissionReviewVersions:
                name: edr-sidecar-injector.gpc-system.internal
                namespaceSelector:
                  matchExpressions:
                  - key: kubernetes.io/metadata.name
                    operator: NotIn
                    values:
                    - kube-system
                    - opa-system
                    - cert-manager
              ...

    3. As alterações podem demorar até uma hora a resolver o problema.
    Atualizar 1.12.4

    ansibleplaybook não é atualizado como parte da atualização do cluster

    Sintomas:

    Quando atualiza de 1.12.2 para 1.12.4, o ansibleplaybook não é atualizado como parte da atualização do cluster. As correções atualizadas no ansibleplaybook não são aplicadas e bloqueiam a política de SO que executa a versão anterior do ansibleplaybook.

    Solução alternativa:

    1. Elimine a tarefa do Kubernetes create-ansible-playbooks:
            JOB_NAME=create-ansible-playbooks-xxx
            JOB_NAMESPACE=xxx
            kubectl delete job $JOB_NAME -n JOB_NAMESPACE --kubeconfig=/path/to/admin-cluster-config 
    2. Reinicie a implementação do os-core-controller.
    3. Esta ação volta a acionar as tarefas e atualiza as jogadas estudadas.
    DNS 1.12.4

    A criação da organização falha porque o tráfego DNS para o nó de administrador principal expira

    Sintomas:

    Quando cria uma nova organização, pode ver o subcomponente core-dns a expirar nos registos:

    [INFO] 192.0.2.0:60741 - 40400 "A IN objectstorage-tenant-mgmt.gdch.example.com. udp 72 false 1232" - - 0 2.000828817s
    [ERROR] plugin/errors: 2 objectstorage-tenant-mgmt.gdch.example.com. A: read udp 10.244.4.184:59927->192.0.2.1:53: i/o timeout
    [INFO] 192.0.2.0:51401 - 5813 "AAAA IN objectstorage-tenant-mgmt.gdch.example.com. udp 72 false 1232" - - 0 2.000585231s
    [ERROR] plugin/errors: 2 objectstorage-tenant-mgmt.gdch.example.com. AAAA: read udp 10.244.4.184:48542->192.0.2.1:53: i/o timeout

    Solução alternativa:

    1. Atualize o serviço gpc-coredns-forwarder-udp do cluster de administrador principal e o serviço gpc-coredns-forwarder-tcp, e adicione os novos intervalos de IP aos intervalos de origem do equilibrador de carga.
    2. Se as alterações do CR forem substituídas, pause o dns-core subcomponente com a anotação lcm.private.gdc.goog/paused="true".
    Armazenamento de ficheiros e blocos 1.12.4

    file-netapp-trident subcomponent fails on root cluster

    Sintomas:

    Quando atualiza de 1.12.2 para 1.12.4, o subcomponente file-netapp-trident fica bloqueado na eliminação de StorageClasses. Apresenta o seguinte estado:

          status:
      backendStatus:
        conditions:
        - lastTransitionTime: "2024-05-02T06:04:14Z"
          message: 'E0121 - rollback chart: no StorageClass with the name "standard-rwo-non-luks"
            found'
          observedGeneration: 2
          reason: ReconciliationError
          status: "True"
          type: Reconciling
        - lastTransitionTime: "2024-04-08T00:12:53Z"
          message: Successfully pulled chart
          observedGeneration: 2
          reason: ChartPullDone
          status: "True"
          type: ChartPull
        - lastTransitionTime: "2024-05-01T10:10:08Z"
          message: Fetched parameters from default, runtime
          observedGeneration: 2
          reason: ParametersDone
          status: "True"
          type: Parameters
        - lastTransitionTime: "2024-05-02T06:04:04Z"
          message: 'E0121 - rollback chart: no StorageClass with the name "standard-rwo-non-luks"
            found'
          observedGeneration: 2
          reason: DeployError
          status: "False"
          type: Deployed
        - lastTransitionTime: "2024-04-23T06:50:12Z"
          message: Readiness check job passed
          observedGeneration: 1
          reason: ReadinessCheckDone
          status: "True"
          type: Ready
        deploymentFinished: false
        lastDeployTimestamp: "2024-05-02T06:03:16Z"
        readyAfterDeploy: true
        version: ""
      conditions:
      - lastTransitionTime: "2024-05-02T06:04:14Z"
        message: 'Reconciliation error: E0121 - rollback chart: no StorageClass with the
          name "standard-rwo-non-luks" found'
        observedGeneration: 2
        reason: ReconciliationError
        status: "True"
        type: Reconciling
      crdsStatus:
        conditions:
        - lastTransitionTime: "2024-04-07T08:02:33Z"
          message: Successfully pulled chart
          observedGeneration: 2
          reason: ChartPullDone
          status: "True"
          type: ChartPull
        - lastTransitionTime: "2024-04-07T08:02:33Z"
          message: No parameters to fetch
          observedGeneration: 2
          reason: ParametersDone
          status: "True"
          type: Parameters
        - lastTransitionTime: "2024-04-07T08:02:34Z"
          message: Readiness source is empty
          observedGeneration: 2
          reason: ReadinessCheckSkipped
          status: "True"
          type: Ready
        - lastTransitionTime: "2024-05-01T18:37:52Z"
          message: Ready
          observedGeneration: 2
          reason: ReconciliationCompleted
          status: "False"
          type: Reconciling
        deploymentFinished: true
        lastDeployTimestamp: "2024-05-02T06:04:03Z"
        readyAfterDeploy: true
        version: 1.12.3-gdch.312

    Solução alternativa:

    1. Pause o subcomponente file-netapp-trident:
            ## Set KUBECONFIG to root-admin KUBECONFIG
            export KUBECONFIG=ROOT_ADMIN_KUBECONFIG
            kubectl annotate subcomponent file-netapp-trident -n $cluster_namespace lcm.private.gdc.goog/paused=true
    2. Elimine o StorageClasses que a tarefa não conseguiu criar, como standard-rwo, standard-block, standard-rwo-non-luks e standard-block-non-luks:
            kubectl delete storageclass $(kubectl get storageclasses -o jsonpath='{.items[?(@.provisioner=="csi.trident.netapp.io")].metadata.name}
    3. Acione a recriação do StorageClasses reiniciando o oclcm-backend-controller para o seu cluster (controlador de administrador principal para clusters de administrador principal e de organização, controlador de administrador de organização para clusters de sistema e de utilizador):
            kubectl rollout restart deployment oclcm-cm-backend-controller -n oclcm-system
    4. Reinicie a implementação do netapp-trident e o netapp-trident DaemonSet no cluster:
            kubectl rollout restart deployment netapp-trident-controller -n netapp-trident
            kubectl rollout restart daemonset netapp-trident-node-linux -n netapp-trident
    5. Verifique se o segredo LUKS foi criado para os seus recursos PersistentVolumeClaim (PVC). Cada PVC tem de ter um segredo no formato g-luks-$pvc_name.
            kubectl get secret -n $pvc_namespace g-luks-$pvc_name
    6. Verifique se o subcomponente file-netapp-trident não tem erros no estado:
            kubectl get subcomponent -n $cluster_namespace file-netapp-trident -o jsonpath='{.status}' | jq
      Nota: não pode haver erros nas mensagens nem no `backendStatus`. O `crdStatus` deve apresentar `delpoymentFinished: true`
    7. Retome o subcomponente para que as substituições entrem em vigor.
    Servidores físicos 1.12.4

    O arranque do servidor falha

    Sintomas:

    Ao iniciar o servidor, pode ver uma mensagem como esta nos registos de hardware:

    Conditions:
        Last Transition Time:  2024-08-12T17:10:23Z
        Message:               Introspection timeout
        Observed Generation:   2
        Reason:                FailedProvision
        Status:                True
        Type:                  BaremetalFailure
        Last Transition Time:  2024-08-10T12:23:30Z
        Message:
        Observed Generation:   2
        Reason:                KeyManagerConfigurationSucceeded
        Status:                True
        Type:                  KeyManagerConfigured
        Last Transition Time:  2024-08-10T12:11:17Z
        Message:               The server is powered off or unknown
        Observed Generation:   2
        Reason:                NotPoweredOn
        Status:                False
        Type:                  Ready

    Solução alternativa:

    1. Para cada fase bloqueada, siga as instruções nos seguintes manuais de procedimentos:
      1. SERV-R0006
      2. SERV-R0007
      3. SERV-R0008
    2. Se o problema ainda não estiver resolvido, siga os passos no manual de procedimentos SERV-R0001.
    3. Se o problema continuar por resolver, abra um pedido de apoio técnico.
    Atualizar 1.12.0
    1.12.1
    1.12.2
    1.12.4

    Os pods do Prometheus primários não foram limpos durante a atualização

    Sintomas:

    Os pods primary-prometheus-shardX-replicaX são visíveis no espaço de nomes obs-system e no espaço de nomes mon-system. Se o primary-prometheus-shardX-replicaX só existir no espaço de nomes obs-system após uma atualização para a versão 1.12, então trata-se de um problema desconhecido diferente e a solução alternativa não deve ser realizada.

    O comportamento pretendido é que primary-prometheus-shardX-replicaX só exista no espaço de nomes mon-system após a conclusão da atualização 1.12.

    Solução alternativa:

    1. Elimine manualmente os primary-prometheus-shardX-replicaXStatefulSetsobs-system no espaço de nomes obs-system.
    2. Não elimine os primary-prometheus-shardX-replicaX StatefulSets no espaço de nomes mon-system.
    Redes 1.12.4

    PodCIDR não atribuído a nós, apesar de ClusterCIDRConfig ter sido criado

    Sintomas:

    Um ClusterCIDRConfig é um objeto obrigatório para atribuir PodCIDRs. Apesar de o ClusterCIDRConfig ter sido criado, o PodCIDRs não foi atribuído. Este problema ocorre se for criado um ClusterCIDRConfig ao mesmo tempo que os pods ipam-controller estão a ser iniciados. A criação do cluster está bloqueada no estado de reconciliação:

    1. Verifique se o objeto ClusterCIDRConfig foi criado no cluster:
      kubectl --kubeconfig=CLUSTER_KUBECONFIG get clustercidrconfigs -oyaml

      O resultado pode ter o seguinte aspeto:

      apiVersion: v1
          items:
          - apiVersion: networking.gke.io/v1alpha1
            kind: ClusterCIDRConfig
            metadata:
              annotations:
                baremetal.cluster.gke.io/managed: "true"
                kubectl.kubernetes.io/last-applied-configuration: |
                  {"apiVersion":"networking.gke.io/v1alpha1","kind":"ClusterCIDRConfig","metadata":{"annotations":{"baremetal.cluster.gke.io/managed":"true"},"creationTimestamp":null,"name":"root-admin-control-plane"},"spec":{"ipv4":{"cidr":"172.24.0.0/21","perNodeMaskSize":23},"ipv6":{"cidr":"fd00:1::2:0/112","perNodeMaskSize":119}},"status":{}}
              creationTimestamp: "2024-06-17T05:27:55Z"
              finalizers:
              - networking.kubernetes.io/cluster-cidr-config-finalizer
              generation: 1
              name: root-admin-control-plane
              resourceVersion: "2172"
              uid: d1216fe3-04ed-4356-a105-170d72d56c90
            spec:
              ipv4:
                cidr: 172.24.0.0/21
                perNodeMaskSize: 23
              ipv6:
                cidr: fd00:1::2:0/112
                perNodeMaskSize: 119
          kind: List
          metadata:
            resourceVersion: ""
    2. Execute o comando describe para um dos objetos de nó do cluster que está bloqueado na reconciliação e verifique se existe um evento CIDRNotAvailable no objeto de nó:
      kubectl --kubeconfig=CLUSTER_KUBECONFIG describe node NODE_NAME

      Os eventos de saída podem ter o seguinte aspeto:

      Type     Reason            Age                   From             Message
            ----     ------            ----                  ----             -------
            Normal   CIDRNotAvailable  3m22s (x96 over 21h)  cidrAllocator    Node gpc-adhoc-4f533d50vm-worker-node2-zone1 status is now: CIDRNotAvailable
            Warning  ReconcileError    3m22s (x96 over 21h)  ipam-controller  CIDRAssignmentFailed, retrying: failed to get cidrs for node gpc-adhoc-4f533d50vm-worker-node2-zone1, unable to get clusterCIDRs for node gpc-adhoc-4f533d50vm-worker-node2-zone1, no available CIDRs

    Solução alternativa:

    1. Reinicie os auriculares ipam-controller-manager:
      kubectl --kubeconfig=CLUSTER_KUBECONFIG -n kube-system rollout restart ds ipam-controller-manager
    2. Depois de os ipam-controller-manager pods estarem em estado de execução, verifique se o podCIDR está atribuído aos nós:
      kubectl --kubeconfig=CLUSTER_KUBECONFIG get nodes -oyaml | grep podCIDR

      O resultado pode ter o seguinte aspeto:

      podCIDR: 172.24.4.0/23
          podCIDRs:
          podCIDR: 172.24.2.0/23
          podCIDRs:
          podCIDR: 172.24.0.0/23
          podCIDRs:
    Vertex AI 1.12.0
    1.12.1
    1.12.2
    1.12.4

    As APIs pré-preparadas mostram um estado Enabling na interface do utilizador

    O MonitoringTarget mostra um estado Not Ready quando estão a ser criados clusters de utilizadores, o que faz com que as APIs pré-preparadas mostrem continuamente um estado Enabling na interface do utilizador.

    Solução alternativa:

    1. Abra o menu no navegador Chrome (ícone de três pontos).
    2. Clique em Mais ferramentas > Ferramentas para programadores para abrir a consola.
    3. Clique no separador Rede na consola.
    4. Encontre os ai-service-status pedidos.
    5. Clique no separador Resposta num pedido ai-service-status para mostrar o conteúdo desse pedido.
    6. Verifique se tudo parece pronto, exceto os componentes MonitoringTarget e LoggingTarget.
    Armazenamento de objetos 1.12.4

    Alguns avisos de atualização do armazenamento de objetos podem ser ignorados

    Sintomas:

    Quando atualiza o armazenamento de objetos, pode ver um aviso como este:

     Type     Reason          Age                From                              Message
      ----     ------          ----               ----                              -------
      Warning  ReconcileError  55m (x2 over 55m)  ObjectStorageAdminNodeReconciler  Reconcile error, retrying: error storing the ssh creds: 500 Internal Server Error:ErrorMessage: {"text":"The GDU service is currently busy. Try again later. Contact technical support if the issue persists.","key":"maintenance.gdu.gdu_server_locked

    Solução alternativa:

    1. Verifique se cada nó tem credenciais SSH correspondentes armazenadas num segredo.
      1. Verifique os nós de administração:
        kubectl get objectstorageadminnodes -o json | jq -r '.items[].metadata.name' | while read -r nodeName; do kubectl get secret -n gpc-system $nodeName-ssh-creds; done
      2. Verifique os nós de armazenamento:
        kubectl get objectstoragestoragenodes -o json | jq -r '.items[].metadata.name' | while read -r nodeName; do kubectl get secret -n gpc-system $nodeName-ssh-creds; done

      O resultado bem-sucedido tem o seguinte aspeto para os nós de armazenamento:

      NAME                                      TYPE     DATA   AGE
      gpcstgecn01-gce-gpcstgesite01-ssh-creds   Opaque   2      3d23h
      NAME                                      TYPE     DATA   AGE
      gpcstgecn02-gce-gpcstgesite01-ssh-creds   Opaque   2      3d23h
      NAME                                      TYPE     DATA   AGE
      gpcstgecn03-gce-gpcstgesite01-ssh-creds   Opaque   2      3d23h

      Se não for encontrado um segredo, o erro tem este aspeto:

      Error from server (NotFound): secrets "gpcstgeadm02-gce-gpcstgesite01-ssh-creds" not found
    2. Se o comando não devolver erros, pode ignorar com segurança os erros comunicados pelos reconciliadores.
    Vertex AI 1.11.x
    1.12.x

    O pod e o serviço de interface da tradução não são inicializados

    Sintomas:

    Durante as atualizações, o cluster da base de dados de tradução é recriado, o que faz com que o segredo do cluster do sistema ODS secret-store fique desatualizado e dessincronizado. Por este motivo, o pod e o serviço de frontend de tradução falham a inicialização.

    Solução alternativa:

    Elimine o segredo no cluster do sistema:

    kubectl --kubeconfig SYSTEM_CLUSTER_KUBECONFIG delete secret postgres-secret-store -n ai-translation-system

    Substitua SYSTEM_CLUSTER_KUBECONFIG pelo caminho para o ficheiro kubeconfig no cluster do sistema.

    Um controlador recria o Secret automaticamente e sincroniza-o novamente com o cluster de BD.

    Servidores físicos 1.12.4

    O servidor não consegue estabelecer ligação ao gestor de chaves

    Sintomas:

    O servidor não consegue estabelecer ligação ao gestor de chaves, o que impede que o estado do servidor fique disponível. Este problema faz com que a tarefa falhe e o cluster de administrador não fique pronto.server-encrypt-and-create-logical-drive Pode ver um erro nos registos de tarefas como este:

    Error: Error during command execution: ansible-playbook error: one or more host failed
    Command executed: /usr/local/bin/ansible-playbook --extra-vars {"server_generation":"gen10","ssa_crypto_pwd":"vf{kXgbL?VFcV]%0","ssa_master_key":"ten-admin-org-2"} --inventory 192.0.2.0, --private-key /etc/ssh-key/id_rsa --become serve
    r/encrypt_and_create_logical_drive.yaml
    exit status 2   

    Solução alternativa:

    Execute um AuxCycle e verifique se o iLO consegue estabelecer ligação ao gestor de chaves.

    Registo 1.12.4

    O registo de gravação antecipada preenche o volume persistente

    Sintomas:

    O Loki tem apenas um volume persistente (PV) para os registos de gravação antecipada (WAL) e os índices. O WAL pode preencher o PV se um pod do Loki não conseguir estabelecer ligação ao contentor de armazenamento durante horas. Se o PV não tiver espaço disponível, o Loki não pode ser recuperado, a menos que elimine o PV e reinicie o StatefulSet.

    Solução alternativa:

    Para recuperar um pod Loki deste estado, tem de reduzir a escala do StatefulSet correspondente e eliminar o PV sem espaço restante.

    Siga estes passos para recuperar o pod Loki:

    1. Certifique-se de que o contentor da ferramenta de E/S está instalado na estação de trabalho. Para obter detalhes, consulte o manual de operações OOPS-P0065.
    2. Para receber as autorizações necessárias para editar recursos, peça ao administrador de segurança que lhe conceda as seguintes funções:
      • observability-viewer
      • observability-admin
    3. Defina a variável de ambiente KUBECONFIG com o caminho para o ficheiro kubeconfig no cluster de administrador raiz. Para obter detalhes, consulte o manual de procedimentos IAM-R0004.
    4. Defina a variável de ambiente ORG_NAME com o nome da organização afetada.
    5. Guarde o seguinte conteúdo num ficheiro YAML com o nome log-admin-overrides.yaml:
      apiVersion: lcm.private.gdc.goog/v1
      kind: SubcomponentOverride
      metadata:
        name: log-admin-overrides
      spec:
        subComponentRef: log-admin
        backend:
          operableParameters:
            controller:
              disableReconcilers: "LoggingPipelineReconciler"
    6. Desative a opção LoggingPipelineReconciler:
      kubectl apply -f log-admin-overrides.yaml -n ${ORG_NAME}
    7. Defina a variável de ambiente KUBECONFIG com o caminho para o ficheiro kubeconfig no cluster onde o pod Loki afetado está em execução. Para obter detalhes, consulte o manual de procedimentos IAM-R0004.
    8. Defina a variável de ambiente LOKI_POD_NAME com o nome do pod do Loki afetado.
    9. Obtenha o nome do StatefulSet Loki:
      export LOKI_STATEFULSET_NAME=$(kubectl get pod $LOKI_POD_NAME -n obs-system -o json | jq -r '.metadata.labels.app')
    10. Obtenha o nome do PVC do Loki:
      export LOKI_PVC_NAME=$(kubectl get pod $LOKI_POD_NAME -n obs-system -o json | jq -r '.spec.volumes[] | select(.persistentVolumeClaim != null) | .persistentVolumeClaim.claimName')
    11. Obtenha as réplicas de Loki StatefulSet:
      export LOKI_STATEFULSET_REPLICAS=$(kubectl get statefulset $LOKI_STATEFULSET_NAME -n obs-system -o json | jq -r '.status.replicas')
    12. Reduza a escala do Loki StatefulSet:
      kubectl scale statefulset $LOKI_STATEFULSET_NAME -n obs-system --replicas=0
    13. Verifique se não existem pods em execução:StatefulSet
      kubectl get statefulset $LOKI_STATEFULSET_NAME -n obs-system

      O resultado tem de ser semelhante ao seguinte exemplo:

      NAME                      READY   AGE
      audit-logs-loki-io        0/0     4d3h
    14. Elimine o PVC afetado:
      kubectl delete pvc $LOKI_PVC_NAME -n obs-system
    15. Aumente a escala do Loki StatefulSet:
      kubectl scale statefulset $LOKI_STATEFULSET_NAME -n obs-system --replicas=${LOKI_STATEFULSET_REPLICAS}
    16. Defina a variável de ambiente KUBECONFIG com o caminho para o ficheiro kubeconfig no cluster de administrador da organização afetada. Para obter detalhes, consulte o manual de procedimentos IAM-R0004.
    17. Edite o conteúdo no ficheiro YAML log-admin-overrides.yaml da seguinte forma:
      apiVersion: lcm.private.gdc.goog/v1
      kind: SubcomponentOverride
      metadata:
        name: log-admin-overrides
        namespace: root
      spec:
        subComponentRef: log-admin
        backend:
          operableParameters:
            controller:
              disableReconcilers: ""
    18. Ative a opção LoggingPipelineReconciler:
      kubectl apply -f log-admin-overrides.yaml -n ${ORG_NAME}
    19. Verifique se todos os pods StatefulSet estão em execução e em bom estado:
      kubectl get statefulset $LOKI_STATEFULSET_NAME -n obs-system

      O resultado tem de ser semelhante ao seguinte exemplo:

      NAME                 READY   AGE
      audit-logs-loki-io   5/5     2d5h

      Neste caso, o StatefulSet tem cinco de cinco (5/5) réplicas disponíveis.

    Atualizar 1.12.4

    As tarefas são agendadas continuamente

    Sintomas:

    As tarefas são agendadas continuamente. Assim que uma tarefa é terminada, é agendada uma nova tarefa. As tarefas que estão a ser agendadas continuamente são:

    • unet-networkpolicy-assets-parameter
    • unet-nodenetworkpolicy-assets-parameter
    • unet-nodenetworkpolicy-assets-readiness
    • unet-userclusterpolicy-assets-parameter
    • unet-clustermesh-backend-parameter
    • unet-clustermesh-backend-readiness

    Solução alternativa:

    1. Pause os seguintes subcomponentes:
      • unet-networkpolicy
      • unet-nodenetworkpolicy
      • unet-nodenetworkpolicy
      • unet-userclusterpolicy
      • unet-clustermesh
    2. Desativar a pausa dos subcomponentes sempre que houver uma alteração ao segredo fleet-info no cluster de administrador raiz. Este problema ocorre quando existe uma alteração nos comutadores de gestão da instância, como kr get managementswitches -A, ou uma alteração a qualquer cidrclaim no espaço de nomes da organização.
    3. Desative a pausa dos subcomponentes sempre que houver uma alteração a qualquer recurso NodePool no cluster de administrador da organização. Despause os subcomponentes antes de começar.
    Atualizar 1.12.4

    O upstream saudável para o ServiceNow não está disponível

    Sintomas:

    1. Quando atualiza da versão 1.12.2 para a 1.12.4, não está disponível um upstream saudável para o ServiceNow. Pode ver a seguinte mensagem: failed to stage volume: LUKS passphrase cannot be empty.
    2. A classe de armazenamento system-performance-rwo não está ativada para LUKS. O anexo de volume indica que o PVC tem o LUKS ativado.
    3. O reconciliador procura um segredo com as frases secretas do LUKS. Uma vez que o anexo de volume indica que tem o LUKS ativado e a classe de armazenamento não tem o LUKS ativado, a palavra-passe secreta não é criada.

    Solução alternativa:

    1. Obtenha o Kubeconfig para o cluster raiz ou de administrador da organização onde o problema aparece:
            export KUBECONFIG=${ROOT_OR_ORG_ADMIN_KUBECONFIG}
    2. Elimine a classe de armazenamento system-performance-rwo e volte a criá-la:
            kubectl delete storageclass system-performance-rwo
            kubectl apply -f system-performance-rwo.yaml
    3. Crie um novo YAML para a classe de armazenamento system-performance-rwo e ative o LUKS:
                 # kubectl get sc system-performance-rwo -o yaml
           allowVolumeExpansion: true
           apiVersion: storage.k8s.io/v1
           kind: StorageClass
           metadata:
             annotations:
               disk.gdc.goog/luks-encrypted: "true"
               helm.sh/resource-policy: keep
               lcm.private.gdc.goog/claim-by-force: "true"
               meta.helm.sh/release-name: file-netapp-trident-backend
               meta.helm.sh/release-namespace: netapp-trident
               storageclass.kubernetes.io/is-default-class: "false"
             labels:
               app.kubernetes.io/managed-by: Helm
             name: system-performance-rwo
           parameters:
             backendType: ontap-san
             csi.storage.k8s.io/node-expand-secret-name: g-luks-${pvc.name}
             csi.storage.k8s.io/node-expand-secret-namespace: ${pvc.namespace}
             csi.storage.k8s.io/node-publish-secret-name: g-luks-${pvc.name}
             csi.storage.k8s.io/node-publish-secret-namespace: ${pvc.namespace}
             csi.storage.k8s.io/node-stage-secret-name: g-luks-${pvc.name}
             csi.storage.k8s.io/node-stage-secret-namespace: ${pvc.namespace}
             fsType: ext4
             selector: tier=performance
           provisioner: csi.trident.netapp.io
           reclaimPolicy: Delete
           volumeBindingMode: Immediate
    Atualizar 1.12.4

    A atualização do subcomponente file-netapp-trident tem o estado Reconciliation ongoing

    Sintomas:

    Pode ver o estado do subcomponente file-netapp-trident a alternar entre Reconciling e ReconciliationCompleted.

    Solução alternativa:

    Pode ignorar a conciliação em curso se as seguintes condições forem cumpridas:

    1. O valor de TridentBackend é online.
    2. A configuração TridentBackend é bound.
    3. A implementação netapp-trident-controller está em bom estado.
    4. O netapp-trident-node-linux DaemonSet não tem problemas.
    Atualizar 1.12.4

    A atualização do nó de trabalho do cluster do sistema não consegue gerar o delta entre manifest e snapshot

    Sintomas:

    Quando atualiza de 1.12.2 para 1.12.4, a atualização da organização fica bloqueada na fase NodeUpgrade e a tarefa de atualização do nó apresenta o seguinte erro:

          Message: failed to generate delta between manifest and snapshot: failed to create or update delta configmap: failed to calculate delta between snapshot and manifest: failed to get valid OS distribution for delta comparison, distribution:

    Para confirmar o problema, siga estes passos:

    1. Obtenha o Kubeconfig para o cluster de raiz ou de administrador da organização onde a atualização do nó está a falhar e verifique se o nodeupgradetask falhou:
           export KUBECONFIG=${ROOT_OR_ORG_ADMIN_KUBECONFIG}
           kubectl get nodeupgradetask -A -ojsonpath='{.items[*].status.conditions[?(@.status != "True")]}' | jq 
    2. Verifique se a mensagem corresponde à mensagem de erro anterior:
            Message: failed to generate delta between manifest and snapshot: failed to create or update delta configmap: failed to calculate delta between snapshot and manifest: failed to get valid OS distribution for delta comparison, distribution:
    3. Verifique se um osartifactsnapshot tem uma distribuição em falta:
            kubectl get osartifactsnapshots.system.private.gdc.goog -A -o json | jq '.items[] | select(.status.distribution == "") | .metadata.name'
    4. Verifique se existe, pelo menos, uma imagem instantânea impressa que não tenha a distribuição definida.

    Solução alternativa:

    1. Obtenha o Kubeconfig para o cluster ao qual o nó pertence:
           export KUBECONFIG=${CLUSTER_KUBECONFIG}
           kubectl rollout restart -n os-system os-core-controller 
    2. Verifique se a captura de ecrã tem agora uma distribuição. (Este comando pode demorar alguns minutos):
            kubectl get osartifactsnapshots.system.private.gdc.goog -A -o json | jq '.items[] | select(.status.distribution == "") | .metadata.name'
    3. Este comando não deve devolver resultados. Se continuar a ver uma distribuição em falta, abra um pedido de apoio técnico.
    Atualizar 1.12.4

    kubelet não consegue remover cgroup para pods com registos de spam

    Sintomas:

    1. O kubelet continua a imprimir o seguinte registo de spam:
      May 22 23:08:00 control-1--f1c6edcdeaa9e08-e387c07294a9d3ab.lab.anthos kubelet[3751]: time="2024-05-22T23:08:00Z" level=warning msg="Failed to remove cgroup (will retry)" error="rmdir /sys/fs/cgroup/freezer/kubepods.slice/kubepods-burstable.slice/kubepods-burstable-podea876418628af89ec2a74ea73d4a6023.slice/cri-containerd-d06aacfec2b399fcf05a187883341db1207c04be3698ec058214a6392cfc6148.scope: device or resource busy"
      ……
      May 22 23:09:04 control-1 kubelet[3751]: time="2024-05-22T23:09:04Z" level=warning msg="Failed to remove cgroup (will retry)" error="rmdir /sys/fs/cgroup/net_cls,net_prio/kubepods.slice/kubepods-burstable.slice/kubepods-burstable-podea876418628af89ec2a74ea73d4a6023.slice/cri-containerd-d06aacfec2b399fcf05a187883341db1207c04be3698ec058214a6392cfc6148.scope: device or resource busy"
    2. O processo runc init está bloqueado, o que impede que o kubelet elimine o pod cgroup.

    Solução alternativa:

    1. Use o seguinte script para encontrar o processo que está a bloquear a eliminação de cgroup:
           # Find matching cgroup directories
      MATCHING_CGROUPS=$(find /sys/fs/cgroup -type d -name "*74353c*")
      
      
      if [ -z "$MATCHING_CGROUPS" ]; then
       echo "No cgroups found containing 'd06aac'."
       exit 0
      fi
      
      
      echo "Matching cgroups:"
      
      
      for cgroup in $MATCHING_CGROUPS; do
       echo "- $cgroup"  # Print cgroup path
      
      
       # Check if cgroup.procs exists
       if [ -f "$cgroup/cgroup.procs" ]; then
         echo "  Processes:"
      
      
         # List PIDs in cgroup.procs
         for pid in $(cat "$cgroup/cgroup.procs"); do
           # Get process details
           ps -o pid,comm,cmd --no-headers $pid 2>/dev/null  # Suppress errors if process doesn't exist
         done
       else
         echo "  No cgroup.procs file found."  # Handle cases where cgroup.procs is missing
       fi
      
      
       echo  # Add a newline for better readability
       done
    2. Verifique o estado de congelamento através de cat freezer.state. O estado deve ser FROZEN.
    3. Echo "THAWED" > freezer.state
    4. O grupo cgroup foi eliminado com êxito. Kubelet para de enviar spam para o registo.
    Desempenho 1.12.4

    Subcomponente perf-ptaas com erro de conciliação

    Sintomas:

    O subcomponente perf-ptaas apresenta o seguinte código de erro, o que impede a implementação do PTaaS:

    Reconciliation error: E0100 - deploy: failed to transfer ownership of conflicting resources for install: these resources need to be force claimed, but they are not annotated: [Resource: "resourcemanager.gdc.goog/v1, Resource=projects", GroupVersionKind: "resourcemanager.gdc.goog/v1, Kind=Project"

    Solução alternativa:

    O PTaaS está implementado na organização gdchservices.

    1. Inspeccione as anotações e as etiquetas do projeto gdch-perftest e do contentor perftest-bucket-reports do PTaaS no espaço de nomes perftest gdch-perftest. O contentor pode não ter a etiqueta: app.kubernetes.io/managed-by=Helm, e as anotações: meta.helm.sh/release-name=perf-ptaas-assets e meta.helm.sh/release-namespace=gdch-perftest. Adicione estas etiquetas e anotações manualmente:
      kubectl --kubeconfig gdchservices-admin-kubeconfig label buckets -n gdch-perftest perftest-bucket-reports app.kubernetes.io/managed-by=Helm
      kubectl --kubeconfig gdchservices-admin-kubeconfig annotate buckets -n gdch-perftest perftest-bucket-reports meta.helm.sh/release-name=perf-ptaas-assets
      kubectl --kubeconfig gdchservices-admin-kubeconfig annotate buckets -n gdch-perftest perftest-bucket-reports meta.helm.sh/release-namespace=gdch-perftest
      Certifique-se de que o OCLCM reivindica o contentor à força:
      kubectl --kubeconfig gdchservices-admin-kubeconfig annotate buckets -n gdch-perftest perftest-bucket-reports lcm.private.gdc.goog/claim-by-force=true
    2. Inspecione as anotações do projeto PTaaS gdch-perftest. O projeto pode estar configurado incorretamente com a anotação: meta.helm.sh/release-name=perf-ptaas-assets. Altere esta anotação para meta.helm.sh/release-name=perf-ptaas-backend:
      kubectl --kubeconfig gdchservices-admin-kubeconfig annotate projects -n gpc-system gdch-perftest meta.helm.sh/release-name=perf-ptaas-backend --overwrite=true
      Certifique-se de que o OCLCM reivindica o projeto à força:
      kubectl --kubeconfig gdchservices-admin-kubeconfig annotate projects -n gpc-system gdch-perftest lcm.private.gdc.goog/claim-by-force=true
    3. Verifique se o subcomponente é reconciliado no cluster de administrador principal:
      kubectl get subcomponent -n gdchservices perf-ptaas